added sprite entity trait
This commit is contained in:
parent
ac24521b34
commit
6df816e778
8
src/sprite_entity.c
Normal file
8
src/sprite_entity.c
Normal 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
29
src/sprite_entity.h
Normal 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
|
Loading…
Reference in a new issue