aboutsummaryrefslogtreecommitdiff
path: root/animation_system.c
diff options
context:
space:
mode:
Diffstat (limited to 'animation_system.c')
-rw-r--r--animation_system.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/animation_system.c b/animation_system.c
new file mode 100644
index 0000000..22317ac
--- /dev/null
+++ b/animation_system.c
@@ -0,0 +1,33 @@
+#include "animation.h"
+#include "components.h"
+#include "world.h"
+
+void animation_system(World* world) {
+ int i;
+ unsigned bits;
+ CSprite* sprite;
+ CAnimated* animated;
+ const Animation* animation;
+
+ for (i = 0; i < world->entity_count; i++) {
+ bits = world->bitmask[i];
+ if ((bits & ctype_sprite) && (bits & ctype_animated)) {
+ sprite = &world->sprites[i];
+ animated = &world->animateds[i];
+ animation = get_animation(animated->id);
+
+ animated->timer++;
+ if (animated->timer > animation->slowness) {
+ animated->frame++;
+ animated->timer = 0;
+ }
+
+ if (animated->frame >= animation->frame_count) {
+ animated->frame = 0;
+ animated->timer = 0;
+ }
+
+ sprite->rect = animation->frames[animated->frame];
+ }
+ }
+}