added sprite entity trait

This commit is contained in:
Sara 2023-10-08 23:07:04 +02:00
parent ac24521b34
commit 6df816e778
2 changed files with 37 additions and 0 deletions

8
src/sprite_entity.c Normal file
View file

@ -0,0 +1,8 @@
#include "sprite_entity.h"
#include "sprite.h"
void sprite_entity_draw(SpriteEntity self) {
Sprite* sprite = self.tc->get_sprite(self.data);
Transform* transform = self.transformable->get_transform(self.data);
sprite_draw(sprite, *transform);
}

29
src/sprite_entity.h Normal file
View file

@ -0,0 +1,29 @@
#ifndef _fencer_sprite_entity_h
#define _fencer_sprite_entity_h
#include "typeclass_helpers.h"
#include "sprite.h"
typedef struct {
Sprite* (*const get_sprite)(void*);
} ISpriteEntity;
typedef struct {
void* data;
ISpriteEntity const* tc;
ITransformable const* transformable;
} SpriteEntity;
extern void sprite_entity_draw(SpriteEntity self);
#define impl_SpriteEntity_for(T, get_sprite_f)\
static inline SpriteEntity T##_as_SpriteEntity(T* x) {\
TC_FN_TYPECHECK(Sprite*, get_sprite_f, T*);\
static ISpriteEntity const tc = {\
.get_sprite = (Sprite*(*const)(void*)) get_sprite_f,\
};\
Transformable t = T##_as_Transformable(x);\
return (SpriteEntity){.tc = &tc, .transformable = t.tc, .data = x};\
}
#endif // !_fencer_sprite_entity_h