Skip to content

Commit 6912932

Browse files
committed
Able to have set for EntityEffect
1 parent a40a71d commit 6912932

File tree

5 files changed

+114
-19
lines changed

5 files changed

+114
-19
lines changed

.vscode/settings.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"system_error": "cpp",
88
"xlocale": "cpp",
99
"vector": "cpp",
10-
"unordered_map": "cpp"
10+
"unordered_map": "cpp",
11+
"optional": "cpp"
1112
}
1213
}

src/arena/logic/ArenaType.h

-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ namespace arena::logic {
141141
private:
142142
Value value;
143143
};
144-
typedef std::shared_ptr<ArenaType> pArenaType;
145144
}
146145

147146
#endif

src/arena/logic/Entity.cpp

+22-15
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
#include "Entity.h"
22

33
namespace arena::logic {
4-
tl::expected<Entity, std::string> Entity::create(pEntityData entity_data, Image entity_image)
5-
{
4+
tl::expected<Entity, std::string> Entity::create(
5+
pEntityData entity_data,
6+
Image entity_image
7+
) {
68
EntityDataManager& entity_data_manager = EntityDataManager::getInstance();
79
std::vector<std::shared_ptr<Entity>> spawn_entities;
810
bool spawn_entity_immediately = !entity_data->getSpawnCharacter().empty() && !entity_data->getSpawnPauseTime();
@@ -20,17 +22,6 @@ namespace arena::logic {
2022
return Entity(entity_data, entity_image, spawn_entities);
2123
}
2224

23-
Entity::Entity(pEntityData entity_data, Image image, std::vector<std::shared_ptr<Entity>> spawn_entities) : entity_data(entity_data), image(image), spawn_entities(spawn_entities)
24-
{
25-
float scale = (this->entity_data->getScale() / 100.0f);
26-
float entity_width = (this->image.get_width() * scale) * Global::scale;
27-
float entity_height = (this->image.get_height() * scale) * Global::scale;
28-
29-
this->size = { entity_width, entity_height };
30-
31-
this->rect = SkRect::MakeXYWH(0, 0, this->size.x, this->size.y);
32-
}
33-
3425
void Entity::setPosition(SkV2 position)
3526
{
3627
this->position = position;
@@ -73,11 +64,18 @@ namespace arena::logic {
7364
Canvas entity_canvas(this->size.x, this->size.y);
7465
entity_canvas.draw_image(this->image, SkRect{0, 0, this->size.x, this->size.y}, nullptr);
7566

76-
SkPaint paint;
67+
// Damage
68+
/*SkPaint paint;
7769
paint.setBlendMode(SkBlendMode::kPlus);
7870
paint.setColor(SK_ColorRED);
79-
entity_canvas.draw_rect(SkRect{ 0, 0, this->size.x, this->size.y }, paint);
71+
entity_canvas.draw_rect(SkRect{ 0, 0, this->size.x, this->size.y }, paint);*/
8072

73+
// Freeze
74+
/*SkPaint paint;
75+
paint.setBlendMode(SkBlendMode::kPlus);
76+
paint.setColor(SkColorSetARGB(255, 0, 90, 255));
77+
entity_canvas.draw_rect(SkRect{ 0, 0, this->size.x, this->size.y }, paint);*/
78+
8179
SkPaint normal;
8280
normal.setBlendMode(SkBlendMode::kDstIn);
8381
entity_canvas.draw_image(this->image, SkRect{0, 0, this->size.x, this->size.y}, & normal);
@@ -112,4 +110,13 @@ namespace arena::logic {
112110
{
113111

114112
}
113+
114+
Entity::Entity(pEntityData entity_data, Image image, std::vector<std::shared_ptr<Entity>> spawn_entities) : entity_data(entity_data), image(image), spawn_entities(spawn_entities)
115+
{
116+
float scale = (this->entity_data->getScale() / 100.0f);
117+
float entity_width = (this->image.get_width() * scale) * Global::scale;
118+
float entity_height = (this->image.get_height() * scale) * Global::scale;
119+
this->size = { entity_width, entity_height };
120+
this->rect = SkRect::MakeXYWH(0, 0, this->size.x, this->size.y);
121+
}
115122
}

src/arena/logic/Entity.h

+16-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
#pragma once
55

66
#include <filesystem>
7+
#include <unordered_set>
8+
#include <vector>
79

810
#include "../../canvas/ImageLoader.h"
911
#include "../../canvas/Drawable.h"
@@ -14,6 +16,8 @@
1416

1517
#include "../../utils/Global.hpp"
1618

19+
#include "EntityEffect.h"
20+
1721
using namespace arena::data;
1822
using namespace csv;
1923
using namespace canvas;
@@ -22,7 +26,10 @@ namespace arena::logic {
2226
class Entity : public Drawable
2327
{
2428
public:
25-
static tl::expected<Entity, std::string> create(pEntityData entity_data, Image image);
29+
static tl::expected<Entity, std::string> create(
30+
pEntityData entity_data,
31+
Image entity_image
32+
);
2633
void setPosition(SkV2 position);
2734
void draw(Canvas& canvas);
2835
void draw_shadow(Canvas& canvas);
@@ -37,8 +44,15 @@ namespace arena::logic {
3744
Image image;
3845

3946
std::vector<std::shared_ptr<Entity>> spawn_entities;
47+
48+
std::unordered_set<EntityEffect, EntityEffectHasher> non_stackable_effects;
49+
std::vector<EntityEffect> stackable_effects;
4050
private:
41-
Entity(pEntityData entity_data, Image image, std::vector<std::shared_ptr<Entity>> spawn_entities);
51+
Entity(
52+
pEntityData entity_data,
53+
Image image,
54+
std::vector<std::shared_ptr<Entity>> spawn_entities
55+
);
4256
};
4357
typedef std::shared_ptr<Entity> pEntity;
4458
}

src/arena/logic/EntityEffect.h

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#ifndef ENTITYEFFECT_H
2+
#define ENTITYEFFECT_H
3+
4+
#pragma once
5+
6+
#include <string>
7+
8+
namespace arena::logic {
9+
10+
class EntityEffect
11+
{
12+
public:
13+
enum Value
14+
{
15+
Empty,
16+
Damage,
17+
Heal,
18+
Freeze,
19+
Rage,
20+
Clone,
21+
};
22+
23+
EntityEffect() = default;
24+
constexpr EntityEffect(Value value) : value(value) { }
25+
26+
constexpr operator Value() const { return value; }
27+
explicit operator bool() const = delete;
28+
constexpr bool operator==(EntityEffect a) const { return value == a.value; }
29+
constexpr bool operator!=(EntityEffect a) const { return value != a.value; }
30+
31+
std::string add_effect() const
32+
{
33+
switch (value)
34+
{
35+
case EntityEffect::Damage:
36+
{
37+
break;
38+
}
39+
case EntityEffect::Heal:
40+
{
41+
break; // 0, 6, 191, 0
42+
}
43+
case EntityEffect::Clone:
44+
{
45+
break;
46+
}
47+
case EntityEffect::Freeze:
48+
{
49+
break;
50+
}
51+
case EntityEffect::Rage:
52+
{
53+
break;
54+
}
55+
default:
56+
{
57+
break;
58+
}
59+
}
60+
}
61+
private:
62+
Value value;
63+
};
64+
65+
struct EntityEffectHasher {
66+
std::size_t operator()(const arena::logic::EntityEffect::Value& value) const
67+
{
68+
return std::hash<int>()(value);
69+
}
70+
};
71+
}
72+
73+
74+
#endif

0 commit comments

Comments
 (0)