feat: changed handle message signature to (T*, MessageID, uintptr_t)

This commit is contained in:
Sara 2023-11-29 14:18:51 +01:00
parent af6c8d33ea
commit 29a40ce082
7 changed files with 15 additions and 13 deletions

View file

@ -1,7 +1,7 @@
#include "message_receiver.h" #include "message_receiver.h"
#include "stddef.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; return NULL;
} }

View file

@ -7,7 +7,7 @@
typedef uint32_t MessageID; typedef uint32_t MessageID;
typedef struct IMessageReceiver { typedef struct IMessageReceiver {
void* (*const handle_message)(void*, MessageID, void*); void* (*const handle_message)(void*, MessageID, uintptr_t);
} IMessageReceiver; } IMessageReceiver;
typedef struct MessageReceiver { typedef struct MessageReceiver {
@ -15,7 +15,7 @@ typedef struct MessageReceiver {
IMessageReceiver const* tc; IMessageReceiver const* tc;
} MessageReceiver; } 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); 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)\ #define impl_MessageReceiver_for(T, handle_message_f)\
static inline MessageReceiver T##_as_MessageReceiver(T* x) {\ 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 = {\ 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};\ return (MessageReceiver){.data = x, .tc = &tc};\
} }

View file

@ -66,11 +66,13 @@ 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, uintptr_t data) {
switch(id) { switch(id) {
case MESSAGE_DEAL_DAMAGE: case MESSAGE_DEAL_DAMAGE:
self->health -= (uintptr_t)data; self->health -= (int)data;
self->hurt = 1; self->hurt = 1;
if(self->health <= 0)
game_world_destroy_entity(Enemy_as_BehaviourEntity(self));
break; break;
default: default:
break; break;

View file

@ -43,7 +43,7 @@ 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, uintptr_t data);
extern Transform* EnemyGetTransform(Enemy* self); extern Transform* EnemyGetTransform(Enemy* self);
extern RigidBody* EnemyGetRigidBody(Enemy* self); extern RigidBody* EnemyGetRigidBody(Enemy* self);

View file

@ -57,7 +57,7 @@ void PlayerAttackTrigger(Player* self) {
MakeVector(0.1f, 0.06f), PHYSICS_LAYER_COMBAT, self->rigidbody); MakeVector(0.1f, 0.06f), PHYSICS_LAYER_COMBAT, self->rigidbody);
if(found != NULL) { if(found != NULL) {
PhysicsEntity entity = collider_get_owner(found); 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; ++self->animationTriggers;
} }

View file

@ -61,10 +61,10 @@ RigidBody* PropGetRigidBody(Prop* self) {
return self->rigidbody; return self->rigidbody;
} }
void* PropReceiveMessage(Prop* self, MessageID message, void* data) { void* PropReceiveMessage(Prop* self, MessageID message, uintptr_t data) {
if(message == 1) { if(message == 1) {
int damage = *(int*)data; unsigned damage = (int)data;
game_world_destroy_entity(Prop_as_BehaviourEntity(self)); LOG_INFO("Punching bag took %u damage", damage);
} }
return 0; return 0;
} }

View file

@ -31,7 +31,7 @@ void PropOnOverlap(Prop* self, Collider* other);
Transform* PropGetTransform(Prop* self); Transform* PropGetTransform(Prop* self);
RigidBody* PropGetRigidBody(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); } static long PropGetDepth(Prop* self) { return -(int)(self->transform.position.y * 1000); }