protected override void OnUpdate()
        {
            //player select state
            Entities.ForEach((Entity entity, ref Battle battle, ref PlayerSelectState state) =>
            {
                var windowEntity        = battle.BattleWindowEntity;
                var battleWindow        = EntityManager.GetComponentData <BattleWindow>(windowEntity);
                var endTurnButtonEntity = battleWindow.EndTurnButtonEntity;

                if (EntityManager.HasComponent <UIButtonClickEvent>(endTurnButtonEntity))
                {
                    CommonUtil.SetFSMStateCmd <PlayerTurnEndState, EnterPlayerTurnEndStateEvent, ExitPlayerTurnEndStateEvent>(EntityManager, entity, (byte)EBattleState.PlayerTurnEnd);
                    return;
                }

                Entities
                .WithNone <SelectedState>()
                .ForEach((Entity cardViewEntity, ref CardView cardView, ref PointerInteractable interactable, ref PointerEnterEvent enterEvent) =>
                {
                    //if (cardView.IsSelected)
                    //    return;

                    var typeInfo = TypeManager.GetTypeInfo <Translation>();
                    var info     = TweenSystem.GetFieldArgs(typeInfo.TypeIndex, (int)PrimitiveFieldTypes.Float, 4);
                    tweenSystem.AddTween <float>(
                        cardViewEntity,
                        info,
                        0f,
                        0.2f,
                        0.1f
                        );
                });

                Entities
                .WithNone <SelectedState>()
                .ForEach((Entity cardViewEntity, ref CardView cardView, ref PointerInteractable interactable, ref PointerExitEvent exitEvent) =>
                {
                    //if (cardView.IsSelected)
                    //    return;

                    var typeInfo = TypeManager.GetTypeInfo <Translation>();
                    var info     = TweenSystem.GetFieldArgs(typeInfo.TypeIndex, (int)PrimitiveFieldTypes.Float, 4);
                    tweenSystem.AddTween <float>(
                        cardViewEntity,
                        info,
                        0.2f,
                        0f,
                        0.1f
                        );
                });

                var cardViewQuery = GetEntityQuery(typeof(CardView), typeof(PointerClickEvent));
                var num           = cardViewQuery.CalculateEntityCount();
                if (num > 0)
                {
                    var entities       = cardViewQuery.ToEntityArray(Allocator.TempJob);
                    var cardViewEntity = entities[0];

                    var selectedCardViewEntity = battle.SelectedCardViewEntity;
                    if (selectedCardViewEntity != Entity.Null)
                    {
                        EntityUtil.RemoveState <SelectedState, ExitSelectedStateEvent>(EntityManager, selectedCardViewEntity, true);

                        battle.SelectedCardEntity     = Entity.Null;
                        battle.SelectedCardViewEntity = Entity.Null;

                        //remove all indicated state
                        Entities.ForEach((Entity creatureEntity, ref Creature creature, ref TargetIndicatedState indicatedState) =>
                        {
                            EntityUtil.RemoveState <TargetIndicatedState, ExitTargetIndicatedStateEvent>(EntityManager, creatureEntity, true);
                            //EntityManager.RemoveComponent<TargetIndicator>(creatureEntity);
                        });
                    }

                    if (selectedCardViewEntity != cardViewEntity)
                    {
                        EntityUtil.AddState <SelectedState, EnterSelectedStateEvent>(EntityManager, cardViewEntity, true);

                        var cardView   = EntityManager.GetComponentData <CardView>(cardViewEntity);
                        var cardEntity = cardView.CardEntity;

                        battle.SelectedCardEntity     = cardEntity;
                        battle.SelectedCardViewEntity = cardViewEntity;

                        var skill          = EntityManager.GetComponentData <Skill>(cardEntity);
                        var targetType     = skill.TargetType;
                        var targetNum      = skill.TargetNum;
                        bool isWithoutSelf = skill.IsWithoutSelf;

                        var playerEntity = battle.PlayerEntity;
                        var enemyMembers = EntityManager.GetBuffer <EnemyTeamMember>(entity).ToNativeArray(Allocator.Temp);

                        var indicatedState = new TargetIndicatedState {
                            IndicatorType = targetType
                        };
                        Entities.ForEach((Entity creatureEntity, ref Creature creature, ref TargetIndicatable indicatable) =>
                        {
                            if (IsSkillTarget(EntityManager, playerEntity, skill, creatureEntity))
                            {
                                EntityUtil.AddStateData <TargetIndicatedState, EnterTargetIndicatedStateEvent>(EntityManager, creatureEntity, indicatedState, true);
                                //EntityManager.SetOrAddComponentData<TargetIndicator>(creatureEntity, indicator);
                            }
                        });

                        //if (targetType == ETargetType.Self)
                        //{
                        //    indicatorType = ETargetIndicatorType.Target;
                        //}
                        //else if (targetType == ETargetType.All)
                        //{
                        //    var indicator = new TargetIndicator { IndicatorType = ETargetIndicatorType.All };
                        //    EntityManager.SetOrAddComponentData<TargetIndicator>(playerEntity, indicator);
                        //    for(int i = 0;i< enemyMembers.Length;i++)
                        //        EntityManager.SetOrAddComponentData<TargetIndicator>(enemyMembers[i].CreatureEntity, indicator);
                        //}
                        //else if (targetType == ETargetType.AllFriendly)
                        //{
                        //    var indicator = new TargetIndicator { IndicatorType = ETargetIndicatorType.All };
                        //    EntityManager.SetOrAddComponentData<TargetIndicator>(playerEntity, indicator);
                        //}
                        //else if (targetType == ETargetType.AllHostile)
                        //{
                        //    var indicator = new TargetIndicator { IndicatorType = ETargetIndicatorType.All };
                        //    for (int i = 0; i < enemyMembers.Length; i++)
                        //        EntityManager.SetOrAddComponentData<TargetIndicator>(enemyMembers[i].CreatureEntity, indicator);
                        //}

                        enemyMembers.Dispose();
                    }

                    entities.Dispose();


                    //CommonUtil.SetFSMStateCmd<PlayerSelectTargetState, EnterPlayerSelectTargetStateEvent, ExitPlayerSelectTargetStateEvent>(EntityManager, entity, (byte)EBattleState.PlayerSelectTarget);
                }
            });

            Entities.ForEach((Entity entity, ref Battle battle, ref PlayerSelectState state) =>
            {
                var selectedCardViewEntity = battle.SelectedCardViewEntity;
                if (selectedCardViewEntity != Entity.Null)
                {
                    Entity selectedCreatureEntity = Entity.Null;
                    Entities.ForEach((Entity creatureEntity, ref TargetIndicatedState indicatedState, ref PointerClickEvent clickEvent) =>
                    {
                        selectedCreatureEntity = creatureEntity;
                    });

                    if (selectedCreatureEntity != Entity.Null)
                    {
                        battle.SelectedTargetEntity = selectedCreatureEntity;
                        CommonUtil.SetFSMStateCmd <PlayerPlayCardState, EnterPlayerPlayCardStateEvent, ExitPlayerPlayCardStateEvent>(EntityManager, entity, (byte)EBattleState.PlayerPlayCard);
                        return;
                    }
                }
            });

            Entities.ForEach((Entity cardViewEntity, ref CardView cardView, ref Translation translation, ref EnterSelectedStateEvent enterEvent) =>
            {
                //cardView.IsSelected = true;

                var pos           = translation.Value;
                pos.y             = 0.3f;
                translation.Value = pos;
            });

            Entities.ForEach((Entity cardViewEntity, ref CardView cardView, ref Translation translation, ref ExitSelectedStateEvent enterEvent) =>
            {
                //cardView.IsSelected = false;

                var pos           = translation.Value;
                pos.y             = 0f;
                translation.Value = pos;
            });

            Entities.ForEach((Entity creatureEntity, ref Creature creature, ref TargetIndicatable indicatable, ref ExitTargetIndicatedStateEvent exitEvent) =>
            {
                var indicatorEntity = indicatable.IndicatorEntity;
                var indicator       = EntityManager.GetComponentData <TargetIndicator>(indicatorEntity);

                EntityUtil.SetActive(EntityManager, indicator.SelfIndicatorEntity, false);
                EntityUtil.SetActive(EntityManager, indicator.AllIndicatorEntity, false);
                EntityUtil.SetActive(EntityManager, indicator.RandomIndicatorEntity, false);
                EntityUtil.SetActive(EntityManager, indicator.AssignedIndicatorEntity, false);
            });

            Entities.ForEach((Entity creatureEntity, ref Creature creature, ref TargetIndicatable indicatable, ref TargetIndicatedState indicatedState, ref EnterTargetIndicatedStateEvent enterEvent) =>
            {
                var indicatorEntity = indicatable.IndicatorEntity;
                var indicator       = EntityManager.GetComponentData <TargetIndicator>(indicatorEntity);

                var type = indicatedState.IndicatorType;
                if (type == ETargetType.Self)
                {
                    EntityUtil.SetActive(EntityManager, indicator.SelfIndicatorEntity, true);
                }
                else if (type == ETargetType.All)
                {
                    EntityUtil.SetActive(EntityManager, indicator.AllIndicatorEntity, true);
                }
                else if (type == ETargetType.Random)
                {
                    EntityUtil.SetActive(EntityManager, indicator.RandomIndicatorEntity, true);
                }
                else if (type == ETargetType.Assigned)
                {
                    EntityUtil.SetActive(EntityManager, indicator.AssignedIndicatorEntity, true);
                }
            });
        }
        protected override void OnStartRunning()
        {
            base.OnStartRunning();

            tweenSystem = World.GetExistingSystem <TweenSystem>();
        }