feat: changed handle message signature to (T*, MessageID, uintptr_t)
This commit is contained in:
parent
af6c8d33ea
commit
29a40ce082
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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};\
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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); }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue