#pragma once

#include "../../../COMMON.h"

/* 
 * Components are roughly organized in a specific manner: 
 * - On deletion events
 * - Animations
 * - Collisions
 * - "Entity" components (components that bundle a lot of other components together)
 * - Behaviors
 * - Actions
 * - Control
 * - Statistical information
 * - Deletion events
*/

#define ECS_COMPONENT_COUNT ECS_COMPONENT_ACTION_ON_OUT_OF_BOUNDS_DELETE + 1
typedef enum ECSComponentType
{
	ECS_COMPONENT_ACTION_ON_DELETE_GIVE_AMMO,
	ECS_COMPONENT_ACTION_ON_DELETE_DROP_GOODIES,
	ECS_COMPONENT_ACTION_SPAWN,
	ECS_COMPONENT_ACTION_ON_HEIGHT_DAMAGE_DISABLE,
	ECS_COMPONENT_ANIMATION_COLOR_CHANGE,
	ECS_COMPONENT_ANIMATION_LEVITATE,
	ECS_COMPONENT_ANIMATION_MOVE,
	ECS_COMPONENT_ANIMATION_CURSOR,
	ECS_COMPONENT_ANIMATION_STRETCH,
	ECS_COMPONENT_ANIMATION_SQUASH,
	ECS_COMPONENT_PHYSICS,
	ECS_COMPONENT_CIRCLE_COLLISION,
	ECS_COMPONENT_ACTION_KEEP_IN_RECTANGLE,
	ECS_COMPONENT_SPRITE,
	ECS_COMPONENT_TEXT,
	ECS_COMPONENT_GAME_OBJECT,
	ECS_COMPONENT_CHARACTER,
	ECS_COMPONENT_ENEMY,
	ECS_COMPONENT_PICKUP,
	ECS_COMPONENT_BEHAVIOR_ACT_IN_RECTANGLE,
	ECS_COMPONENT_BEHAVIOR_HOP,
	ECS_COMPONENT_BEHAVIOR_BOOMERANG,
	ECS_COMPONENT_BEHAVIOR_CHASE,
	ECS_COMPONENT_BEHAVIOR_APPROACH_AND_SHOOT,
	ECS_COMPONENT_ACTION_ON_COMBAT_HIDE,
	ECS_COMPONENT_ACTION_SHOOT,
	ECS_COMPONENT_ACTION_LOCK,
	ECS_COMPONENT_ACTION_FOLLOW,
	ECS_COMPONENT_ACTION_POINT_TO_MOUSE,
	ECS_COMPONENT_ACTION_RETURN,
	ECS_COMPONENT_ACTION_REDIRECT,
	ECS_COMPONENT_ACTION_DAMAGE,
	ECS_COMPONENT_ACTION_GRIP,
	ECS_COMPONENT_ACTION_GRIPPED,
	ECS_COMPONENT_ACTION_WAVE,
	ECS_COMPONENT_CONTROL_MOVE,
	ECS_COMPONENT_CONTROL_SHOOT,
	ECS_COMPONENT_CONTROL_AIM,
	ECS_COMPONENT_CONTROL_REDIRECT,
	ECS_COMPONENT_CONTROL_LOCK,
	ECS_COMPONENT_CONTROL_RECALL,
	ECS_COMPONENT_CONTROL_HEART,
	ECS_COMPONENT_CONTROL_PLAYER,
	ECS_COMPONENT_SHOP,
	ECS_COMPONENT_SHOP_ITEM,
	ECS_COMPONENT_ACT_ENTITY,
	ECS_COMPONENT_HEALTH,
	ECS_COMPONENT_INVINCIBILITY,
	ECS_COMPONENT_STUN,
	ECS_COMPONENT_LEVEL,
	ECS_COMPONENT_WAVE,
	ECS_COMPONENT_TIMER,
	ECS_COMPONENT_AMMO,
	ECS_COMPONENT_GOODIES,
	ECS_COMPONENT_FATNESS,
	ECS_COMPONENT_REDIRECTS,
	ECS_COMPONENT_ALLEGIANCE,
	ECS_COMPONENT_GAME_ENTITY_TYPE,
	ECS_COMPONENT_UPGRADES,
	ECS_COMPONENT_HEART,
	ECS_COMPONENT_BUTTON,
	ECS_COMPONENT_SHOP_BUTTON,
	ECS_COMPONENT_STAT_DISPLAY,
	ECS_COMPONENT_HUD_DISPLAY,
	ECS_COMPONENT_ACTION_ON_TOUCH_GIVE_GOODIES,
	ECS_COMPONENT_ACTION_DELETE_ON_DEAD,
	ECS_COMPONENT_ACTION_DELETE_ON_TIMER,
	ECS_COMPONENT_ACTION_DELETE_ON_TOUCH_ENTITY,
	ECS_COMPONENT_ACTION_DELETE_ON_TOUCH_GAME_ENTITY_TYPE,
	ECS_COMPONENT_ACTION_ON_OUT_OF_BOUNDS_DELETE
} ECSComponentType;
