feat: enemy now initializes 2 animations, and declares 3
This commit is contained in:
parent
1fbb3b1530
commit
879d72e10f
|
@ -1,6 +1,9 @@
|
||||||
#include "Enemy.h"
|
#include "Enemy.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "Messages.h"
|
#include "Messages.h"
|
||||||
|
#include "game_world.h"
|
||||||
|
#include "physics.h"
|
||||||
|
#include "physics_world.h"
|
||||||
|
|
||||||
Enemy* MakeEnemy() {
|
Enemy* MakeEnemy() {
|
||||||
Enemy* self = malloc(sizeof(Enemy));
|
Enemy* self = malloc(sizeof(Enemy));
|
||||||
|
@ -11,15 +14,31 @@ Enemy* MakeEnemy() {
|
||||||
.rigidbody = NULL,
|
.rigidbody = NULL,
|
||||||
.collider = NULL,
|
.collider = NULL,
|
||||||
.sprite = sprite_new_empty(),
|
.sprite = sprite_new_empty(),
|
||||||
|
.hurt = 0,
|
||||||
|
.idle = NULL,
|
||||||
|
.walk = NULL,
|
||||||
|
.hurt_anim = NULL,
|
||||||
|
.currentAnimation = NULL,
|
||||||
.health = 5,
|
.health = 5,
|
||||||
};
|
};
|
||||||
|
|
||||||
self->rigidbody = rigidbody_make(Enemy_as_PhysicsEntity(self));
|
self->rigidbody = rigidbody_make(Enemy_as_PhysicsEntity(self));
|
||||||
|
self->collider = collider_new(Enemy_as_PhysicsEntity(self), shape_new_square(MakeVector(0.2f, 0.05f)), 0, PHYSICS_LAYER_DEFAULT);
|
||||||
|
|
||||||
|
sprite_set_origin(self->sprite, MakeVector(0.45f, 0.925f));
|
||||||
|
|
||||||
|
self->idle = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Idle.png", IVectorFrom(512)), 1.5f, LoopMode_Loop);
|
||||||
|
self->walk = animation_sprite_new(self->sprite, spritesheet_load("assets/Player_Walk.png", IVectorFrom(512)), 1.5f, LoopMode_Loop);
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
Enemy* SpawnEnemy(Vector location, const State* entryState) {
|
Enemy* SpawnEnemy(Vector location, const State* entryState) {
|
||||||
Enemy* self = MakeEnemy();
|
Enemy* self = MakeEnemy();
|
||||||
self->behaviour = state_machine_init(self, entryState);
|
self->behaviour = state_machine_init(self, entryState);
|
||||||
|
self->transform.position = location;
|
||||||
|
game_world_add_entity(Enemy_as_BehaviourEntity(self));
|
||||||
|
physics_world_add_entity(Enemy_as_PhysicsEntity(self));
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,9 +46,14 @@ void EnemyStart(Enemy* self) {}
|
||||||
|
|
||||||
void EnemyUpdate(Enemy* self, float deltaTime) {
|
void EnemyUpdate(Enemy* self, float deltaTime) {
|
||||||
state_machine_update(self->behaviour, deltaTime);
|
state_machine_update(self->behaviour, deltaTime);
|
||||||
|
if(self->health <= 0)
|
||||||
|
game_world_destroy_entity(Enemy_as_BehaviourEntity(self));
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnemyDraw(Enemy* self) {}
|
void EnemyDraw(Enemy* self) {
|
||||||
|
animation_sprite_draw(self->currentAnimation, &self->transform);
|
||||||
|
shape_draw(collider_get_shape(self->collider), self->transform);
|
||||||
|
}
|
||||||
|
|
||||||
void EnemyDestroy(Enemy* self) {
|
void EnemyDestroy(Enemy* self) {
|
||||||
state_machine_destroy(self->behaviour);
|
state_machine_destroy(self->behaviour);
|
||||||
|
@ -42,13 +66,17 @@ void EnemyDestroy(Enemy* self) {
|
||||||
void EnemyOnCollision(Enemy* self, Collision collision) {}
|
void EnemyOnCollision(Enemy* self, Collision collision) {}
|
||||||
void EnemyOnOverlap(Enemy* self, Collider* other) {}
|
void EnemyOnOverlap(Enemy* self, Collider* other) {}
|
||||||
|
|
||||||
void EnemyHandleMessage(Enemy* self, MessageID id, void* data) {
|
void* EnemyHandleMessage(Enemy* self, MessageID id, void* data) {
|
||||||
switch(id) {
|
switch(id) {
|
||||||
default: return;
|
|
||||||
case MESSAGE_DEAL_DAMAGE:
|
case MESSAGE_DEAL_DAMAGE:
|
||||||
self->health -= (uintptr_t)data;
|
self->health -= (uintptr_t)data;
|
||||||
|
self->hurt = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Transform* EnemyGetTransform(Enemy* self) {
|
Transform* EnemyGetTransform(Enemy* self) {
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
#include "behaviour_entity.h"
|
#include "behaviour_entity.h"
|
||||||
#include "collider.h"
|
#include "collider.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
|
#include "animation_sprite.h"
|
||||||
|
#include "EnemyStates.h"
|
||||||
|
|
||||||
typedef struct Enemy {
|
typedef struct Enemy {
|
||||||
Transform transform;
|
Transform transform;
|
||||||
|
@ -19,11 +21,17 @@ typedef struct Enemy {
|
||||||
|
|
||||||
Sprite* sprite;
|
Sprite* sprite;
|
||||||
|
|
||||||
|
int hurt;
|
||||||
|
|
||||||
|
AnimationSprite* idle;
|
||||||
|
AnimationSprite* walk;
|
||||||
|
AnimationSprite* hurt_anim;
|
||||||
|
|
||||||
|
AnimationSprite* currentAnimation;
|
||||||
|
|
||||||
int health;
|
int health;
|
||||||
} Enemy;
|
} Enemy;
|
||||||
|
|
||||||
const MessageID ENEMY_DAMAGE_MESSAGE = 0x1;
|
|
||||||
|
|
||||||
extern Enemy* MakeEnemy();
|
extern Enemy* MakeEnemy();
|
||||||
extern Enemy* SpawnEnemy(Vector location, const State* entryState);
|
extern Enemy* SpawnEnemy(Vector location, const State* entryState);
|
||||||
|
|
||||||
|
@ -35,11 +43,11 @@ extern void EnemyDraw(Enemy* self);
|
||||||
|
|
||||||
extern void EnemyOnCollision(Enemy* self, Collision collision);
|
extern void EnemyOnCollision(Enemy* self, Collision collision);
|
||||||
extern void EnemyOnOverlap(Enemy* self, Collider* other);
|
extern void EnemyOnOverlap(Enemy* self, Collider* other);
|
||||||
extern void EnemyHandleMessage(Enemy* self, MessageID id, void* data);
|
extern void* EnemyHandleMessage(Enemy* self, MessageID id, void* data);
|
||||||
|
|
||||||
extern Transform* EnemyGetTransform(Enemy* self);
|
extern Transform* EnemyGetTransform(Enemy* self);
|
||||||
extern RigidBody* EnemyGetRigidBody(Enemy* self);
|
extern RigidBody* EnemyGetRigidBody(Enemy* self);
|
||||||
static int EnemyGetDepth(Enemy* self) { return (int)(-self->transform.position.y * 1000); }
|
static long EnemyGetDepth(Enemy* self) { return (long)(-self->transform.position.y * 1000); }
|
||||||
|
|
||||||
impl_Transformable_for(Enemy,
|
impl_Transformable_for(Enemy,
|
||||||
EnemyGetTransform
|
EnemyGetTransform
|
||||||
|
|
Loading…
Reference in a new issue