191 lines
4.0 KiB
C
191 lines
4.0 KiB
C
#ifndef PIXELDEFENSE_SYSTEMS_H
|
|
#define PIXELDEFENSE_SYSTEMS_H
|
|
|
|
#include <flecs.h>
|
|
|
|
#include "../components.h"
|
|
|
|
typedef struct Game Game;
|
|
|
|
/**********************************
|
|
* Utils
|
|
**********************************/
|
|
|
|
bool entitySetPath(const ecs_entity_t entity, const Vector2 target, Game *game);
|
|
|
|
/**********************************
|
|
* AI systems
|
|
**********************************/
|
|
|
|
/*
|
|
* 0: Game (singleton)
|
|
* 1: UnitAction
|
|
*/
|
|
void handleUnitActionsSystem(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton)
|
|
* 1: UnitAI
|
|
* 2: UnitAction
|
|
*/
|
|
void updateUnitAISystem(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton)
|
|
* 1: UnitAction
|
|
*/
|
|
void updateUnitActionsSystem(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Easing
|
|
* 2: Position
|
|
* 3: Size
|
|
* 4: Rotation
|
|
*/
|
|
void updateEasingSystem(ecs_iter_t *it);
|
|
|
|
/**********************************
|
|
* Animation Systems
|
|
**********************************/
|
|
|
|
|
|
/*
|
|
* 1: Animation
|
|
* 2: TextureRegion
|
|
*/
|
|
void updateAnimationState(ecs_iter_t *it);
|
|
/*
|
|
* 0:
|
|
* 1: Animation
|
|
* 2: TextureRegion
|
|
*/
|
|
void updateAnimation(ecs_iter_t *it);
|
|
|
|
/**********************************
|
|
* Entity Systems
|
|
**********************************/
|
|
|
|
/* Observer (for removing TargetPosition)
|
|
* 0: Game (singleton) for object pool
|
|
* 1: Path
|
|
*/
|
|
void entityPathRemove(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton) for entity map
|
|
* 1: Position
|
|
* 2: Size
|
|
* 3: Velocity (only entities with velocity change position)
|
|
* 4: SpatialGridID
|
|
*/
|
|
void entityUpdateSpatialID(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton) for collisions
|
|
* 1: Position
|
|
* 2: Rotation
|
|
* 3: Velocity
|
|
* 4: Steering
|
|
*/
|
|
void entityUpdateKinematic(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: Rotation
|
|
* 3: Velocity
|
|
* 4: TargetPosition
|
|
* 5: Steering
|
|
*/
|
|
void entityMoveToTarget(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton) for object pool
|
|
* 1: Path
|
|
*/
|
|
void entityFollowPath(ecs_iter_t *it);
|
|
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: Size
|
|
*/
|
|
void renderColliders(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: Rotation
|
|
*/
|
|
void renderRotationDirection(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Path
|
|
*/
|
|
void renderDebugPath(ecs_iter_t *it);
|
|
|
|
/**********************************
|
|
* Event Systems
|
|
**********************************/
|
|
|
|
i32 harvestEvent(ecs_entity_t entity, HarvestEvent event);
|
|
|
|
|
|
/**********************************
|
|
* Input systems
|
|
**********************************/
|
|
|
|
/*
|
|
* Task:
|
|
* 0: Game (singleton)
|
|
* 0: InputState (singleton)
|
|
*/
|
|
void updatePlayerInput();
|
|
|
|
/*
|
|
* Task (rendering above ground):
|
|
* 0: Game (singleton)
|
|
* 0: InputState (singleton)
|
|
*/
|
|
void drawPlayerInputUIGround();
|
|
|
|
/*
|
|
* Task (rendering on top):
|
|
* 0: Game (singleton)
|
|
* 0: InputState (singleton)
|
|
*/
|
|
void drawPlayerInputUI();
|
|
|
|
/**********************************
|
|
* UI systems
|
|
**********************************/
|
|
|
|
/**********************************
|
|
* MISC
|
|
**********************************/
|
|
|
|
static void setupSystems(ecs_world_t *ecs) {
|
|
|
|
ECS_OBSERVER(ecs, entityPathRemove, EcsOnRemove, Path);
|
|
|
|
ECS_SYSTEM(ecs, entityUpdateSpatialID, EcsOnUpdate, Position, Size, Velocity, SpatialGridID);
|
|
ECS_SYSTEM(ecs, entityUpdateKinematic, EcsOnUpdate, Position, Rotation, Velocity, Steering);
|
|
|
|
ECS_SYSTEM(ecs, entityMoveToTarget, EcsOnUpdate, Position, Rotation, Velocity, TargetPosition, Steering);
|
|
ECS_SYSTEM(ecs, entityFollowPath, EcsOnUpdate, Path);
|
|
|
|
ECS_SYSTEM(ecs, handleUnitActionsSystem, EcsOnUpdate, UnitAction);
|
|
ECS_SYSTEM(ecs, updateUnitAISystem, EcsOnUpdate, UnitAI, UnitAction);
|
|
// Needs to be called after AI update, since it removes finished actions
|
|
ECS_SYSTEM(ecs, updateUnitActionsSystem, EcsOnUpdate, UnitAction);
|
|
|
|
ECS_SYSTEM(ecs, updateAnimationState, EcsOnUpdate, Animation, TextureRegion);
|
|
ECS_SYSTEM(ecs, updateAnimation, EcsOnUpdate, Animation, TextureRegion);
|
|
ECS_SYSTEM(ecs, updateEasingSystem, EcsOnUpdate, Easing, Position, Size, Rotation);
|
|
|
|
ECS_SYSTEM(ecs, renderDebugPath, EcsOnUpdate, Path);
|
|
|
|
ECS_SYSTEM(ecs, renderColliders, EcsOnUpdate, Position, Size);
|
|
ECS_SYSTEM(ecs, renderRotationDirection, EcsOnUpdate, Position, Rotation);
|
|
}
|
|
|
|
#endif //PIXELDEFENSE_SYSTEMS_H
|