// Copyright (c) 2023 Alex Diener. All rights reserved. #include "PROJECT_NAME/EntityComponent_collidable.h" #include "PROJECT_NAME/GameEntity.h" #define stemobject_implementation EntityComponent_collidable stemobject_vtable_begin(); stemobject_vtable_entry(dispose); stemobject_vtable_entry(initCopy); stemobject_vtable_entry(collision); stemobject_vtable_end(); EntityComponent_collidable * EntityComponent_collidable_create(EntityComponent_collidable_collisionCallback collisionCallback, void * callbackContext) { stemobject_create_implementation(init, collisionCallback, callbackContext) } bool EntityComponent_collidable_init(EntityComponent_collidable * self, EntityComponent_collidable_collisionCallback collisionCallback, void * callbackContext) { call_super(init, self); self->collisionCallback = collisionCallback; self->callbackContext = callbackContext; return true; } void EntityComponent_collidable_dispose(EntityComponent_collidable * self) { call_super_virtual(dispose, self); } void EntityComponent_collidable_initCopy(EntityComponent_collidable * self, compat_type(GameEntityComponent *) originalUntyped) { call_super_virtual(initCopy, self, originalUntyped); EntityComponent_collidable * original = originalUntyped; self->collisionCallback = original->collisionCallback; self->callbackContext = original->callbackContext; } bool EntityComponent_collidable_collision(EntityComponent_collidable * self, struct GameEntity * collidingEntity, Vector2i fromDirection) { return self->collisionCallback(collidingEntity, fromDirection, self->callbackContext); } bool alwaysSolidCollisionCallback(struct GameEntity * collidingEntity, Vector2i fromDirection, void * context) { return true; }