Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/interfaces/StarPhysicsEntity.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/interfaces/StarPhysicsEntity.cpp')
-rw-r--r--source/game/interfaces/StarPhysicsEntity.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/source/game/interfaces/StarPhysicsEntity.cpp b/source/game/interfaces/StarPhysicsEntity.cpp
new file mode 100644
index 0000000..1eda4bf
--- /dev/null
+++ b/source/game/interfaces/StarPhysicsEntity.cpp
@@ -0,0 +1,85 @@
+#include "StarPhysicsEntity.hpp"
+#include "StarJsonExtra.hpp"
+#include "StarDataStreamExtra.hpp"
+
+namespace Star {
+
+PhysicsMovingCollision PhysicsMovingCollision::fromJson(Json const& json) {
+ PhysicsMovingCollision pmc;
+ pmc.position = json.opt("position").apply(jsonToVec2F).value();
+ pmc.collision = jsonToPolyF(json.get("collision"));
+ pmc.collisionKind = CollisionKindNames.getLeft(json.getString("collisionKind", "block"));
+ pmc.categoryFilter = jsonToPhysicsCategoryFilter(json);
+ return pmc;
+}
+
+RectF PhysicsMovingCollision::boundBox() const {
+ return collision.boundBox().translated(position);
+}
+
+void PhysicsMovingCollision::translate(Vec2F const& pos) {
+ position += pos;
+}
+
+bool PhysicsMovingCollision::operator==(PhysicsMovingCollision const& rhs) const {
+ return tie(position, collision, collisionKind, categoryFilter) == tie(rhs.position, rhs.collision, rhs.collisionKind, rhs.categoryFilter);
+}
+
+DataStream& operator>>(DataStream& ds, PhysicsMovingCollision& pmc) {
+ ds >> pmc.position;
+ ds >> pmc.collision;
+ ds >> pmc.collisionKind;
+ ds >> pmc.categoryFilter;
+ return ds;
+}
+
+DataStream& operator<<(DataStream& ds, PhysicsMovingCollision const& pmc) {
+ ds << pmc.position;
+ ds << pmc.collision;
+ ds << pmc.collisionKind;
+ ds << pmc.categoryFilter;
+ return ds;
+}
+
+MovingCollisionId::MovingCollisionId() : physicsEntityId(NullEntityId), collisionIndex(0) {}
+
+MovingCollisionId::MovingCollisionId(EntityId physicsEntityId, size_t collisionIndex)
+ : physicsEntityId(physicsEntityId), collisionIndex(collisionIndex) {}
+
+bool MovingCollisionId::operator==(MovingCollisionId const& rhs) {
+ return tie(physicsEntityId, collisionIndex) == tie(rhs.physicsEntityId, rhs.collisionIndex);
+}
+
+bool MovingCollisionId::valid() const {
+ return physicsEntityId != NullEntityId;
+}
+
+MovingCollisionId::operator bool() const {
+ return valid();
+}
+
+DataStream& operator>>(DataStream& ds, MovingCollisionId& mci) {
+ ds.read(mci.physicsEntityId);
+ ds.readVlqS(mci.collisionIndex);
+ return ds;
+}
+
+DataStream& operator<<(DataStream& ds, MovingCollisionId const& mci) {
+ ds.write(mci.physicsEntityId);
+ ds.writeVlqS(mci.collisionIndex);
+ return ds;
+}
+
+List<PhysicsForceRegion> PhysicsEntity::forceRegions() const {
+ return {};
+}
+
+size_t PhysicsEntity::movingCollisionCount() const {
+ return 0;
+}
+
+Maybe<PhysicsMovingCollision> PhysicsEntity::movingCollision(size_t) const {
+ return {};
+}
+
+}