#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)
 * - Control
 * - Actions
 * - Statistical information
 * - Deletion events
*/

#define ECS_COMPONENT_COUNT ECS_COMPONENT_ACTION_DELETE_ON_TOUCH_GAME_ENTITY_TYPE + 1
typedef enum ECSComponentType
{
	ECS_COMPONENT_ACTION_ON_DELETE_GIVE_AMMO,
	ECS_COMPONENT_ACTION_ON_DELETE_GIVE_GOODIES,
	ECS_COMPONENT_ANIMATION_COLOR_CHANGE,
	ECS_COMPONENT_PHYSICS,
	ECS_COMPONENT_SPRITE,
	ECS_COMPONENT_GAME_OBJECT,
	ECS_COMPONENT_CHARACTER,
	ECS_COMPONENT_PICKUP,
	ECS_COMPONENT_ACTION_SHOOT,
	ECS_COMPONENT_ACTION_LOCK,
	ECS_COMPONENT_ACTION_RETURN,
	ECS_COMPONENT_ACTION_REDIRECT,
	ECS_COMPONENT_ACTION_DAMAGE,
	ECS_COMPONENT_ACTION_GRIP,
	ECS_COMPONENT_ACTION_GRIPPED,
	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_PLAYER,
	ECS_COMPONENT_ACT_ENTITY,
	ECS_COMPONENT_HEALTH,
	ECS_COMPONENT_AMMO,
	ECS_COMPONENT_GOODIES,
	ECS_COMPONENT_REDIRECTS,
	ECS_COMPONENT_ALLEGIANCE,
	ECS_COMPONENT_GAME_ENTITY_TYPE,
	ECS_COMPONENT_UPGRADES,
	ECS_COMPONENT_ACTION_DELETE_ON_TIMER,
	ECS_COMPONENT_ACTION_DELETE_ON_TOUCH_ENTITY,
	ECS_COMPONENT_ACTION_DELETE_ON_TOUCH_GAME_ENTITY_TYPE
} ECSComponentType;
