PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
physics_serialization.h
1#pragma once
2
3#include "pixelbullet/physics/physics_types.h"
4#include "pixelbullet/serialization/node.h"
5#include "pixelbullet/serialization/node_reader.h"
6
7#include <string>
8
9namespace pixelbullet
10{
11inline Node& operator<<(Node& node, const ColliderShapeType& value)
12{
13 switch (value)
14 {
15 case ColliderShapeType::Box:
16 node << "Box";
17 break;
18 case ColliderShapeType::Sphere:
19 node << "Sphere";
20 break;
21 case ColliderShapeType::Capsule:
22 node << "Capsule";
23 break;
24 }
25 return node;
26}
27
28inline const Node& operator>>(const Node& node, ColliderShapeType& value)
29{
30 std::string serialized;
31 node >> serialized;
32 if (serialized == "Sphere")
33 {
34 value = ColliderShapeType::Sphere;
35 }
36 else if (serialized == "Capsule")
37 {
38 value = ColliderShapeType::Capsule;
39 }
40 else
41 {
42 value = ColliderShapeType::Box;
43 }
44 return node;
45}
46
47[[nodiscard]] inline bool TryReadNode(const Node& node, ColliderShapeType& value, serialization::NodeReader& reader)
48{
49 std::string serialized;
50 if (!serialization::TryReadNode(node, serialized, reader))
51 {
52 return false;
53 }
54 if (serialized == "Sphere")
55 {
56 value = ColliderShapeType::Sphere;
57 }
58 else if (serialized == "Capsule")
59 {
60 value = ColliderShapeType::Capsule;
61 }
62 else
63 {
64 value = ColliderShapeType::Box;
65 }
66 return true;
67}
68
69inline Node& operator<<(Node& node, const RigidBodyMotionType& value)
70{
71 switch (value)
72 {
73 case RigidBodyMotionType::Static:
74 node << "Static";
75 break;
76 case RigidBodyMotionType::Kinematic:
77 node << "Kinematic";
78 break;
79 case RigidBodyMotionType::Dynamic:
80 node << "Dynamic";
81 break;
82 }
83 return node;
84}
85
86inline const Node& operator>>(const Node& node, RigidBodyMotionType& value)
87{
88 std::string serialized;
89 node >> serialized;
90 if (serialized == "Kinematic")
91 {
92 value = RigidBodyMotionType::Kinematic;
93 }
94 else if (serialized == "Dynamic")
95 {
96 value = RigidBodyMotionType::Dynamic;
97 }
98 else
99 {
100 value = RigidBodyMotionType::Static;
101 }
102 return node;
103}
104
105[[nodiscard]] inline bool TryReadNode(const Node& node, RigidBodyMotionType& value, serialization::NodeReader& reader)
106{
107 std::string serialized;
108 if (!serialization::TryReadNode(node, serialized, reader))
109 {
110 return false;
111 }
112 if (serialized == "Kinematic")
113 {
114 value = RigidBodyMotionType::Kinematic;
115 }
116 else if (serialized == "Dynamic")
117 {
118 value = RigidBodyMotionType::Dynamic;
119 }
120 else
121 {
122 value = RigidBodyMotionType::Static;
123 }
124 return true;
125}
126} // namespace pixelbullet
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:49
Definition node_reader.h:48