Ejemplo n.º 1
0
 public override void Update()
 {
     if (Input.GetKeyDown(KeyCode.Q))
     {
         UnityEngine.Cursor.visible = false;
         PreviewingSkill            = GetEntity <CombatEntity>().InputAbilitys[KeyCode.Q] as SkillAbility;
         EnterPreview();
     }
     if (Input.GetKeyDown(KeyCode.W))
     {
         UnityEngine.Cursor.visible = false;
         PreviewingSkill            = GetEntity <CombatEntity>().InputAbilitys[KeyCode.W] as SkillAbility;
         EnterPreview();
     }
     if (Input.GetKeyDown(KeyCode.E))
     {
         UnityEngine.Cursor.visible = false;
         PreviewingSkill            = GetEntity <CombatEntity>().InputAbilitys[KeyCode.E] as SkillAbility;
         EnterPreview();
     }
     if (Input.GetMouseButtonDown((int)UnityEngine.UIElements.MouseButton.RightMouse))
     {
         CancelPreview();
     }
     if (Previewing)
     {
     }
 }
Ejemplo n.º 2
0
    public virtual void UseSkill(ushort abilityIndex, bool normal)
    {
        //< 내 스킬의 어빌리티 인지 검증(평타일경우 스킬인덱스는 0이므로, +1을 안시켜줌)
        //if (!normal)
        //    _slot = (uint)(slot + 1);

        //if (!SkillCtr._SkillGroupInfo.GetAbilityContainsKey(_slot, abilityIndex))
        //    return;

        //< 스킬 사용
        //List<SkillTablesLowData.AbilityInfo> skillList = null;

        //if (normal)
        //    skillList = SkillCtr._SkillGroupInfo.GetAbility(_slot, abilityIndex);
        //else

        /*
         * if(Caster.UnitType  == UnitType.Unit)
         * {
         *  byte temp = (Caster as Pc).syncData.SkillData[_slot]._SkillLevel;
         *  skillList = SkillCtr._SkillGroupInfo.GetAbility(_slot, abilityIndex, (uint)temp);
         * }
         * else
         * {
         *  skillList = SkillCtr._SkillGroupInfo.GetAbility(_slot, abilityIndex, null );
         * }
         */


        //skillList = SkillCtr._SkillGroupInfo.GetAbility(_slot, abilityIndex, Caster.UnitType == UnitType.Unit ? (Caster as Pc).syncData.SkillLvDatas : null);
        //skillList = SkillCtr._SkillGroupInfo.GetAbility(_slot, abilityIndex, Caster.UnitType == UnitType.Unit ? (Caster as Pc).syncData.SkillLvDatas : null);

        //< 플레이어에 리더라면 화면에 띄워줌
        //if (!normal && Caster.UnitType == UnitType.Unit && Caster.isLeader)
        //{
        //LocaleLowData.DataInfo localeName = LowDataMgr.GetLocale(GetSkillActionInfo().name);
        //LocaleLowData.DataInfo localedesc = LowDataMgr.GetLocale(skillList[0].skillDec);

        //if (localeName != null && localedesc != null)
        //{
        ////스킬사용시 해당 스킬의 설명과 아이콘에 관한 정보를 HUD로 전달
        ////EventListner.instance.TriggerEvent("HUD_MSG", string.Format("{0}\n{1}", localeName.title, localedesc.title));
        ////EventListner.instance.TriggerEvent("HUD_MSG_ICON", GetSkillActionInfo().icon);
        //}
        //}

        //for (int i = 0; i < skillList.Count; i++)
        //SkillAbility.ActiveSkill(SkillCtr.__SkillGroupInfo.AbilityDic[_slot][abilityIndex], Caster, true);

        AbilityData ability = SkillCtr.__SkillGroupInfo.GetAbility(GetSkillActionInfo().idx, (uint)abilityIndex);

        if (ability != null)
        {
            SkillAbility.ActiveSkill(ability, Caster, normal);
        }
        else
        {
            Debug.Log(string.Format("AbilityNotFound:skillIdx:{0},AbilityIdx:{1}", GetSkillActionInfo().idx, abilityIndex));
        }
    }
