fencer/game/src/Enemy.h

78 lines
1.6 KiB
C

#ifndef FIGHT_ENEMY_H
#define FIGHT_ENEMY_H
#include "transform.h"
#include "state_machine.h"
#include "rigidbody.h"
#include "physics_entity.h"
#include "behaviour_entity.h"
#include "collider.h"
#include "sprite.h"
#include "animation_sprite.h"
#include "EnemyStates.h"
typedef struct Enemy {
Transform transform;
StateMachine* behaviour;
RigidBody* rigidbody;
Collider* collider;
Sprite* sprite;
int hurt;
AnimationSprite* idleAnim;
AnimationSprite* walkAnim;
AnimationSprite* hurtAnim;
AnimationSprite* currentAnimation;
int health;
} Enemy;
extern Enemy* MakeEnemy();
extern Enemy* SpawnEnemy(Vector location, const State* entryState);
extern void EnemyStart(Enemy* self);
extern void EnemyUpdate(Enemy* self, float deltaTime);
extern void EnemyDestroy(Enemy* self);
extern void EnemyDraw(Enemy* self);
extern void EnemyOnCollision(Enemy* self, Collision collision);
extern void EnemyOnOverlap(Enemy* self, Collider* other);
extern void* EnemyHandleMessage(Enemy* self, MessageID id, uintptr_t data);
extern Transform* EnemyGetTransform(Enemy* self);
extern RigidBody* EnemyGetRigidBody(Enemy* self);
static long EnemyGetDepth(Enemy* self) { return (long)(-self->transform.position.y * 1000); }
impl_Transformable_for(Enemy,
EnemyGetTransform
)
impl_MessageReceiver_for(Enemy,
EnemyHandleMessage
)
impl_Drop_for(Enemy,
EnemyDestroy
)
impl_BehaviourEntity_for(Enemy,
EnemyStart,
EnemyUpdate,
EnemyDraw,
EnemyGetDepth
)
impl_PhysicsEntity_for(Enemy,
EnemyGetRigidBody,
EnemyOnCollision,
EnemyOnOverlap
)
#endif // !FIGHT_ENEMY_H