feat: enemy now looks at player when hit
This commit is contained in:
parent
c2229a5bba
commit
9fbbd833a5
|
@ -1,9 +1,11 @@
|
||||||
#include "Enemy.h"
|
#include "Enemy.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "Messages.h"
|
#include "Messages.h"
|
||||||
|
#include "DamageEvent.h"
|
||||||
#include "game_world.h"
|
#include "game_world.h"
|
||||||
#include "physics.h"
|
#include "physics.h"
|
||||||
#include "physics_world.h"
|
#include "physics_world.h"
|
||||||
|
#include "sprite.h"
|
||||||
|
|
||||||
Enemy* MakeEnemy() {
|
Enemy* MakeEnemy() {
|
||||||
Enemy* self = malloc(sizeof(Enemy));
|
Enemy* self = malloc(sizeof(Enemy));
|
||||||
|
@ -15,6 +17,7 @@ Enemy* MakeEnemy() {
|
||||||
.collider = NULL,
|
.collider = NULL,
|
||||||
.sprite = sprite_new_empty(),
|
.sprite = sprite_new_empty(),
|
||||||
.hurt = 0,
|
.hurt = 0,
|
||||||
|
.facing = 1,
|
||||||
.idleAnim = NULL,
|
.idleAnim = NULL,
|
||||||
.walkAnim = NULL,
|
.walkAnim = NULL,
|
||||||
.hurtAnim = NULL,
|
.hurtAnim = NULL,
|
||||||
|
@ -37,7 +40,7 @@ Enemy* MakeEnemy() {
|
||||||
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;
|
rigidbody_get_transform(self->rigidbody)->position = location;
|
||||||
game_world_add_entity(Enemy_as_BehaviourEntity(self));
|
game_world_add_entity(Enemy_as_BehaviourEntity(self));
|
||||||
physics_world_add_entity(Enemy_as_PhysicsEntity(self));
|
physics_world_add_entity(Enemy_as_PhysicsEntity(self));
|
||||||
return self;
|
return self;
|
||||||
|
@ -50,6 +53,7 @@ void EnemyUpdate(Enemy* self, float deltaTime) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnemyDraw(Enemy* self) {
|
void EnemyDraw(Enemy* self) {
|
||||||
|
sprite_flip_horizontal(self->sprite, self->facing == -1);
|
||||||
animation_sprite_draw(self->currentAnimation, &self->transform);
|
animation_sprite_draw(self->currentAnimation, &self->transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,10 +71,12 @@ void EnemyOnCollision(Enemy* self, Collision collision) {}
|
||||||
void EnemyOnOverlap(Enemy* self, Collider* other) {}
|
void EnemyOnOverlap(Enemy* self, Collider* other) {}
|
||||||
|
|
||||||
void* EnemyHandleMessage(Enemy* self, MessageID id, uintptr_t data) {
|
void* EnemyHandleMessage(Enemy* self, MessageID id, uintptr_t data) {
|
||||||
|
DamageEventData* damage = (DamageEventData*)data;
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case MESSAGE_DEAL_DAMAGE:
|
case MESSAGE_DEAL_DAMAGE:
|
||||||
self->health -= (int)data;
|
self->health -= damage->damageAmount;
|
||||||
self->hurt = 1;
|
self->hurt = 1;
|
||||||
|
self->facing = ((damage->origin.x - self->transform.position.x) > 0) * 2 - 1;
|
||||||
if(self->health <= 0)
|
if(self->health <= 0)
|
||||||
game_world_destroy_entity(Enemy_as_BehaviourEntity(self));
|
game_world_destroy_entity(Enemy_as_BehaviourEntity(self));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -22,6 +22,7 @@ typedef struct Enemy {
|
||||||
Sprite* sprite;
|
Sprite* sprite;
|
||||||
|
|
||||||
int hurt;
|
int hurt;
|
||||||
|
int facing;
|
||||||
|
|
||||||
AnimationSprite* idleAnim;
|
AnimationSprite* idleAnim;
|
||||||
AnimationSprite* walkAnim;
|
AnimationSprite* walkAnim;
|
||||||
|
|
Loading…
Reference in a new issue