/**
 * @file Entity.h
 * @brief 实体组件生命周期管理接口。
 */
#pragma once
#include "ComponentsCommon.h"
#include "Transform.h"


namespace XEngine {

/**
 * @brief 前置声明组件初始化参数结构。
 */
#define INIT_INFO(component) namespace component { struct init_info; }

INIT_INFO(transform);
INIT_INFO(script);

#undef INIT_INFO


namespace game_entity {
/**
 * @brief 创建实体时可选的组件初始化信息。
 */
struct entity_info
{
	transform::init_info* transform{ nullptr };
	script::init_info* script{ nullptr };
};

/**
 * @brief 创建实体并按需附加组件。
 * @param info 实体初始化信息。
 * @return 新建实体句柄。
 */
entity create(entity_info info);
/**
 * @brief 删除实体及其关联组件。
 * @param id 实体标识符。
 */
void remove(entity_id id);
/**
 * @brief 判断实体是否仍然存活。
 * @param id 实体标识符。
 * @return 存活返回 true，否则返回 false。
 */
bool is_alive(entity_id id);
}
}
