From c4ac81cffcf925963acb0c02584ab22626427a73 Mon Sep 17 00:00:00 2001 From: quou Date: Thu, 4 May 2023 10:15:19 +1000 Subject: Add an animation system. --- animation_system.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 animation_system.c (limited to 'animation_system.c') 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]; + } + } +} -- cgit v1.2.3-54-g00ecf