#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