#include "sprite.h" #include #include #include "raylib.h" #include "raymath.h" Sprite* sprite_from_texture(Texture2D tex, Vector2* anchor, Rectangle* source, Color* color, Arena* arena) { Sprite* sprite = arena_alloc(arena, sizeof(Sprite), sizeof(Sprite)); if (!sprite) abort(); sprite->tex = tex; sprite->source = source != NULL ? *source : (Rectangle){0, 0, sprite->tex.width, sprite->tex.height}; sprite->anchor = anchor != NULL ? *anchor : (Vector2){sprite->source.width / 2.0f, sprite->source.height / 2.0f}; sprite->color = color != NULL ? *color : (Color){26, 164, 98, 255}; sprite->animation = NULL; return sprite; } Sprite* sprite_new(const char* path, Vector2* anchor, Rectangle* source, Color* color, Arena* arena, TextureManager* tm) { assert(path && "path must not be empty"); Texture2D tex = tm_load_texture(tm, path); return sprite_from_texture(tex, anchor, source, color, arena); } void sprite_draw(Sprite* s, Vector2 pos) { Rectangle source = s->source; // update source rect if sprite has animation if (s->animation) { source.x = source.width * (float)s->animation->current_frame; } DrawTextureRec(s->tex, source, Vector2Subtract(pos, s->anchor), s->color); } // // Animation System // void animation_update(Animation* a, float dt) { a->current_time += dt; if (a->current_time >= 1.0f / a->fps) { a->current_time = 0; a->current_frame++; if (a->current_frame >= a->frame_count) { a->current_frame = 0; } } }