35 lines
737 B
C
35 lines
737 B
C
#ifndef FIGHT_DAMAGABLE_H
|
|
#define FIGHT_DAMAGABLE_H
|
|
|
|
#include "typeclass_helpers.h"
|
|
|
|
#include "vmath.h"
|
|
|
|
typedef struct DamageEventData {
|
|
int damageAmount;
|
|
int knockdown;
|
|
float stun;
|
|
float knockback;
|
|
Vector origin;
|
|
} DamageEventData;
|
|
|
|
typedef struct {
|
|
int (*const damage)(void*, DamageEventData*);
|
|
} IDamagable;
|
|
|
|
typedef struct {
|
|
void* data;
|
|
IDamagable const* tc;
|
|
} Damagable;
|
|
|
|
#define impl_Damagable_for(T, damage_f)\
|
|
Damagable T##_as_Damagable(T* x) {\
|
|
TC_FN_TYPECHECK(int, damage_f, T*, DamageEventData*);\
|
|
static const IDamagable tc = {\
|
|
.damage = (int(*const)(void*, DamageEventData*)) damage_f,\
|
|
};\
|
|
return (Damagable){.data = x, .tc = &tc};\
|
|
}
|
|
|
|
#endif // !FIGHT_DAMAGABLE_H
|