// Copyright (c) 2023 Alex Diener. All rights reserved. #ifndef __EntityComponent_collidable_H__ #define __EntityComponent_collidable_H__ typedef struct EntityComponent_collidable EntityComponent_collidable; #define EntityComponent_collidable_superclass GameEntityComponent #include "gamemath/Vector2i.h" #include "PROJECT_NAME/GameEntityComponent.h" typedef bool (* EntityComponent_collidable_collisionCallback)(struct GameEntity * collidingEntity, Vector2i fromDirection, void * context); #define EntityComponent_collidable_ivars \ GameEntityComponent_ivars \ \ EntityComponent_collidable_collisionCallback collisionCallback; \ void * callbackContext; #define EntityComponent_collidable_vtable(self_type) \ GameEntityComponent_vtable(self_type) \ \ bool (* collision)(self_type * self, struct GameEntity * collidingEntity, Vector2i fromDirection); stemobject_declare(EntityComponent_collidable) EntityComponent_collidable * EntityComponent_collidable_create(EntityComponent_collidable_collisionCallback collisionCallback, void * callbackContext); bool EntityComponent_collidable_init(EntityComponent_collidable * self, EntityComponent_collidable_collisionCallback collisionCallback, void * callbackContext); void EntityComponent_collidable_dispose(EntityComponent_collidable * self); void EntityComponent_collidable_initCopy(EntityComponent_collidable * self, compat_type(GameEntityComponent *) original); bool EntityComponent_collidable_collision(EntityComponent_collidable * self, struct GameEntity * collidingEntity, Vector2i fromDirection); bool alwaysSolidCollisionCallback(struct GameEntity * collidingEntity, Vector2i fromDirection, void * context); #endif