namespace ET.Server
{
    public static class PlayerFactory
    {
        /// <summary>
        /// 创建玩家实体
        /// </summary>
        /// <param name="session"></param>
        /// <param name="playerInfo"></param>
        /// <returns></returns>
        public static async ETTask<WNPlayer> CreatPlayer(Session session, PlayerInfo playerInfo)
        {
            WNPlayer player = session.DomainScene().GetComponent<GamePlayerComponent>()
                    .AddChild<WNPlayer, Session, PlayerInfo>(session, playerInfo);

            // 绑定sessionId
            if (playerInfo.PlayerType == 0)
            {
                player.GameSessionActorId = session.InstanceId;
                player.Session = session;
            }
            player.BasicProp = CharacterCategory.Instance.Get(playerInfo.Pro);
            player.BornType = (int)BORN_TYPE.NORMAL;
            player.EnterState = (int)ENTER_STATE.online;

            // 玩家基础数据组件
            player.AddComponent<PlayerDataComponent, PlayerInfo, WNPlayer>(playerInfo, player);
            // 玩家临时数据组件
            await player.AddComponent<PlayerTempDataComponent, WNPlayer>(player).Init();
            // 玩家技能组件
            await player.AddComponent<PlayerSkillComponent, WNPlayer>(player).Init();
            // 玩家货币组件
            await player.AddComponent<PlayerMoneyComponent, WNPlayer>(player).Init();

            return player;
        }
    }
}