Ejemplo n.º 3
0
        public void SpellSkill()
        {
            PreProcess();
            if (SkillExecution == null)
            {
                SkillAbility.ApplyAbilityEffectsTo(Target);
            }
            else
            {
                Hero.Instance.StopMove();

                if (SkillExecution.InputCombatEntity != null)
                {
                    Hero.Instance.transform.GetChild(0).LookAt(SkillExecution.InputCombatEntity.Position);
                }
                else if (SkillExecution.InputPoint != null)
                {
                    Hero.Instance.transform.GetChild(0).LookAt(SkillExecution.InputPoint);
                }
                else
                {
                    Hero.Instance.transform.GetChild(0).localEulerAngles = new Vector3(0, SkillExecution.InputDirection, 0);
                }

                SkillExecution.BeginExecute();
            }
            PostProcess();
        }
Ejemplo n.º 4
0
 public void OnLock()
 {
     foreach (var item in EntityChannels)
     {
         SkillAbility.ApplyEffectTo(item.Key, SkillAbility.SkillConfig.Effects[0]);
         SkillAbility.ApplyEffectTo(item.Key, SkillAbility.SkillConfig.Effects[1]);
     }
     EndExecute();
 }
Ejemplo n.º 5
0
    public void OnLock()
    {
#if !EGAMEPLAY_EXCEL
        foreach (var item in EntityChannels)
        {
            SkillAbility.ApplyEffectTo(item.Key, SkillAbility.SkillConfig.Effects[0]);
            SkillAbility.ApplyEffectTo(item.Key, SkillAbility.SkillConfig.Effects[1]);
        }
#endif
        EndExecute();
    }
Ejemplo n.º 6
0
 public void SpellSkill()
 {
     PreProcess();
     if (SkillAbilityExecution == null)
     {
         SkillAbility.ApplyAbilityEffectsTo(Target);
     }
     else
     {
         SkillAbilityExecution.BeginExecute();
     }
     PostProcess();
 }
Ejemplo n.º 7
0
    public override void Update()
    {
        if (Input.GetKeyDown(KeyCode.Q))
        {
            UnityEngine.Cursor.visible = false;
            PreviewingSkill            = GetEntity <CombatEntity>().InputSkills[KeyCode.Q];
            EnterPreview();
        }
        if (Input.GetKeyDown(KeyCode.W))
        {
            UnityEngine.Cursor.visible = false;
            PreviewingSkill            = GetEntity <CombatEntity>().InputSkills[KeyCode.W];
            EnterPreview();
        }
        if (Input.GetKeyDown(KeyCode.E))
        {
            UnityEngine.Cursor.visible = false;
            PreviewingSkill            = GetEntity <CombatEntity>().InputSkills[KeyCode.E];
            EnterPreview();
        }
#if !EGAMEPLAY_EXCEL
        if (Input.GetKeyDown(KeyCode.R))
        {
            UnityEngine.Cursor.visible = false;
            PreviewingSkill            = GetEntity <CombatEntity>().InputSkills[KeyCode.R];
            EnterPreview();
        }
        if (Input.GetKeyDown(KeyCode.T))
        {
            UnityEngine.Cursor.visible = false;
            PreviewingSkill            = GetEntity <CombatEntity>().InputSkills[KeyCode.T];
            EnterPreview();
        }
        if (Input.GetKeyDown(KeyCode.Y))
        {
            PreviewingSkill = GetEntity <CombatEntity>().InputSkills[KeyCode.Y];
            OnInputTarget(PreviewingSkill.OwnerEntity);
            //EnterPreview();
        }
#endif
        if (Input.GetMouseButtonDown((int)UnityEngine.UIElements.MouseButton.RightMouse))
        {
            CancelPreview();
        }
        if (Previewing)
        {
        }
    }
Ejemplo n.º 8
0
    public override void BeginExecute()
    {
        var channelPrefab = SkillExecutionAsset.transform.Find("Channel");

        for (int i = SkillTargets.Count - 1; i >= 0; i--)
        {
            var item         = SkillTargets[i];
            var channel      = GameObject.Instantiate(channelPrefab);
            var lineRenderer = channel.GetComponent <LineRenderer>();
            lineRenderer.SetPosition(1, item.Position);
            EntityChannels.Add(item, lineRenderer);
        }
        foreach (var item in EntityChannels)
        {
            SkillAbility.ApplyEffectTo(item.Key, SkillAbility.SkillConfig.Effects[2]);
        }
    }
Ejemplo n.º 9
0
 public void SpellSkill()
 {
     PreProcess();
     if (SkillExecution == null)
     {
         SkillAbility.ApplyAbilityEffectsTo(Target);
         PostProcess();
         ApplyAction();
     }
     else
     {
         if (SkillTargets.Count > 0)
         {
             SkillExecution.SkillTargets.AddRange(SkillTargets);
         }
         SkillExecution.BeginExecute();
         AddComponent <UpdateComponent>();
     }
 }
