#pragma once

#include "component/action/component_action_delete_on_touch.h"
#include "component/action/component_action_on_delete_give_ammo.h"
#include "component/action/component_action_return.h"
#include "component/action/component_action_redirect.h"
#include "component/action/component_action_lock.h"
#include "component/action/component_action_shoot.h"
#include "component/action/component_action_damage.h"
#include "component/component_game_object.h"
#include "component/component_physics.h"
#include "component/component_sprite.h"
#include "component/control/component_control_aim.h"
#include "component/control/component_control_move.h"
#include "component/control/component_control_shoot.h"
#include "component/control/component_control_redirect.h"
#include "component/control/component_control_lock.h"
#include "component/control/component_control_recall.h"
#include "component/stat/component_ammo.h"
#include "component/stat/component_health.h"
#include "component/stat/component_redirect.h"
#include "component/stat/component_lifetime.h"

#include "ecs_component.h"

static const ECSComponentInfo ECS_COMPONENT_INFO[ECS_COMPONENT_COUNT] = 
{
	COMPONENT_PHYSICS_INFO,
	COMPONENT_ACTION_ON_DELETE_GIVE_AMMO_INFO,
	COMPONENT_ACTION_SHOOT_INFO,
	COMPONENT_ACTION_RETURN_INFO,
	COMPONENT_ACTION_REDIRECT_INFO,
	COMPONENT_ACTION_LOCK_INFO,
	COMPONENT_ACTION_DAMAGE_INFO,
	COMPONENT_CONTROL_MOVE_INFO,
	COMPONENT_CONTROL_SHOOT_INFO,
	COMPONENT_CONTROL_AIM_INFO,
	COMPONENT_CONTROL_REDIRECT_INFO,
	COMPONENT_CONTROL_LOCK_INFO,
	COMPONENT_CONTROL_RECALL_INFO,
	COMPONENT_HEALTH_INFO,
	COMPONENT_AMMO_INFO,
	COMPONENT_REDIRECT_INFO,
	COMPONENT_SPRITE_INFO,
	COMPONENT_GAME_OBJECT_INFO,
	COMPONENT_LIFETIME_INFO,
	COMPONENT_ACTION_DELETE_ON_TOUCH_INFO
};

void ecs_tick(ECS* self);
void ecs_draw(ECS* self);
void ecs_init(ECS* self, Game* game);
void ecs_clear(ECS* self);
void ecs_free(ECS* self);
