243 lines
4.7 KiB
C
243 lines
4.7 KiB
C
#ifndef PIXELDEFENSE_SYSTEMS_H
|
|
#define PIXELDEFENSE_SYSTEMS_H
|
|
|
|
#include <flecs.h>
|
|
|
|
#include "../components.h"
|
|
#include "../ai_actions.h"
|
|
|
|
typedef struct Game Game;
|
|
|
|
/**********************************
|
|
* Utils
|
|
**********************************/
|
|
|
|
bool entitySetPath(const ecs_entity_t entity, const Vector2 target, Game *game);
|
|
|
|
/**********************************
|
|
* AI systems
|
|
**********************************/
|
|
|
|
/*
|
|
* 1. Harvestable
|
|
*/
|
|
void resetHarvestCount(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton)
|
|
* 1: BzBTState
|
|
*/
|
|
void updateAISystem(ecs_iter_t *it);
|
|
|
|
void setAIBehaviour(ecs_entity_t entity, const BzBTNode *root,
|
|
const AIBlackboard *blackboard);
|
|
|
|
|
|
/**********************************
|
|
* Animation Systems
|
|
**********************************/
|
|
|
|
/*
|
|
* 1: ParticleEmitter
|
|
*/
|
|
void updateParticleEmitter(ecs_iter_t *it);
|
|
|
|
bool updateParticle(const Texture2D tex, Particle *particle, f32 dt);
|
|
|
|
Particle spawnParticle(const ParticleEmitter *emitter);
|
|
|
|
void animationSetState(Animation *anim, AnimType type, bool playInFull);
|
|
/*
|
|
* 1: Animation
|
|
* 2: TextureRegion
|
|
*/
|
|
void updateAnimationState(ecs_iter_t *it);
|
|
/*
|
|
* 0:
|
|
* 1: Animation
|
|
* 2: TextureRegion
|
|
*/
|
|
void updateAnimation(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Easing
|
|
*/
|
|
void updateEasingSystem(ecs_iter_t *it);
|
|
|
|
/**********************************
|
|
* Entity Systems
|
|
**********************************/
|
|
|
|
/* Observer (for removing TargetPosition)
|
|
* 0: Game (singleton) for object pool
|
|
* 1: Path
|
|
*/
|
|
void entityPathRemove(ecs_iter_t *it);
|
|
|
|
void updateTextureOwnerTile(ecs_iter_t *it);
|
|
|
|
/* Observer (for adding pop capacity)
|
|
* 0: Game (singleton)
|
|
* 1: AddPopCapacity
|
|
* 2: Owner
|
|
*/
|
|
void buildingAddPopCapacity(ecs_iter_t *it);
|
|
/* Observer (for removing pop capacity)
|
|
* 0: Game (singleton)
|
|
* 1: AddPopCapacity
|
|
* 2: Owner
|
|
*/
|
|
void buildingRemovePopCapacity(ecs_iter_t *it);
|
|
|
|
/* Observer (for consuming pop capacity)
|
|
* 0: Game (singleton)
|
|
* 1: ConsumePopCapacity
|
|
*/
|
|
void entityConsumePopCapacity(ecs_iter_t *it);
|
|
/* Observer (for unconsuming pop capacity)
|
|
* 0: Game (singleton)
|
|
* 1: ConsumePopCapacity
|
|
*/
|
|
void entityUnConsumePopCapacity(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton) for entity map
|
|
* 1: Position
|
|
* 2: HitBox
|
|
* 3: Velocity (only entities with velocity change position)
|
|
* 4: SpatialGridID
|
|
*/
|
|
void entityUpdateSpatialID(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: Velocity
|
|
* 3: Steering
|
|
* 4: Unit
|
|
*/
|
|
void entityUpdateKinematic(ecs_iter_t *it);
|
|
|
|
/*
|
|
* Big system for updating physics and attacking
|
|
* 0: Game (singleton) for collisions
|
|
* 1: Position
|
|
* 2: HitBox
|
|
* 3: Velocity
|
|
* 4: Unit
|
|
* 5: Owner
|
|
* 6: SpatialGridID
|
|
*/
|
|
void entityUpdate(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: Velocity
|
|
* 3: TargetPosition
|
|
* 4: Steering
|
|
*/
|
|
void entityMoveToTarget(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton) for object pool
|
|
* 1: Path
|
|
*/
|
|
void entityFollowPath(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 0: Game (singleton for spawning entities)
|
|
* 1: Owner
|
|
* 2: Building
|
|
* 3: BuildingRecruitInfo
|
|
*/
|
|
void updateBuildingRecruitment(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: HitBox
|
|
* 3: Health
|
|
*/
|
|
void renderHealthBar(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: HitBox
|
|
*/
|
|
void renderColliders(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Position
|
|
* 2: Orientation
|
|
*/
|
|
void renderOrientationDirection(ecs_iter_t *it);
|
|
|
|
/*
|
|
* 1: Path
|
|
*/
|
|
void renderDebugPath(ecs_iter_t *it);
|
|
|
|
|
|
|
|
/**********************************
|
|
* Event Systems
|
|
**********************************/
|
|
|
|
void damageEvent(ecs_entity_t entity, DamageEvent event);
|
|
|
|
i32 harvestEvent(ecs_entity_t entity, HarvestEvent event);
|
|
void depositEvent(ecs_entity_t entity, DepositEvent 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
|
|
**********************************/
|
|
|
|
void drawGameUI(Game *game, f32 dt);
|
|
void drawPauseUI(Game *game, f32 dt);
|
|
void drawMainMenuUI(Game *game, f32 dt);
|
|
void drawSettingsUI(Game *game, f32 dt);
|
|
|
|
/**********************************
|
|
* Utils
|
|
**********************************/
|
|
|
|
bool entityGetHitBox(ecs_entity_t entity, Position *outPos, Rectangle *outHitBox);
|
|
Rectangle entityTransformHitBox(Position position, HitBox hitBox);
|
|
Vector2 entityGetCenter(Position position, HitBox hitBox);
|
|
|
|
/**********************************
|
|
* MISC
|
|
**********************************/
|
|
|
|
extern ecs_entity_t renderCollidersSystem;
|
|
extern ecs_entity_t renderOrientDirSystem;
|
|
extern ecs_entity_t renderDebugPathSystem;
|
|
|
|
void setupSystems();
|
|
|
|
#endif //PIXELDEFENSE_SYSTEMS_H
|