R-Type
JsonConversion.hpp
Go to the documentation of this file.
1 /*
2  ** EPITECH PROJECT, 2023
3  ** R-type
4  ** File description:
5  ** JsonConversion
6  */
7 
8 #ifndef JSONCONVERSION_HPP_
9 #define JSONCONVERSION_HPP_
10 #include <nlohmann/json.hpp>
11 #include <iostream>
23 
25 
27 {
28  const std::unordered_map<std::string, Key> strKeyMap = {{"A", A}, {"B", B}, {"C", C}, {"D", D}, {"E", E}, {"F", F},
29  {"G", G}, {"H", H}, {"I", I}, {"J", J}, {"K", K}, {"L", L}, {"M", M}, {"N", N}, {"O", O}, {"P", P}, {"Q", Q},
30  {"R", R}, {"S", S}, {"T", T}, {"U", U}, {"V", V}, {"W", W}, {"X", X}, {"Y", Y}, {"Z", Z}, {"Num0", Num0},
31  {"Num1", Num1}, {"Num2", Num2}, {"Num3", Num3}, {"Num4", Num4}, {"Num5", Num5}, {"Num6", Num6}, {"Num7", Num7},
32  {"Num8", Num8}, {"Num9", Num9}, {"Escape", Escape}, {"LControl", LControl}, {"LShift", LShift}, {"LAlt", LAlt},
33  {"LSystem", LSystem}, {"RControl", RControl}, {"RShift", RShift}, {"RAlt", RAlt}, {"RSystem", RSystem},
34  {"Menu", Menu}, {"LBracket", LBracket}, {"RBracket", RBracket}, {"Semicolon", Semicolon}, {"Comma", Comma},
35  {"Period", Period}, {"Quote", Quote}, {"Slash", Slash}, {"Backslash", Backslash}, {"Tilde", Tilde},
36  {"Equal", Equal}, {"Dash", Dash}, {"Space", Space}, {"Enter", Enter}, {"Backspace", Backspace}, {"Tab", Tab},
37  {"Add", Add}, {"Subtract", Subtract}, {"Multiply", Multiply}, {"Divide", Divide}, {"Left", Left},
38  {"Right", Right}, {"Up", Up}, {"Down", Down}, {"Numpad0", Numpad0}, {"Numpad1", Numpad1}, {"Numpad2", Numpad2},
39  {"Numpad3", Numpad3}, {"Numpad4", Numpad4}, {"Numpad5", Numpad5}, {"Numpad6", Numpad6}, {"Numpad7", Numpad7},
40  {"Numpad8", Numpad8}, {"Numpad9", Numpad9}, {"F1", F1}, {"F2", F2}, {"F3", F3}, {"F4", F4}, {"F5", F5},
41  {"F6", F6}, {"F7", F7}, {"F8", F8}, {"F9", F9}, {"F10", F10}, {"F11", F11}, {"F12", F12}, {"F13", F13},
42  {"F14", F14}, {"F15", F15}, {"Pause", Pause}, {"No_Key", NO_KEY}};
43 };
44 
45 namespace GameEngine
46 {
50  void from_json(const json &j, Input::Keyboard::Key &key)
51  {
52  auto str = j.get<std::string>();
53  key = Input::Keyboard::strKeyMap.at(str);
54  }
55 
60  template <typename T>
61  void from_json(const json &j, Rect<T> &rect)
62  {
63  j.at("left").get_to(rect.left);
64  j.at("top").get_to(rect.top);
65  j.at("width").get_to(rect.width);
66  j.at("height").get_to(rect.height);
67  }
68 
69  template <typename T>
70  void from_json(const json &j, Vector2<T> &vec)
71  {
72  j.at("x").get_to(vec.x);
73  j.at("y").get_to(vec.y);
74  }
78  void from_json(const json &j, Texture &texture)
79  {
80  std::string path(j.at("path").get<std::string>());
81  Rect<int> area;
82  j.at("area").get_to(area);
83  texture.load(path, area);
84  }
85 
89  void from_json(const json &j, TransformComponent &tc)
90  {
91  j.at("position").get_to(tc.position);
92  j.at("velocity").get_to(tc.velocity);
93  }
94 
98  void from_json(const json &j, HealthComponent &hc)
99  {
100  hc.health = j.contains("health") ? j.at("health").get<int>() : 5;
101  }
102 
106  void from_json(const json &j, DamageComponent &dc) { j.at("damage").get_to(dc.damage); }
107 
112  {
113  cc.key_up = Input::Keyboard::strKeyMap.at(j.at("key_up").get<std::string>());
114  cc.key_down = Input::Keyboard::strKeyMap.at(j.at("key_down").get<std::string>());
115  cc.key_left = Input::Keyboard::strKeyMap.at(j.at("key_left").get<std::string>());
116  cc.key_right = Input::Keyboard::strKeyMap.at(j.at("key_right").get<std::string>());
117  j.at("speed").get_to(cc.speed);
118  }
119 
123  void from_json(const json &j, TextureComponent &tc)
124  {
125  j.at("texturePath").get_to(tc.path);
126  j.at("textureSize").get_to(tc.textureSize);
127  tc.animated = j.contains("animated") ? j.at("animated").get<bool>() : false;
128  for (auto &trect : j.at("textureRects"))
129  tc.textureRects.push_back(trect);
130  tc.animationSpeed = j.contains("animationSpeed") ? j.at("animationSpeed").get<float>() : 0.0f;
131  tc.isRendered = j.contains("isRendered") ? j.at("isRendered").get<bool>() : true;
132  tc.lastUpdate = j.contains("lastUpdate") ? j.at("lastUpdate").get<float>() : 0.0f;
133  tc.animeid = 0;
134  j.at("renderLayer").get_to(tc.renderLayer);
135  }
136 
140  void from_json(const json &j, CollisionComponent &cc)
141  {
142  j.at("collider").get_to(cc.collider);
143  j.at("layer").get_to(cc.layer);
144  cc.isActive = j.contains("isActive") ? j.at("isActive").get<bool>() : true;
145  }
146 
150  void from_json(const json &j, GravityComponent &gc)
151  {
152  j.at("gravityForce").get_to(gc.gravityForce);
153  j.at("isActive").get_to(gc.isActive);
154  }
155 
159  void from_json(const json &j, CameraComponent &cc)
160  {
161  auto rect = j.at("cameraView").get<Rect<float>>();
162  cc.view = GameEngine::View(rect);
163  if (j.contains("cameraViewport")) {
164  rect = j.at("cameraViewport").get<Rect<float>>();
165  cc.view.setViewPort({rect.left, rect.top}, rect.width, rect.height);
166  }
167  if (j.contains("follow_x"))
168  j.at("follow_x").get_to(cc.follow_x);
169  if (j.contains("follow_y"))
170  j.at("follow_y").get_to(cc.follow_y);
171  if (j.contains("isActive"))
172  j.at("isActive").get_to(cc.isActive);
173  }
174 
175  void from_json(const json &j, TextComponent &tx)
176  {
177  tx.text = GameEngine::Text();
178  j.at("str").get_to(tx.str);
179  j.at("size").get_to(tx.size);
180  j.at("fontPath").get_to(tx.fontPath);
181  tx.isRendered = j.contains("isRendered") ? j.at("isRendered").get<bool>() : true;
182  j.at("renderLayer").get_to(tx.renderLayer);
183  }
184 } // namespace GameEngine
185 
186 #endif /* !JSONCONVERSION_HPP_ */
nlohmann::json json
Definition: JsonConversion.hpp:24
nlohmann::json json
Definition: PrefabManager.hpp:20
class representing a rect
Definition: Rect.hpp:25
T height
Definition: Rect.hpp:40
T top
Definition: Rect.hpp:38
T left
Definition: Rect.hpp:37
T width
Definition: Rect.hpp:39
Class representing a text wrapper for sf::Text with basic functionality.
Definition: SfmlTypes.hpp:224
Class representing a texture wrapper for sf::Texture with an associated area.
Definition: SfmlTypes.hpp:58
void load(const std::string &filename, const IRect< int, sf::Rect > &area) override
Loads a texture from a file with a specified area.
Definition: SfmlTypes.hpp:70
a Vector2 class
Definition: Vector.hpp:20
T y
Definition: Vector.hpp:101
T x
Definition: Vector.hpp:98
Class representing a view wrapper for sf::View.
Definition: SfmlTypes.hpp:81
void setViewPort(const Vector2< float > &startingPoint, float width, float height) override
set a viewport rectangle
Definition: SfmlTypes.hpp:107
Definition: Keyboard.hpp:26
const std::unordered_map< std::string, Key > strKeyMap
Definition: JsonConversion.hpp:28
Key
Definition: Keyboard.hpp:28
@ P
Definition: Keyboard.hpp:45
@ E
Definition: Keyboard.hpp:34
@ Comma
Definition: Keyboard.hpp:79
@ F4
Definition: Keyboard.hpp:112
@ Z
Definition: Keyboard.hpp:55
@ Period
Definition: Keyboard.hpp:80
@ Tab
Definition: Keyboard.hpp:90
@ F1
Definition: Keyboard.hpp:109
@ Dash
Definition: Keyboard.hpp:86
@ L
Definition: Keyboard.hpp:41
@ Numpad4
Definition: Keyboard.hpp:103
@ F
Definition: Keyboard.hpp:35
@ Equal
Definition: Keyboard.hpp:85
@ Tilde
Definition: Keyboard.hpp:84
@ RSystem
Definition: Keyboard.hpp:74
@ Quote
Definition: Keyboard.hpp:81
@ J
Definition: Keyboard.hpp:39
@ X
Definition: Keyboard.hpp:53
@ Num1
Definition: Keyboard.hpp:57
@ Menu
Definition: Keyboard.hpp:75
@ H
Definition: Keyboard.hpp:37
@ Divide
Definition: Keyboard.hpp:94
@ RControl
Definition: Keyboard.hpp:71
@ Num9
Definition: Keyboard.hpp:65
@ Semicolon
Definition: Keyboard.hpp:78
@ D
Definition: Keyboard.hpp:33
@ RShift
Definition: Keyboard.hpp:72
@ C
Definition: Keyboard.hpp:32
@ Num2
Definition: Keyboard.hpp:58
@ Numpad5
Definition: Keyboard.hpp:104
@ T
Definition: Keyboard.hpp:49
@ Escape
Definition: Keyboard.hpp:66
@ F9
Definition: Keyboard.hpp:117
@ Down
Definition: Keyboard.hpp:98
@ Numpad6
Definition: Keyboard.hpp:105
@ Numpad3
Definition: Keyboard.hpp:102
@ Num0
Definition: Keyboard.hpp:56
@ Num4
Definition: Keyboard.hpp:60
@ Pause
Definition: Keyboard.hpp:124
@ Numpad2
Definition: Keyboard.hpp:101
@ RAlt
Definition: Keyboard.hpp:73
@ Space
Definition: Keyboard.hpp:87
@ G
Definition: Keyboard.hpp:36
@ F11
Definition: Keyboard.hpp:119
@ A
Definition: Keyboard.hpp:30
@ Num5
Definition: Keyboard.hpp:61
@ Numpad7
Definition: Keyboard.hpp:106
@ LSystem
Definition: Keyboard.hpp:70
@ Multiply
Definition: Keyboard.hpp:93
@ O
Definition: Keyboard.hpp:44
@ Up
Definition: Keyboard.hpp:97
@ F10
Definition: Keyboard.hpp:118
@ S
Definition: Keyboard.hpp:48
@ V
Definition: Keyboard.hpp:51
@ Y
Definition: Keyboard.hpp:54
@ Right
Definition: Keyboard.hpp:96
@ LShift
Definition: Keyboard.hpp:68
@ F13
Definition: Keyboard.hpp:121
@ Numpad9
Definition: Keyboard.hpp:108
@ F2
Definition: Keyboard.hpp:110
@ Num6
Definition: Keyboard.hpp:62
@ Q
Definition: Keyboard.hpp:46
@ Add
Definition: Keyboard.hpp:91
@ Num8
Definition: Keyboard.hpp:64
@ F15
Definition: Keyboard.hpp:123
@ Slash
Definition: Keyboard.hpp:82
@ F5
Definition: Keyboard.hpp:113
@ F12
Definition: Keyboard.hpp:120
@ F3
Definition: Keyboard.hpp:111
@ Num3
Definition: Keyboard.hpp:59
@ LControl
Definition: Keyboard.hpp:67
@ RBracket
Definition: Keyboard.hpp:77
@ Left
Definition: Keyboard.hpp:95
@ K
Definition: Keyboard.hpp:40
@ F8
Definition: Keyboard.hpp:116
@ U
Definition: Keyboard.hpp:50
@ Backslash
Definition: Keyboard.hpp:83
@ F14
Definition: Keyboard.hpp:122
@ I
Definition: Keyboard.hpp:38
@ R
Definition: Keyboard.hpp:47
@ Subtract
Definition: Keyboard.hpp:92
@ Numpad8
Definition: Keyboard.hpp:107
@ B
Definition: Keyboard.hpp:31
@ NO_KEY
Definition: Keyboard.hpp:29
@ LAlt
Definition: Keyboard.hpp:69
@ F6
Definition: Keyboard.hpp:114
@ Num7
Definition: Keyboard.hpp:63
@ M
Definition: Keyboard.hpp:42
@ F7
Definition: Keyboard.hpp:115
@ W
Definition: Keyboard.hpp:52
@ Backspace
Definition: Keyboard.hpp:89
@ N
Definition: Keyboard.hpp:43
@ LBracket
Definition: Keyboard.hpp:76
@ Numpad0
Definition: Keyboard.hpp:99
@ Numpad1
Definition: Keyboard.hpp:100
@ Enter
Definition: Keyboard.hpp:88
Definition: AssetManager.hpp:15
void from_json(const json &j, Input::Keyboard::Key &key)
Function to convert a json object to a key.
Definition: JsonConversion.hpp:50
Definition: CameraComponent.hpp:17
bool follow_y
Definition: CameraComponent.hpp:21
bool isActive
Definition: CameraComponent.hpp:22
View view
Definition: CameraComponent.hpp:18
bool follow_x
Definition: CameraComponent.hpp:20
Definition: CollisionComponent.hpp:17
std::size_t layer
Definition: CollisionComponent.hpp:20
Rectf collider
Definition: CollisionComponent.hpp:18
bool isActive
Definition: CollisionComponent.hpp:21
Definition: ControllableComponent.hpp:15
float speed
Definition: ControllableComponent.hpp:20
Input::Keyboard::Key key_right
Definition: ControllableComponent.hpp:19
Input::Keyboard::Key key_left
Definition: ControllableComponent.hpp:17
Input::Keyboard::Key key_down
Definition: ControllableComponent.hpp:18
Input::Keyboard::Key key_up
Definition: ControllableComponent.hpp:16
Definition: DamageComponent.hpp:16
std::size_t damage
Definition: DamageComponent.hpp:17
Definition: GravityComponent.hpp:15
Vector2< float > gravityForce
Definition: GravityComponent.hpp:16
bool isActive
Definition: GravityComponent.hpp:18
Definition: HealthComponent.hpp:16
int health
Definition: HealthComponent.hpp:17
Definition: TextComponent.hpp:17
size_t size
Definition: TextComponent.hpp:20
Text text
Definition: TextComponent.hpp:21
std::string str
Definition: TextComponent.hpp:18
bool isRendered
Definition: TextComponent.hpp:22
std::string fontPath
Definition: TextComponent.hpp:19
size_t renderLayer
Definition: TextComponent.hpp:23
Definition: TextureComponent.hpp:16
size_t renderLayer
Definition: TextureComponent.hpp:26
bool animated
Definition: TextureComponent.hpp:19
float animationSpeed
Definition: TextureComponent.hpp:22
std::vector< Rect< int > > textureRects
Definition: TextureComponent.hpp:21
float lastUpdate
Definition: TextureComponent.hpp:24
Rect< int > textureSize
Definition: TextureComponent.hpp:20
size_t animeid
Definition: TextureComponent.hpp:25
std::string path
Definition: TextureComponent.hpp:17
bool isRendered
Definition: TextureComponent.hpp:23
Definition: TransformComponent.hpp:15
Vector2< float > velocity
Definition: TransformComponent.hpp:17
Vector2< float > position
Definition: TransformComponent.hpp:16