Beispiel #1
0
        public void AddSkill(SkillProto proto, int index)
        {
            if (ownerSkillDic.ContainsKey(proto.ID))
            {
                DebugUtils.Log(DebugUtils.Type.AI_Skill, string.Format("Unit {0} can't equip the skill {1} twice!", owner.unitType, proto.ID));
                return;
            }

            // temp code.//--test skill add Id 7/8/9/10/12/15/16
            if (skillFilter.Contains(proto.ID))
            {
                UnitSkillTriggerType triggerEvent = (UnitSkillTriggerType)proto.TriggerEvent;
                if (!ownerSkills.ContainsKey(triggerEvent))
                {
                    ownerSkills.Add(triggerEvent, new List <SkillHandler>());
                }

                RegisteOwnerStateListener(triggerEvent);

                SkillHandler data = new SkillHandler();
                data.skillProto           = proto;
                data.skillIndex           = index;
                data.enabled              = false;
                data.skill                = null;
                data.unitSkillTriggerType = triggerEvent;
                data.triggerValue         = proto.TriggerValue;

                ownerSkillDic.Add(proto.ID, data);
                ownerSkills[triggerEvent].Add(data);

                DebugUtils.Log(DebugUtils.Type.AI_SkillTrigger, string.Format("force {0} unit {1} equip the {2}. metaId = {3}, trigger = {4} ", owner.mark, owner.id, proto.Name, proto.ID, triggerEvent));
            }
        }
Beispiel #2
0
        private void RemoveOwnerStateListener(UnitSkillTriggerType type)
        {
            switch (type)
            {
            case UnitSkillTriggerType.OnAliveStateChanged:
            {
                ownerStateListener.RemoveAliveListener(OwnerAliveStateChange);
                break;
            }

            case UnitSkillTriggerType.OnAttackCountIncrease:
            {
                ownerStateListener.RemoveFightListener(OwnerAttackCountIncrease);
                break;
            }

            case UnitSkillTriggerType.OnAttackOrderDistance:
            case UnitSkillTriggerType.OnAttackOrder:
            {
                ownerStateListener.RemoveAttackOrderListener(OwnerReciveAttackOrder);
                break;
            }

            //{
            //    ownerStateListener.RemoveChasingStateListener( OwnerChasing );
            //    break;
            //}
            case UnitSkillTriggerType.OnAttackSameTarget:
            {
                timingClearTarget = true;
                ownerStateListener.RemoveFightListener(OwnerAttackSameTarget);
                break;
            }

            case UnitSkillTriggerType.OnPersistentIdleState:
            {
                ownerStateListener.RemoveIdleStateListener(OwnerIdleStateChange);
                break;
            }

            case UnitSkillTriggerType.OnHurt:
            {
                ownerStateListener.RemoveHurtListener(OwnerHurt);
                break;
            }

            case UnitSkillTriggerType.OnHealthLower:
            {
                //ownerStateListener.RemoveHealthChangeListener( OwnerHealthChange );
                break;
            }

            case UnitSkillTriggerType.OnDeath:
            {
                ownerStateListener.RemoveDeathStateListener(OwnerDeath);
                break;
            }

            case UnitSkillTriggerType.OnKillCount:
            {
                ownerStateListener.RemoveKillEnemyListener(OwnerKillEnemy);
                break;
            }

            case UnitSkillTriggerType.OnMoveDistance:
            {
                ownerStateListener.RemoveMoveDistanceListener(HandleOwnerMoveDistance);
                break;
            }

            default:
            {
                DebugUtils.LogError(DebugUtils.Type.AI_SkillTrigger, string.Format("Can't handle {0} as UnitSkillTriggerType", type));
                break;
            }
            }

            DebugUtils.LogWarning(DebugUtils.Type.AI_SkillTrigger, string.Format("Register skill trigger condition {0}", type));
        }