Ejemplo n.º 10
0
 //< 버프 적용
 void AffectBuff(float affectValue, System.Action <bool> _callback)
 {
     //< 스턴일경우에는 체크
     if ((BuffType)buffInfo.buffType == BuffType.Stun)
     {
         //< 상대가 푸쉬 상태라면 대기하고있음
         //if (Target.FSM.Current_State == UnitState.Push)
         //{
         //Caster.StartCoroutine(PushReadyUpdate(() =>
         //{
         //_callback(SkillAbility.BuffApplySkill(true, buffInfo, Caster, Target, affectValue, this));
         //}));
         //}
         //else
         _callback(SkillAbility.BuffApplySkill(true, buffInfo, Caster, Target, affectValue, this));
     }
     else
     {
         _callback(SkillAbility.BuffApplySkill(true, buffInfo, Caster, Target, affectValue, this));
     }
 }
Ejemplo n.º 11
0
    // Start is called before the first frame update
    void Start()
    {
        Instance     = this;
        CombatEntity = EntityFactory.Create <CombatEntity>();
        CombatEntity.AddComponent <SkillPreviewComponent>();
        //CombatEntity.GetComponent<MotionComponent>().Enable = false;

        SkillConfigObject config   = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1001_黑火球术");
        SkillAbility      abilityA = CombatEntity.AttachSkill <Skill1001Entity>(config);

        CombatEntity.BindSkillInput(abilityA, KeyCode.Q);

        config   = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1002_炎爆");
        abilityA = CombatEntity.AttachSkill <Skill1002Entity>(config);
        CombatEntity.BindSkillInput(abilityA, KeyCode.W);

        config   = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1004_血红激光炮");
        abilityA = CombatEntity.AttachSkill <Skill1004Ability>(config);
        CombatEntity.BindSkillInput(abilityA, KeyCode.E);

        AnimTimer.MaxTime = AnimTime;
    }
Ejemplo n.º 12
0
    /// 스킬 이펙트에 존재하는 충돌체의 TriggerEnter에 연결되어 액션을 수행할 함수
    void FireToTarget(Unit _Target, ForwardTriggerEvent _TriggerEvent)
    {
        //황비홍 프로젝트 - 발사체 적용중
        //if (!EffectCallAbility)
        //    return;

        if (null != _Target)
        {
            for (int i = 0; i < _TriggerEvent.SkillAbilityLists.Count; i++)
            {
                if (SceneManager.instance.IsRTNetwork)
                {
                    if (parent.IsLeader || (parent.IsPartner == true && parent.TeamID == G_GameInfo.PlayerController.Leader.TeamID))
                    {
                        System.Collections.Generic.List <ulong> a_list = new System.Collections.Generic.List <ulong>();
                        a_list.Add(_Target.m_rUUID);

                        if (a_list.Count <= 0)
                        {
                            a_list.Add(ulong.MaxValue);
                        }

                        //iFunClient.instance.ReqDamage(parent.m_rUUID, _LowDataMgr.GetSkillAction(_TriggerEvent.SkillAbilityLists[i].Idx).idx, _TriggerEvent.SkillAbilityLists[i].notiIdx, parent.transform.position, parent.transform.eulerAngles.y, a_list); //--> 피격 대상인 놈들을 모두 찾는다.
                    }
                }
                else
                {
                    //< 공격
                    SkillAbility.ApplySkill(SkillType.Attack, _TriggerEvent.SkillAbilityLists[i], parent, _Target, true);

                    /*
                     * //< 버프 호출이있을시 버프호출
                     * if (_TriggerEvent.SkillAbilityLists[i].callBuffIdx != 0 && _Target.BuffCtlr != null)
                     *  _Target.BuffCtlr.AttachBuff(parent, _Target, parent.SkillCtlr.__SkillGroupInfo.GetBuff(_TriggerEvent.SkillAbilityLists[i].callBuffIdx, _TriggerEvent.SkillAbilityLists[i].Idx), _TriggerEvent.SkillAbilityLists[i]);
                     */
                }
            }
        }
    }
