From 29a40ce082104bbdb14e0293c589cdab77ded63a Mon Sep 17 00:00:00 2001 From: Sara Date: Wed, 29 Nov 2023 14:18:51 +0100 Subject: [PATCH] feat: changed handle message signature to (T*, MessageID, uintptr_t) --- core/src/message_receiver.c | 2 +- core/src/message_receiver.h | 8 ++++---- game/src/Enemy.c | 6 ++++-- game/src/Enemy.h | 2 +- game/src/PlayerStates.c | 2 +- game/src/Prop.c | 6 +++--- game/src/Prop.h | 2 +- 7 files changed, 15 insertions(+), 13 deletions(-) diff --git a/core/src/message_receiver.c b/core/src/message_receiver.c index ea56b3a..b0dec28 100644 --- a/core/src/message_receiver.c +++ b/core/src/message_receiver.c @@ -1,7 +1,7 @@ #include "message_receiver.h" #include "stddef.h" -void* message_receiver_refuse(void* self, MessageID id, void* data) { +void* message_receiver_refuse(void* self, MessageID id, uintptr_t data) { return NULL; } diff --git a/core/src/message_receiver.h b/core/src/message_receiver.h index a460801..f4a3043 100644 --- a/core/src/message_receiver.h +++ b/core/src/message_receiver.h @@ -7,7 +7,7 @@ typedef uint32_t MessageID; typedef struct IMessageReceiver { - void* (*const handle_message)(void*, MessageID, void*); + void* (*const handle_message)(void*, MessageID, uintptr_t); } IMessageReceiver; typedef struct MessageReceiver { @@ -15,7 +15,7 @@ typedef struct MessageReceiver { IMessageReceiver const* tc; } MessageReceiver; -extern void* message_receiver_refuse(void* self, MessageID id, void* data); +extern void* message_receiver_refuse(void* self, MessageID id, uintptr_t); extern MessageReceiver message_receiver_no_implementation(void* x); @@ -26,9 +26,9 @@ static inline MessageReceiver T##_as_MessageReceiver(T* x) {\ #define impl_MessageReceiver_for(T, handle_message_f)\ static inline MessageReceiver T##_as_MessageReceiver(T* x) {\ - TC_FN_TYPECHECK(void*, handle_message_f, T*, MessageID, void*);\ + TC_FN_TYPECHECK(void*, handle_message_f, T*, MessageID, uintptr_t);\ static IMessageReceiver const tc = {\ - .handle_message = (void*(*const)(void*,MessageID,void*)) handle_message_f,\ + .handle_message = (void*(*const)(void*,MessageID,uintptr_t)) handle_message_f,\ };\ return (MessageReceiver){.data = x, .tc = &tc};\ } diff --git a/game/src/Enemy.c b/game/src/Enemy.c index faea59d..34f4246 100644 --- a/game/src/Enemy.c +++ b/game/src/Enemy.c @@ -66,11 +66,13 @@ void EnemyDestroy(Enemy* self) { void EnemyOnCollision(Enemy* self, Collision collision) {} void EnemyOnOverlap(Enemy* self, Collider* other) {} -void* EnemyHandleMessage(Enemy* self, MessageID id, void* data) { +void* EnemyHandleMessage(Enemy* self, MessageID id, uintptr_t data) { switch(id) { case MESSAGE_DEAL_DAMAGE: - self->health -= (uintptr_t)data; + self->health -= (int)data; self->hurt = 1; + if(self->health <= 0) + game_world_destroy_entity(Enemy_as_BehaviourEntity(self)); break; default: break; diff --git a/game/src/Enemy.h b/game/src/Enemy.h index 21b56ed..a9d0b7d 100644 --- a/game/src/Enemy.h +++ b/game/src/Enemy.h @@ -43,7 +43,7 @@ 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, void* data); +extern void* EnemyHandleMessage(Enemy* self, MessageID id, uintptr_t data); extern Transform* EnemyGetTransform(Enemy* self); extern RigidBody* EnemyGetRigidBody(Enemy* self); diff --git a/game/src/PlayerStates.c b/game/src/PlayerStates.c index 7720551..828eed6 100644 --- a/game/src/PlayerStates.c +++ b/game/src/PlayerStates.c @@ -57,7 +57,7 @@ void PlayerAttackTrigger(Player* self) { MakeVector(0.1f, 0.06f), PHYSICS_LAYER_COMBAT, self->rigidbody); if(found != NULL) { PhysicsEntity entity = collider_get_owner(found); - entity.message_receiver->handle_message(entity.data, 1, (void*)1u); + entity.message_receiver->handle_message(entity.data, 1, 1u); } ++self->animationTriggers; } diff --git a/game/src/Prop.c b/game/src/Prop.c index 39c760e..4ea7b37 100644 --- a/game/src/Prop.c +++ b/game/src/Prop.c @@ -61,10 +61,10 @@ RigidBody* PropGetRigidBody(Prop* self) { return self->rigidbody; } -void* PropReceiveMessage(Prop* self, MessageID message, void* data) { +void* PropReceiveMessage(Prop* self, MessageID message, uintptr_t data) { if(message == 1) { - int damage = *(int*)data; - game_world_destroy_entity(Prop_as_BehaviourEntity(self)); + unsigned damage = (int)data; + LOG_INFO("Punching bag took %u damage", damage); } return 0; } diff --git a/game/src/Prop.h b/game/src/Prop.h index f46d77b..73bcddc 100644 --- a/game/src/Prop.h +++ b/game/src/Prop.h @@ -31,7 +31,7 @@ void PropOnOverlap(Prop* self, Collider* other); Transform* PropGetTransform(Prop* self); RigidBody* PropGetRigidBody(Prop* self); -void* PropReceiveMessage(Prop* self, MessageID message, void* data); +void* PropReceiveMessage(Prop* self, MessageID message, uintptr_t data); static long PropGetDepth(Prop* self) { return -(int)(self->transform.position.y * 1000); }