78 lines
1.6 KiB
C
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
|