コード例 #1
0
 private void RemoveTrigger(ICombatTrigger trigger)
 {
     this.deathTriggers.Remove(trigger);
     this.areaTriggers.Remove(trigger);
     this.loadTriggers.Remove(trigger);
     this.deployTriggers.Remove(trigger);
 }
コード例 #2
0
 private void TryAndTrigger(ICombatTrigger trigger, Entity intruder)
 {
     if (trigger.IsAlreadyTriggered())
     {
         return;
     }
     trigger.Trigger(intruder);
 }
コード例 #3
0
        public void ExecuteLoadTriggers()
        {
            int i     = 0;
            int count = this.loadTriggers.Count;

            while (i < count)
            {
                ICombatTrigger trigger = this.loadTriggers[i];
                this.TryAndTrigger(trigger, null);
                i++;
            }
        }
コード例 #4
0
        public void RegisterTrigger(ICombatTrigger combatTrigger)
        {
            List <ICombatTrigger> list;

            switch (combatTrigger.Type)
            {
            case CombatTriggerType.Area:
            {
                list = this.areaTriggers;
                Entity entity = (Entity)combatTrigger.Owner;
                if (!entity.Has <AreaTriggerComponent>())
                {
                    if (combatTrigger is TrapCombatTrigger)
                    {
                        TrapCombatTrigger trapCombatTrigger = (TrapCombatTrigger)combatTrigger;
                        entity.Add <AreaTriggerComponent>(new AreaTriggerComponent(trapCombatTrigger.AreaRadius));
                    }
                    else
                    {
                        BuildingComponent buildingComponent = entity.Get <BuildingComponent>();
                        entity.Add <AreaTriggerComponent>(new AreaTriggerComponent(buildingComponent.BuildingType.ActivationRadius));
                    }
                }
                break;
            }

            case CombatTriggerType.Death:
                list = this.deathTriggers;
                break;

            case CombatTriggerType.Load:
                list = this.loadTriggers;
                break;

            case CombatTriggerType.TroopDeploy:
                list = this.deployTriggers;
                break;

            default:
                list = this.deathTriggers;
                break;
            }
            if (!list.Contains(combatTrigger))
            {
                list.Add(combatTrigger);
                if (combatTrigger.LastDitchDelayMillis < this.lowestDelay)
                {
                    this.lowestDelay = combatTrigger.LastDitchDelayMillis;
                }
            }
        }
コード例 #5
0
        private void ExecuteLastDitchTriggers(List <ICombatTrigger> combatTriggerList, uint battleMillis)
        {
            int i     = 0;
            int count = combatTriggerList.Count;

            while (i < count)
            {
                ICombatTrigger combatTrigger = combatTriggerList[i];
                if (!combatTrigger.IsAlreadyTriggered() && combatTrigger.LastDitchDelayMillis < this.lowestDelay)
                {
                    this.lowestDelay = combatTrigger.LastDitchDelayMillis;
                }
                if (battleMillis >= combatTrigger.LastDitchDelayMillis)
                {
                    this.TryAndTrigger(combatTrigger, null);
                }
                i++;
            }
        }
コード例 #6
0
        public void InformAreaTriggerBuildings(List <ElementPriorityPair <Entity> > areaTriggerBuildingsInRangeOf, SmartEntity troop)
        {
            int i     = 0;
            int count = areaTriggerBuildingsInRangeOf.Count;

            while (i < count)
            {
                Entity element = areaTriggerBuildingsInRangeOf[i].Element;
                int    j       = 0;
                int    count2  = this.areaTriggers.Count;
                while (j < count2)
                {
                    ICombatTrigger combatTrigger = this.areaTriggers[j];
                    if (combatTrigger.Owner == element)
                    {
                        this.TryAndTrigger(combatTrigger, troop);
                    }
                    j++;
                }
                i++;
            }
        }
コード例 #7
0
        public EatResponse OnEvent(EventId id, object cookie)
        {
            if (id <= EventId.TroopDeployed)
            {
                if (id == EventId.EntityKilled)
                {
                    List <ICombatTrigger> list = new List <ICombatTrigger>();
                    int i     = 0;
                    int count = this.deathTriggers.Count;
                    while (i < count)
                    {
                        ICombatTrigger combatTrigger = this.deathTriggers[i];
                        if (combatTrigger.Owner == cookie)
                        {
                            this.TryAndTrigger(combatTrigger, null);
                            list.Add(combatTrigger);
                        }
                        i++;
                    }
                    int j      = 0;
                    int count2 = this.areaTriggers.Count;
                    while (j < count2)
                    {
                        if (this.areaTriggers[j].Owner == cookie)
                        {
                            list.Add(this.areaTriggers[j]);
                            if (this.areaTriggers[j] is DefendedBuildingCombatTrigger)
                            {
                                DefendedBuildingCombatTrigger defendedBuildingCombatTrigger = (DefendedBuildingCombatTrigger)this.areaTriggers[j];
                                defendedBuildingCombatTrigger.Type = CombatTriggerType.Death;
                                if (defendedBuildingCombatTrigger.TroopsHurtable)
                                {
                                    defendedBuildingCombatTrigger.InitialDelay = GameConstants.SPAWN_DELAY;
                                    defendedBuildingCombatTrigger.TroopsHurt   = true;
                                    defendedBuildingCombatTrigger.Leashed      = false;
                                }
                                this.TryAndTrigger(defendedBuildingCombatTrigger, null);
                            }
                        }
                        j++;
                    }
                    for (int k = 0; k < list.Count; k++)
                    {
                        this.RemoveTrigger(list[k]);
                    }
                    return(EatResponse.NotEaten);
                }
                if (id != EventId.TroopDeployed)
                {
                    return(EatResponse.NotEaten);
                }
            }
            else if (id != EventId.HeroDeployed && id != EventId.ChampionDeployed)
            {
                return(EatResponse.NotEaten);
            }
            int l      = 0;
            int count3 = this.deployTriggers.Count;

            while (l < count3)
            {
                ICombatTrigger combatTrigger2 = this.deployTriggers[l];
                string         text           = ((SmartEntity)cookie).TroopComp.TroopType.TroopID.ToLower();
                string         text2          = (string)combatTrigger2.Owner;
                if (text == text2)
                {
                    this.TryAndTrigger(combatTrigger2, null);
                }
                l++;
            }
            return(EatResponse.NotEaten);
        }