diff options
Diffstat (limited to 'source/game/interfaces/StarPhysicsEntity.cpp')
-rw-r--r-- | source/game/interfaces/StarPhysicsEntity.cpp | 85 |
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 {}; +} + +} |