#pragma once #include #include "entity.h" #ifdef __cplusplus extern "C" { #endif typedef struct GameManager GameManager; typedef struct { void (*alloc)(Level* level, GameManager* manager, void* context); void (*free)(Level* level, GameManager* manager, void* context); void (*start)(Level* level, GameManager* manager, void* context); void (*stop)(Level* level, GameManager* manager, void* context); size_t context_size; } LevelBehaviour; /** * @brief Remove all entities from the level * * @param level level instance */ void level_clear(Level* level); /** * @brief Add an entity to the level * * @param level level instance * @param behaviour entity behaviour * @return Entity* */ Entity* level_add_entity(Level* level, const EntityDescription* behaviour); /** * @brief Remove an entity from the level * * @param level level instance * @param entity entity to remove */ void level_remove_entity(Level* level, Entity* entity); /** * @brief Send an event to all entities of a certain type in the level * * @param level level instance * @param sender entity that sends the event * @param receiver_desc entity description that will receive the event, NULL for all entities * @param type event type * @param value event value */ void level_send_event( Level* level, Entity* sender, const EntityDescription* receiver_desc, uint32_t type, EntityEventValue value); #ifdef __cplusplus } #endif