195 lines
4.3 KiB
C
195 lines
4.3 KiB
C
#ifndef PIXELDEFENSE_COMPONENTS_H
|
|
#define PIXELDEFENSE_COMPONENTS_H
|
|
|
|
#include <breeze.h>
|
|
#include <flecs.h>
|
|
|
|
#include "game_tileset.h"
|
|
|
|
typedef enum ResourceType {
|
|
RES_IRON,
|
|
RES_WOOD,
|
|
RES_GOLD,
|
|
RES_FOOD,
|
|
RES_COUNT,
|
|
} ResourceType;
|
|
|
|
static const char *getResourceTypePrettyName(ResourceType type) {
|
|
switch (type) {
|
|
case RES_IRON: return "Iron";
|
|
case RES_WOOD: return "Wood";
|
|
case RES_GOLD: return "Gold";
|
|
case RES_FOOD: return "Food";
|
|
default: return "Invalid";
|
|
}
|
|
}
|
|
|
|
typedef struct Resource {
|
|
ResourceType type;
|
|
i32 amount;
|
|
} Resource;
|
|
extern ECS_COMPONENT_DECLARE(Resource);
|
|
|
|
typedef struct TilePosition {
|
|
BzTile x;
|
|
BzTile y;
|
|
} TilePosition;
|
|
extern ECS_COMPONENT_DECLARE(TilePosition);
|
|
|
|
typedef struct TileSize {
|
|
BzTile sizeX;
|
|
BzTile sizeY;
|
|
} TileSize;
|
|
extern ECS_COMPONENT_DECLARE(TileSize);
|
|
|
|
typedef struct Owner {
|
|
BuildingType playerID;
|
|
} Owner;
|
|
extern ECS_COMPONENT_DECLARE(Owner);
|
|
|
|
|
|
|
|
/**********************************************************
|
|
* Movement components
|
|
*********************************************************/
|
|
|
|
typedef BzSpatialGridID SpatialGridID;
|
|
extern ECS_COMPONENT_DECLARE(SpatialGridID);
|
|
|
|
typedef Vector2 Position, Size, Velocity, TargetPosition, Steering;
|
|
typedef f32 Rotation;
|
|
|
|
extern ECS_COMPONENT_DECLARE(Position);
|
|
extern ECS_COMPONENT_DECLARE(Size);
|
|
extern ECS_COMPONENT_DECLARE(Velocity);
|
|
extern ECS_COMPONENT_DECLARE(Rotation);
|
|
extern ECS_COMPONENT_DECLARE(Steering);
|
|
extern ECS_COMPONENT_DECLARE(TargetPosition);
|
|
|
|
#define PATH_DATA_SIZE 8
|
|
typedef struct PathData {
|
|
Position waypoints[PATH_DATA_SIZE];
|
|
size_t numWaypoints;
|
|
struct PathData *next;
|
|
} PathData;
|
|
|
|
typedef struct Path {
|
|
PathData *paths;
|
|
i32 curWaypoint;
|
|
} Path;
|
|
extern ECS_COMPONENT_DECLARE(Path);
|
|
|
|
/**********************************************************
|
|
* Render components
|
|
*********************************************************/
|
|
|
|
typedef struct TextureRegion {
|
|
Texture2D texture;
|
|
Rectangle rec;
|
|
bool flipX : 1;
|
|
bool flipY : 1;
|
|
} TextureRegion;
|
|
extern ECS_COMPONENT_DECLARE(TextureRegion);
|
|
|
|
/**********************************************************
|
|
* Animation components
|
|
*********************************************************/
|
|
|
|
typedef struct Animation {
|
|
EntityType entityType;
|
|
AnimType animType;
|
|
|
|
AnimationFrame frame;
|
|
AnimationSequence sequence;
|
|
BzTileset *tileset;
|
|
|
|
i32 curFrame;
|
|
f32 elapsed;
|
|
} Animation;
|
|
extern ECS_COMPONENT_DECLARE(Animation);
|
|
|
|
typedef enum EasingType {
|
|
EASE_ROTATION,
|
|
EASE_POS_X,
|
|
EASE_POS_Y,
|
|
EASE_SIZE_X,
|
|
EASE_SIZE_Y,
|
|
} EasingType;
|
|
|
|
typedef struct Easing {
|
|
EasingType type;
|
|
BzEaseType easingFunc;
|
|
|
|
// start + target * (easeStart + (easeTarget * x) + easeOffset) + offset
|
|
|
|
f32 target;
|
|
f32 start;
|
|
f32 offset;
|
|
f32 easeTarget;
|
|
f32 easeStart;
|
|
f32 easeOffset;
|
|
|
|
f32 x;
|
|
f32 elapsed;
|
|
f32 duration;
|
|
|
|
//struct Easing *next;
|
|
} Easing;
|
|
extern ECS_COMPONENT_DECLARE(Easing);
|
|
|
|
typedef struct EntityArms {
|
|
ecs_entity_t left;
|
|
ecs_entity_t right;
|
|
} EntityArms;
|
|
//extern ECS_COMPONENT_DECLARE(EntityArms);
|
|
|
|
/**********************************************************
|
|
* Event components
|
|
*********************************************************/
|
|
typedef struct HarvestEvent {
|
|
i32 amount;
|
|
} HarvestEvent;
|
|
typedef struct DepositEvent {
|
|
i32 amount;
|
|
} DepositEvent;
|
|
|
|
/**********************************************************
|
|
* Gameplay components
|
|
*********************************************************/
|
|
|
|
extern ECS_COMPONENT_DECLARE(UnitAction);
|
|
extern ECS_COMPONENT_DECLARE(UnitAI);
|
|
|
|
extern ECS_TAG_DECLARE(Selectable);
|
|
extern ECS_TAG_DECLARE(Selected);
|
|
|
|
// Worker can:
|
|
// - Harvest
|
|
// - Build
|
|
// - Work
|
|
// - Attack (since it is also a unit)
|
|
typedef struct Worker {
|
|
// stats
|
|
f32 collectSpeed;
|
|
f32 depositSpeed;
|
|
|
|
i32 carry;
|
|
i32 carryCapacity;
|
|
ResourceType carryRes;
|
|
} Worker;
|
|
extern ECS_COMPONENT_DECLARE(Worker);
|
|
|
|
// Unit can:
|
|
// - Attack
|
|
extern ECS_TAG_DECLARE(Unit);
|
|
extern ECS_TAG_DECLARE(Storage);
|
|
extern ECS_TAG_DECLARE(Harvestable);
|
|
extern ECS_TAG_DECLARE(Buildable);
|
|
extern ECS_TAG_DECLARE(Workable);
|
|
extern ECS_TAG_DECLARE(Attackable);
|
|
|
|
void initComponentIDs(ecs_world_t *ecs);
|
|
|
|
|
|
#endif //PIXELDEFENSE_COMPONENTS_H
|