Ejemplo n.º 13
0
    //< 버프를 완전히 제거 한다.
    public void DetachBuff()
    {
        Live = false;

        //< 적용된 능력 제거
        SkillAbility.BuffApplySkill(false, buffInfo, Caster, Target, affectedValue, this);
        DeleteUnit();

        //< 버프컨트롤러에서 삭제
        controller.DetachBuff(this);

        //< 이펙트가 있을시 삭제
        SetEffect(false);

        //< 무적관련 버프일경우에는 남아있는 무적 버프가있을시 이펙트를 켜준다.
        switch ((BuffType)buffInfo.buffType)
        {
        case BuffType.AllImmune:
        case BuffType.AttackImmune:
        case BuffType.SkillImmune:
            controller.SetImmuneEffect(true);
            break;
        }
    }
Ejemplo n.º 14
0
 public void BindSkillInput(SkillAbility abilityEntity, KeyCode keyCode)
 {
     InputSkills.Add(keyCode, abilityEntity);
     abilityEntity.TryActivateAbility();
 }
Ejemplo n.º 15
0
    /// 이미 스킬애니메이션은 시작됐고, 실제 스킬 데이터가 적용되어야 하는 시점에 불리는 함수.
    public void SkillUse(int verifyId)
    {
        if (MyUnit == null)
        {
            return;
        }

        if (MyUnit.CurrentState == UnitState.Dying || MyUnit.CurrentState == UnitState.Dead || MyUnit.CharInfo.Hp <= 0)
        {
            return;
        }

        if (callBack != null)
        {
            callBack(verifyId);
        }


        if (!SceneManager.instance.IsRTNetwork || (SceneManager.instance.IsRTNetwork && (MyUnit.m_rUUID == NetData.instance._userInfo._charUUID)))
        {
            if (MyUnit.CurrentState == UnitState.Attack || MyUnit.CurrentState == UnitState.ManualAttack)
            {
                AbilityData ability = MyUnit.SkillCtlr.__SkillGroupInfo.GetAbility(MyUnit.UseSkillIdx, (uint)verifyId);

                if (ability != null)
                {
                    SkillAbility.ActiveSkill(ability, MyUnit, true);
                }
                else
                {
                    Debug.Log("Notfound AbilityData : " + MyUnit.UseSkillIdx + ", " + verifyId);
                }

                //MyUnit.StartSkill((uint)verifyId, true);
            }
            else if (MyUnit.CurrentState == UnitState.Skill)
            {
                AbilityData ability = MyUnit.SkillCtlr.__SkillGroupInfo.GetAbility(MyUnit.UseSkillIdx, (uint)verifyId);

                if (ability != null)
                {
                    SkillAbility.ActiveSkill(ability, MyUnit, false);
                }
                else
                {
                    Debug.Log("Notfound AbilityData : " + MyUnit.UseSkillIdx + ", " + verifyId);
                }

                //MyUnit.StartSkill((uint)verifyId, false);
            }
        }

        Sw.PMsgRoleAttackRecvS attackData = MyUnit.DamageDequeue();

        if (attackData != null)
        {
            //표시할 데이터가 있으면 일단 그냥 표시
            for (int i = 0; i < attackData.CInfo.Count; i++)
            {
                Unit target   = null;
                Unit attacker = null;

                if (attackData.CInfo[i].UnTargetType == (int)Sw.ROLE_TYPE.ROLE_TYPE_USER)
                {
                    target = G_GameInfo.CharacterMgr.FindRoomUnit((ulong)attackData.CInfo[i].UllTargetId);
                }
                else if (attackData.CInfo[i].UnTargetType == (int)Sw.ROLE_TYPE.ROLE_TYPE_NPC)
                {
                    target = G_GameInfo.CharacterMgr.FindRoomNPC((ulong)attackData.CInfo[i].UllTargetId);
                }

                if (attackData.UnAttackerType == (int)Sw.ROLE_TYPE.ROLE_TYPE_USER)
                {
                    attacker = G_GameInfo.CharacterMgr.FindRoomUnit((ulong)attackData.UllAttackerId);
                }
                else if (attackData.UnAttackerType == (int)Sw.ROLE_TYPE.ROLE_TYPE_NPC)
                {
                    attacker = G_GameInfo.CharacterMgr.FindRoomNPC((ulong)attackData.UllAttackerId);
                }

                if (attacker != null)
                {
                    attacker.CharInfo.SuperArmor = (uint)attackData.UnSuperArmor;
                }

                if (target != null)
                {
                    if (attackData.CInfo[i].UnDodge == 1)
                    {
                        //회피
                        if (G_GameInfo.GameInfo.BoardPanel != null)
                        {
                            G_GameInfo.GameInfo.BoardPanel.ShowBuff(target.gameObject, target.gameObject, _LowDataMgr.instance.GetStringCommon(21));
                        }
                    }
                    else if (attackData.CInfo[i].UnCritical == 1)
                    {
                        if (NetData.instance._userInfo._charUUID == (ulong)attackData.CInfo[i].UllTargetId)
                        {
                            //해당유닛이 내유닛이다.

                            target.ShowDamagedFx(target, (int)attackData.CInfo[i].UnDamage, true, true, false, eDamResistType.None);
                        }
                        else
                        {
                            //아니다
                            target.ShowDamagedFx(target, (int)attackData.CInfo[i].UnDamage, false, true, false, eDamResistType.None);
                        }
                        target.StartFlickerFx();
                        target.CharInfo.Hp = attackData.CInfo[i].UnTargetHp;
                    }
                    else
                    {
                        if (NetData.instance._userInfo._charUUID == (ulong)attackData.CInfo[i].UllTargetId)
                        {
                            //해당유닛이 내유닛이다.
                            target.ShowDamagedFx(target, (int)attackData.CInfo[i].UnDamage, true, false, false, eDamResistType.None);
                        }
                        else
                        {
                            target.ShowDamagedFx(target, (int)attackData.CInfo[i].UnDamage, false, false, false, eDamResistType.None);
                        }
                        target.StartFlickerFx();
                        target.CharInfo.Hp = attackData.CInfo[i].UnTargetHp;
                    }


                    target.CharInfo.SuperArmor = (uint)attackData.CInfo[i].UnTargetSuperArmor;
                }
            }
        }


        /*
         * if (MyUnit.CurrentState == UnitState.Attack || MyUnit.CurrentState == UnitState.ManualAttack)
         * {
         *  //< 콤보 예외처리
         *  int combo = MyUnit.CurCombo;
         *  if(MyUnit.CurrentState == UnitState.Attack || MyUnit.CurrentState == UnitState.ManualAttack)
         *  {
         *      if (MyUnit.CurCombo == 1)
         *          combo = 1;
         *      else if (MyUnit.CurCombo == 2)
         *          combo = 2;
         *      else if (MyUnit.CurCombo == 3)
         *          combo = 3;
         *      else if (MyUnit.CurCombo == 0)
         *          combo = 4;
         *
         *      //Debug.Log(string.Format("combo count:{0}, MyUnit.CurCombo:{1}", combo, MyUnit.CurCombo));
         *  }
         *
         *  //< 스킬 시전
         *  //MyUnit.StartSkill(0, (uint)combo, true);
         *
         *  //MyUnit.StartSkill(0, (uint)combo);
         *  Debug.Log(string.Format("verifyId:{0}, MyUnit.UseSkillSlot:{1}", verifyId, MyUnit.UseSkillSlot));
         *  MyUnit.StartSkill((uint)verifyId, true);
         * }
         * else if (MyUnit.CurrentState == UnitState.Skill)
         * {
         *  //< 스킬을 시전한다.
         *  //Debug.Log("UseSkillSlot " + MyUnit.UseSkillSlot + " , verifyId " + verifyId);
         *  MyUnit.StartSkill((uint)verifyId, false);
         * }
         */
    }
    //< 버프 추가
    //public void AttachBuff(Unit caster, Unit target, SkillTables.BuffInfo _buffInfo, AbilityData _ability)
    public void AttachBuff(Unit caster, Unit target, SkillTables.BuffInfo _buffInfo, uint _BuffRate, float _BuffDuration)
    {
        if (_buffInfo == null)
        {
            return;
        }
//	    LOGEX.LogEx("BuffController.AttachBuff()", LOGEX.LogType.NONE, LOGEX.ColorType.PURPLE);
        //< 일단 확률을 먼저 검사한다.
        ushort ran = (ushort)Random.Range(0, 10000);

        if ((ushort)ran > _BuffRate)
        {
            BuffInfoStringShow(caster, target, _buffInfo, "抵抗");
            return;
        }

        //< 적용할 수치를 계산한다.

        //버프의 데미지율은 천분율이라 0.001곱하는데 이건좀...
        float affectValue;

        if (SceneManager.instance.IsRTNetwork)
        {
            affectValue = 1;
        }
        else
        {
            affectValue = SkillAbility.CalcAffectValue(_buffInfo, caster, target, 0.001f);
        }

        //< 같은 타입의 버프가 존재하는지 검사
        bool accrue = false;

        for (int i = 0; i < BuffDic.Count; i++)
        {
            //< 같은 버프를 또 쓸경우 중첩됨
            if (BuffDic[i].buffInfo.Indx == _buffInfo.Indx)
            {
                BuffDic[i].OnAttach(this, caster, target, _buffInfo, affectValue, (BuffDurationType)_buffInfo.buffAbility, _BuffDuration);
                accrue = true;
                break;
            }
        }

        //< 중첩되는 버프가 없다면 새로 만들어서 넣어줌
        if (!accrue)
        {
            //< 새버프 생성
            Buff newBuff = new Buff();
            BuffDic.Add(newBuff);
            newBuff.OnAttach(this, caster, target, _buffInfo, affectValue, (BuffDurationType)_buffInfo.buffAbility, _BuffDuration);
        }

        if (AddBuffCallBack != null)
        {
            AddBuffCallBack();
        }

        //< 게임패널에서 업데이트하기 위함
        EventListner.instance.TriggerEvent("BuffUpdate");
    }
