summary refs log tree commit diff stats
path: root/src/mirror_system.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mirror_system.cpp')
-rw-r--r--src/mirror_system.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mirror_system.cpp b/src/mirror_system.cpp new file mode 100644 index 0000000..b506e59 --- /dev/null +++ b/src/mirror_system.cpp
@@ -0,0 +1,29 @@
1#include "mirror_system.h"
2#include "game.h"
3#include "transform_system.h"
4#include "animation_system.h"
5#include "vector.h"
6#include "sprite.h"
7
8void MirrorSystem::tick(double dt) {
9 for (int spriteId : game_.getSprites()) {
10 Sprite& sprite = game_.getSprite(spriteId);
11 if (!sprite.paused) {
12 switch (sprite.mirrorType) {
13 case MirrorType::None: break;
14 case MirrorType::Vertical: {
15 Sprite& mirroredSprite = game_.getSprite(sprite.mirroredSpriteId);
16
17 vec2i mirroredLoc = mirroredSprite.loc;
18 mirroredLoc.y() = 2 * sprite.mirrorAxis - mirroredLoc.y();
19
20 game_.getSystem<TransformSystem>().moveSprite(spriteId, mirroredLoc);
21 game_.getSystem<AnimationSystem>().setSpriteAnimation(spriteId, mirroredSprite.animationName);
22 game_.getSystem<AnimationSystem>().setSpriteDirection(spriteId, directionMirroredVertically(mirroredSprite.dir));
23
24 break;
25 }
26 }
27 }
28 }
29}