Ejemplo n.º 17
0
    // Start is called before the first frame update
    void Start()
    {
        Instance     = this;
        CombatEntity = Entity.CreateWithParent <CombatEntity>(CombatContext.Instance);
        CombatEntity.AddComponent <SkillPreviewComponent>();
        //CombatEntity.GetComponent<MotionComponent>().Enable = false;

#if EGAMEPLAY_EXCEL
        var          config  = ConfigHelper.Get <SkillConfig>(1001);
        SkillAbility ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.Q);

        config  = ConfigHelper.Get <SkillConfig>(1002);
        ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.W);

        config  = ConfigHelper.Get <SkillConfig>(1004);
        ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.E);
#else
        SkillConfigObject config  = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1001_黑火球术");
        SkillAbility      ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.Q);

        config  = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1002_炎爆");
        ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.W);

        config  = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1004_血红激光炮");
        ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.E);

        config  = Resources.Load <SkillConfigObject>("SkillConfigs/Skill_1005_火弹");
        ability = CombatEntity.AttachSkill <SkillAbility>(config);
        CombatEntity.BindSkillInput(ability, KeyCode.R);
#endif
        for (int i = InventoryPanelTrm.childCount; i > 0; i--)
        {
            GameObject.Destroy(InventoryPanelTrm.GetChild(i - 1).gameObject);
        }
        var allItemConfigs = ConfigHelper.GetAll <EquipmentConfig>();
        foreach (var item in allItemConfigs)
        {
            var itemObj = GameObject.Instantiate(ItemPrefab);
            itemObj.transform.parent = InventoryPanelTrm;
            itemObj.transform.Find("Icon").GetComponent <UnityEngine.UI.Image>().sprite = Resources.Load <Sprite>($"Icons/{item.Value.Name}");
            var text = itemObj.transform.Find("Text").GetComponent <UnityEngine.UI.Text>();
            text.text = $"+{item.Value.Value}";
            if (item.Value.Attribute == "AttackPower")
            {
                text.color = Color.red;
            }
            itemObj.GetComponent <UnityEngine.UI.Button>().onClick.AddListener(() => {
                if (EquipmentPanelTrm.childCount >= 4)
                {
                    return;
                }
                var equipObj = GameObject.Instantiate(ItemPrefab);
                equipObj.transform.parent = EquipmentPanelTrm;
                equipObj.transform.Find("Icon").GetComponent <UnityEngine.UI.Image>().sprite = Resources.Load <Sprite>($"Icons/{item.Value.Name}");
                var equipText  = equipObj.transform.Find("Text").GetComponent <UnityEngine.UI.Text>();
                equipText.text = $"+{item.Value.Value}";
                if (item.Value.Attribute == "AttackPower")
                {
                    equipText.color = Color.red;
                }
                var itemData      = Entity.CreateWithParent <ItemData>(CombatEntity);
                equipObj.name     = $"{itemData.Id}";
                itemData.ConfigId = item.Value.Id;
                CombatEntity.AddItemData(itemData);
                equipObj.GetComponent <UnityEngine.UI.Button>().onClick.AddListener(() => {
                    var id = long.Parse(equipObj.name);
                    CombatEntity.RemoveItemData(id);
                    GameObject.Destroy(equipObj);
                });
            });
        }

        AnimTimer.MaxTime = AnimTime;
    }