private void applyAgentComponentsForAttribute(string attribute, Agent agent)
        {
            switch (attribute)
            {
            case "Unbreakable":
                // Unbreakable agents shouldn't be subject to default retreat/morale logic
                agent.RemoveComponentIfNotNull(agent.GetComponent <MoraleAgentComponent>());

                agent.AddComponent(new UnbreakableMoraleAgentComponent(agent));
                break;

            case "Expendable":
                //components.Add(new ExpendableMoraleAgentComponent(agent));
                //components.Add(new ExpendableRetreatAgentComponent(agent));
                break;

            case "HealingAura":
                agent.AddComponent(new HealingAuraAgentComponent(agent, base.Mission));
                break;

            case "Frenzy":
                agent.AddComponent(new FrenzyAgentComponent(agent));
                break;
            }
        }
 public override void OnAgentCreated(Agent agent)
 {
     base.OnAgentCreated(agent);
     if (!agent.IsAIControlled)
     {
         return;
     }
     agent.AddComponent((AgentComponent) new UseObjectAgentComponent(agent));
     agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent));
     agent.AddComponent((AgentComponent) new AIBehaviorComponent(agent));
 }
Ejemplo n.º 3
0
        public void RoundTripTest()
        {
            Agent agent          = Agent.CreateInstance(5000, EcsSignatureType.SingleLong);
            var   movementSystem = agent.RegisterSystem <MovementSystem>();

            var entity   = agent.CreateEntity();
            var position = new PositionComponent {
                X = 5, Y = 10
            };
            var velocity = new VelocityComponent {
                DX = 2.2f, DY = 3.3f
            };

            agent.AddComponent(entity, position);
            agent.AddComponent(entity, velocity);

            var systemEntities = movementSystem.GetAllSystemEntities();

            Assert.AreEqual(1, systemEntities.Count());
            Assert.AreEqual(entity, systemEntities.First());
            Assert.AreEqual(position, agent.GetComponent <PositionComponent>(entity));
            Assert.AreEqual(velocity, agent.GetComponent <VelocityComponent>(entity));

            agent.RemoveComponent <PositionComponent>(entity);
            systemEntities = movementSystem.GetAllSystemEntities();

            Assert.AreEqual(0, systemEntities.Count());
            Assert.AreEqual(velocity, agent.GetComponent <VelocityComponent>(entity));

            agent.AddComponent(entity, position);
            systemEntities = movementSystem.GetAllSystemEntities();

            Assert.AreEqual(1, systemEntities.Count());
            Assert.AreEqual(position, agent.GetComponent <PositionComponent>(entity));
            Assert.AreEqual(velocity, agent.GetComponent <VelocityComponent>(entity));

            var entity2   = agent.CreateEntity();
            var position2 = new PositionComponent();
            var velocity2 = new VelocityComponent();

            agent.AddComponent(entity2, position2);
            agent.AddComponent(entity2, velocity2);
            systemEntities = movementSystem.GetAllSystemEntities();

            Assert.AreEqual(2, systemEntities.Count());
            Assert.AreEqual(position2, agent.GetComponent <PositionComponent>(entity2));
            Assert.AreEqual(velocity2, agent.GetComponent <VelocityComponent>(entity2));

            var getSystemEntitiesEvent = new GetSystemEntitiesEvent();

            agent.SendEvent(getSystemEntitiesEvent);

            Assert.AreEqual(systemEntities, getSystemEntitiesEvent.Entities);
        }
Ejemplo n.º 4
0
        public override void OnAgentCreated(Agent agent)
        {
            var comp = new BattleRegenerationComponent(agent, this);

            activeAgents.Add(agent, comp);
            agent.AddComponent(comp);
        }
Ejemplo n.º 5
0
        public override void OnAgentCreated(Agent agent)
        {
            if (agent == null)
            {
                return;
            }
            if (agent.IsMount)
            {
                return;
            }
            if (agent.IsMainAgent)
            {
                return;
            }
            if (agent.Character == null)
            {
                return;
            }

            if (agent.IsHero)
            {
                agent.AddComponent(new LeadershipAIComponent(_config, agent, _common, _strings));
                if (_config.AI.ImpactfulDeath)
                {
                    agent.OnAgentHealthChanged += OnHitPointsChanged;
                }
                if (_config.AI.PersonalEffects.Enabled)
                {
                    _personalDeathEffectAgentList.Add(agent);
                }
            }
        }
 public override void OnAgentBuild(Agent agent, Banner banner)
 {
     base.OnAgentBuild(agent, banner);
     try
     {
         var tournamentAgent = new TournamentAgent(agent);
         //Luckily, mounted agents are built with their mount already assigned
         if (_controller.ParticipantGetsBanner(tournamentAgent))
         {
             if (_settings.TournamentBannersInShields || !_settings.TournamentThemes)
             {
                 agent.Origin.SetBanner(agent.Team.Banner);
             }
             else
             {
                 Banner agentBanner = new Banner(_controller.GetCurrentTeam().Banner.Key);
                 agent.Origin.SetBanner(agentBanner);
             }
             agent.RemoveFromSpawnEquipment(_forbiddenWeapons);
             agent.AddBannerToSpawnEquipment();
             agent.AddComponent(new DropBannerComponent(agent, _settings, _dropBannerController));
         }
     }
     catch (Exception ex)
     {
         Main.LogError(ex);
     }
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Should take place after agent is built AND WieldInitialWeapons is invoked
        /// </summary>
        /// <param name="agent"></param>
        private void AfterAgentSpawned(Agent agent)
        {
            var campaignAgent = new CampaignAgent(agent);

            if (_formationBanners.ContainsKey(campaignAgent.Formation) && _controller.AgentGetsFancyShield(campaignAgent))
            {
                agent.SwitchShieldBanner(_formationBanners[campaignAgent.Formation]);
            }

            if (_controller.AgentIsEligible(campaignAgent) &&
                _controller.AgentGetsBanner(campaignAgent))
            {
                agent.RemoveFromEquipment(_forbiddenWeapons);
                agent.AddComponent(new DropBannerComponent(agent, _settings, _dropBannerController));

                if (_formationBanners.ContainsKey(campaignAgent.Formation) && _controller.AgentGetsFancyBanner(campaignAgent))
                {
                    agent.EquipBanner(_formationBanners[campaignAgent.Formation]);
                }
                else
                {
                    agent.EquipBanner();
                }
            }
        }
Ejemplo n.º 8
0
        private void ApplyAgentComponentsForAttribute(string attribute, Agent agent)
        {
            switch (attribute)
            {
            case "Expendable":
                //Expendable units are handled in the mission's morale interaction logic
                break;

            case "HealingAura":
                agent.AddComponent(new HealingAuraAgentComponent(agent));
                break;

            case "Undead":
                agent.AddComponent(new UndeadMoraleAgentComponent(agent));
                break;
            }
        }
Ejemplo n.º 9
0
 public override void OnAgentCreated(Agent agent)
 {
     base.OnAgentCreated(agent);
     if (!agent.IsAIControlled && !agent.IsMount)
     {
         return;
     }
     agent.AddComponent((AgentComponent) new FadeOutAgentComponent(agent));
 }
Ejemplo n.º 10
0
        protected new Agent SpawnBot(Team agentTeam, BasicCultureObject cultureLimit)
        {
            BasicCharacterObject troopCharacter = MultiplayerClassDivisions.GetMPHeroClasses(cultureLimit).ToList <MultiplayerClassDivisions.MPHeroClass>().GetRandomElement <MultiplayerClassDivisions.MPHeroClass>().TroopCharacter;
            MatrixFrame          spawnFrame     = this.SpawnComponent.GetSpawnFrame(agentTeam, troopCharacter.HasMount(), true);
            AgentBuildData       agentBuildData = new AgentBuildData(troopCharacter);

            agentBuildData.Team(agentTeam);
            agentBuildData.InitialFrame(spawnFrame);
            agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(troopCharacter));
            agentBuildData.EquipmentSeed(this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(troopCharacter, 0));
            agentBuildData.ClothingColor1(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color : cultureLimit.ClothAlternativeColor);
            agentBuildData.ClothingColor2(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color2 : cultureLimit.ClothAlternativeColor2);
            agentBuildData.IsFemale(troopCharacter.IsFemale);

            var randomEquipmentElements = Equipment.GetRandomEquipmentElements(troopCharacter, !(Game.Current.GameType is MultiplayerGame), false, agentBuildData.AgentEquipmentSeed);

            var items = new Dictionary <ItemObject.ItemTypeEnum, ItemObject>();

            foreach (ItemObject.ItemTypeEnum itemtype in ((ItemObject.ItemTypeEnum[])Enum.GetValues(
                                                              typeof(ItemObject.ItemTypeEnum))).Skip(1))
            {
                switch (itemtype)
                {
                case ItemObject.ItemTypeEnum.Goods:
                case ItemObject.ItemTypeEnum.Pistol:
                case ItemObject.ItemTypeEnum.Bullets:
                case ItemObject.ItemTypeEnum.Musket:
                case ItemObject.ItemTypeEnum.Animal:
                case ItemObject.ItemTypeEnum.Banner:
                case ItemObject.ItemTypeEnum.Book:
                case ItemObject.ItemTypeEnum.ChestArmor:
                case ItemObject.ItemTypeEnum.Invalid:
                    continue;
                }
                items[itemtype] = ItemObject.All
                                  .Where(x => x.ItemType == itemtype).GetRandomElement();
            }

            randomEquipmentElements[EquipmentIndex.Weapon0] = new EquipmentElement(items[ItemObject.ItemTypeEnum.OneHandedWeapon], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Weapon1] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Shield], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Weapon2] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Bow], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Weapon3] = new EquipmentElement(items[ItemObject.ItemTypeEnum.Arrows], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Weapon4] = new EquipmentElement(items[ItemObject.ItemTypeEnum.TwoHandedWeapon], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Body]    = new EquipmentElement(items[ItemObject.ItemTypeEnum.BodyArmor], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Cape]    = new EquipmentElement(items[ItemObject.ItemTypeEnum.Cape], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Gloves]  = new EquipmentElement(items[ItemObject.ItemTypeEnum.HandArmor], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Head]    = new EquipmentElement(items[ItemObject.ItemTypeEnum.HeadArmor], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Leg]     = new EquipmentElement(items[ItemObject.ItemTypeEnum.LegArmor], new ItemModifier());
            randomEquipmentElements[EquipmentIndex.Horse]   = new EquipmentElement(items[ItemObject.ItemTypeEnum.Horse], new ItemModifier());
            agentBuildData.Equipment(randomEquipmentElements);
            agentBuildData.BodyProperties(BodyProperties.GetRandomBodyProperties(agentBuildData.AgentIsFemale, troopCharacter.GetBodyPropertiesMin(false), troopCharacter.GetBodyPropertiesMax(), (int)agentBuildData.AgentOverridenSpawnEquipment.HairCoverType, agentBuildData.AgentEquipmentSeed, troopCharacter.HairTags, troopCharacter.BeardTags, troopCharacter.TattooTags));
            Agent agent = this.Mission.SpawnAgent(agentBuildData, false, 0);

            agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent));
            agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed);
            return(agent);
        }
 public void SetTimersOfVictoryReactions(Agent agent, float minStartTime, float maxStartTime)
 {
     this._reactionsStarted = true;
     if (!agent.IsActive() || !agent.IsHuman || !agent.IsAIControlled)
     {
         return;
     }
     agent.AddComponent((AgentComponent) new VictoryComponent(agent, new RandomTimer(this.Mission.Time, minStartTime, maxStartTime)));
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Should take place after agent is built AND WieldInitialWeapons is invoked
        /// </summary>
        /// <param name="agent"></param>
        private void AfterAgentSpawned(Agent agent)
        {
            var battleAgent = new CustomBattleAgent(agent);

            if (_controller.AgentIsEligible(battleAgent) &&
                _controller.AgentGetsBanner(battleAgent))
            {
                agent.RemoveFromEquipment(_forbiddenWeapons);
                agent.AddComponent(new DropBannerComponent(agent, _settings, _dropBannerController));
            }
        }
        private void giveVampireComponentsToAgent(Agent agent)
        {
            // Remove default retreat component
            AgentComponent defaultRetreatComponent = agent.GetComponent <RetreatAgentComponent>();

            agent.RemoveComponentIfNotNull(defaultRetreatComponent);

            // Replace default morale component with vamp component
            AgentComponent moraleComponent = agent.GetComponent <MoraleAgentComponent>();

            agent.RemoveComponentIfNotNull(moraleComponent);
            agent.AddComponent(new VampireMoraleAgentComponent(agent));
        }
 private void AddComponents(Agent agent)
 {
     agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent));
     agent.AddComponent((AgentComponent) new AIBehaviorComponent(agent));
     if (agent.IsHuman)
     {
         agent.AddComponent((AgentComponent) new UseObjectAgentComponent(agent));
         agent.AddComponent((AgentComponent) new ItemPickupAgentComponent(agent));
     }
     agent.AddComponent((AgentComponent) new FormationCohesionComponent(agent));
     agent.AddComponent((AgentComponent) new FormationMovementComponent(agent));
     agent.AddComponent((AgentComponent) new FormationOrderComponent(agent));
 }
Ejemplo n.º 15
0
 protected internal override void OnAgentControllerChanged(Agent agent)
 {
     base.OnAgentControllerChanged(agent);
     if (agent.Controller == Agent.ControllerType.AI)
     {
         agent.AddComponent((AgentComponent) new FadeOutAgentComponent(agent));
     }
     else
     {
         if (agent.Controller != Agent.ControllerType.Player)
         {
             return;
         }
         agent.RemoveComponent((AgentComponent)agent.GetComponent <FadeOutAgentComponent>());
     }
 }
Ejemplo n.º 16
0
        /// <summary>
        /// Should take place after agent is built AND WieldInitialWeapons is invoked
        /// </summary>
        /// <param name="agent"></param>
        private void AfterAgentSpawned(Agent agent)
        {
            var campaignAgent = new CampaignAgent(agent);

            if (_controller.PolybianUnitExists(campaignAgent))
            {
                _controller.CountAgentForPolybian(campaignAgent);
                agent.SwitchShieldBanner(_controller.GetPolybianBannerForAgent(campaignAgent));
            }

            if (_controller.AgentIsEligible(campaignAgent) &&
                _controller.AgentGetsBanner(campaignAgent))
            {
                agent.RemoveFromEquipment(_forbiddenWeapons);
                agent.AddComponent(new DropBannerComponent(agent, _settings, _dropBannerController));
            }
        }
Ejemplo n.º 17
0
        public override void OnAgentCreated(Agent agent)
        {
            if (agent == null)
            {
                return;
            }
            if (agent.Character == null)
            {
                return;
            }

            if (agent != null && agent.IsHero)
            {
                SayGreen("{=received_bandage}{AGENT} received a bandage.".Replace("{AGENT}", agent.Name));
                agent.AddComponent(new BandageComponent(agent, config, mission));
            }
            base.OnAgentCreated(agent);
        }
        protected void SpawnBot(Team agentTeam, BasicCultureObject cultureLimit)
        {
            BasicCharacterObject troopCharacter = MultiplayerClassDivisions.GetMPHeroClasses(cultureLimit).ToList <MultiplayerClassDivisions.MPHeroClass>().GetRandomElement <MultiplayerClassDivisions.MPHeroClass>().TroopCharacter;
            MatrixFrame          spawnFrame     = this.SpawnComponent.GetSpawnFrame(agentTeam, troopCharacter.HasMount(), true);
            AgentBuildData       agentBuildData = new AgentBuildData(troopCharacter);

            agentBuildData.Team(agentTeam);
            agentBuildData.InitialFrame(spawnFrame);
            agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(troopCharacter));
            agentBuildData.EquipmentSeed(this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(troopCharacter));
            agentBuildData.ClothingColor1(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color : cultureLimit.ClothAlternativeColor);
            agentBuildData.ClothingColor2(agentTeam.Side == BattleSideEnum.Attacker ? cultureLimit.Color2 : cultureLimit.ClothAlternativeColor2);
            agentBuildData.IsFemale(troopCharacter.IsFemale);
            agentBuildData.Equipment(Equipment.GetRandomEquipmentElements(troopCharacter, !(Game.Current.GameType is MultiplayerGame), seed: agentBuildData.AgentEquipmentSeed));
            agentBuildData.BodyProperties(BodyProperties.GetRandomBodyProperties(agentBuildData.AgentIsFemale, troopCharacter.GetBodyPropertiesMin(), troopCharacter.GetBodyPropertiesMax(), (int)agentBuildData.AgentOverridenSpawnEquipment.HairCoverType, agentBuildData.AgentEquipmentSeed, troopCharacter.HairTags, troopCharacter.BeardTags, troopCharacter.TattooTags));
            Agent agent = this.Mission.SpawnAgent(agentBuildData);

            agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent));
            agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed);
        }
        public virtual void OnTick(float dt)
        {
            foreach (MissionPeer peer in VirtualPlayer.Peers <MissionPeer>())
            {
                if (peer.GetNetworkPeer().IsSynchronized&& peer.ControlledAgent == null && (peer.HasSpawnedAgentVisuals && !this.CanUpdateSpawnEquipment(peer)))
                {
                    BasicCultureObject basicCultureObject1 = MBObjectManager.Instance.GetObject <BasicCultureObject>(MultiplayerOptions.OptionType.CultureTeam1.GetStrValue());
                    BasicCultureObject basicCultureObject2 = MBObjectManager.Instance.GetObject <BasicCultureObject>(MultiplayerOptions.OptionType.CultureTeam2.GetStrValue());
                    MultiplayerClassDivisions.MPHeroClass heroClassForPeer = MultiplayerClassDivisions.GetMPHeroClassForPeer(peer);
                    MPPerkObject.MPOnSpawnPerkHandler     spawnPerkHandler = MPPerkObject.GetOnSpawnPerkHandler(peer);
                    int  num1  = 0;
                    bool flag1 = false;
                    if (MultiplayerOptions.OptionType.NumberOfBotsPerFormation.GetIntValue() > 0 && (this.GameMode.WarmupComponent == null || !this.GameMode.WarmupComponent.IsInWarmup))
                    {
                        num1 = MPPerkObject.GetTroopCount(heroClassForPeer, spawnPerkHandler);
                        foreach (MPPerkObject selectedPerk in (IEnumerable <MPPerkObject>)peer.SelectedPerks)
                        {
                            if (selectedPerk.HasBannerBearer)
                            {
                                flag1 = true;
                                break;
                            }
                        }
                    }
                    if (num1 > 0)
                    {
                        num1 = (int)((double)num1 * (double)this.GameMode.GetTroopNumberMultiplierForMissingPlayer(peer));
                    }
                    int num2 = num1 + (flag1 ? 2 : 1);
                    IEnumerable <(EquipmentIndex, EquipmentElement)> alternativeEquipments = spawnPerkHandler?.GetAlternativeEquipments(false);
                    for (int index = 0; index < num2; ++index)
                    {
                        bool isPlayer = index == 0;
                        BasicCharacterObject basicCharacterObject = isPlayer ? heroClassForPeer.HeroCharacter : (!flag1 || index != 1 ? heroClassForPeer.TroopCharacter : heroClassForPeer.BannerBearerCharacter);
                        AgentBuildData       agentBuildData       = new AgentBuildData(basicCharacterObject);
                        if (isPlayer)
                        {
                            agentBuildData.MissionPeer(peer);
                        }
                        else
                        {
                            agentBuildData.OwningMissionPeer(peer);
                        }
                        agentBuildData.VisualsIndex(index);
                        Equipment equipment = isPlayer ? basicCharacterObject.Equipment.Clone() : Equipment.GetRandomEquipmentElements(basicCharacterObject, false, seed: MBRandom.RandomInt());
                        IEnumerable <(EquipmentIndex, EquipmentElement)> valueTuples = isPlayer ? spawnPerkHandler?.GetAlternativeEquipments(true) : alternativeEquipments;
                        if (valueTuples != null)
                        {
                            foreach ((EquipmentIndex, EquipmentElement)valueTuple in valueTuples)
                            {
                                equipment[valueTuple.Item1] = valueTuple.Item2;
                            }
                        }
                        agentBuildData.Equipment(equipment);
                        agentBuildData.Team(peer.Team);
                        agentBuildData.Formation(peer.ControlledFormation);
                        agentBuildData.IsFemale(isPlayer ? peer.Peer.IsFemale : basicCharacterObject.IsFemale);
                        agentBuildData.TroopOrigin((IAgentOriginBase) new BasicBattleAgentOrigin(basicCharacterObject));
                        BasicCultureObject basicCultureObject3 = peer.Team == this.Mission.AttackerTeam ? basicCultureObject1 : basicCultureObject2;
                        if (isPlayer)
                        {
                            agentBuildData.BodyProperties(this.GetBodyProperties(peer, peer.Team == this.Mission.AttackerTeam ? basicCultureObject1 : basicCultureObject2));
                        }
                        else
                        {
                            agentBuildData.EquipmentSeed(this.MissionLobbyComponent.GetRandomFaceSeedForCharacter(basicCharacterObject, agentBuildData.AgentVisualsIndex));
                            agentBuildData.BodyProperties(BodyProperties.GetRandomBodyProperties(agentBuildData.AgentIsFemale, basicCharacterObject.GetBodyPropertiesMin(), basicCharacterObject.GetBodyPropertiesMax(), (int)agentBuildData.AgentOverridenSpawnEquipment.HairCoverType, agentBuildData.AgentEquipmentSeed, basicCharacterObject.HairTags, basicCharacterObject.BeardTags, basicCharacterObject.TattooTags));
                        }
                        agentBuildData.ClothingColor1(peer.Team == this.Mission.AttackerTeam ? basicCultureObject3.Color : basicCultureObject3.ClothAlternativeColor);
                        agentBuildData.ClothingColor2(peer.Team == this.Mission.AttackerTeam ? basicCultureObject3.Color2 : basicCultureObject3.ClothAlternativeColor2);
                        Banner banner = new Banner(peer.Peer.BannerCode, peer.Team.Color, peer.Team.Color2);
                        agentBuildData.Banner(banner);
                        if (peer.ControlledFormation != null && peer.ControlledFormation.Banner == null)
                        {
                            peer.ControlledFormation.Banner = banner;
                        }
                        SpawnComponent   spawnComponent   = this.SpawnComponent;
                        Team             team             = peer.Team;
                        EquipmentElement equipmentElement = equipment[EquipmentIndex.ArmorItemEndSlot];
                        int         num3       = equipmentElement.Item != null ? 1 : 0;
                        int         num4       = peer.SpawnCountThisRound == 0 ? 1 : 0;
                        MatrixFrame spawnFrame = spawnComponent.GetSpawnFrame(team, num3 != 0, num4 != 0);
                        if (!spawnFrame.IsIdentity)
                        {
                            MatrixFrame matrixFrame       = spawnFrame;
                            MatrixFrame?agentInitialFrame = agentBuildData.AgentInitialFrame;
                            if ((agentInitialFrame.HasValue ? (matrixFrame != agentInitialFrame.GetValueOrDefault() ? 1 : 0) : 1) != 0)
                            {
                                agentBuildData.InitialFrame(spawnFrame);
                            }
                        }
                        if (peer.ControlledAgent != null && !isPlayer)
                        {
                            MatrixFrame frame = peer.ControlledAgent.Frame;
                            frame.rotation.OrthonormalizeAccordingToForwardAndKeepUpAsZAxis();
                            MatrixFrame matrixFrame = frame;
                            matrixFrame.origin -= matrixFrame.rotation.f.NormalizedCopy() * 3.5f;
                            Mat3 rotation = matrixFrame.rotation;
                            rotation.MakeUnit();
                            equipmentElement = basicCharacterObject.Equipment[EquipmentIndex.ArmorItemEndSlot];
                            bool flag2 = !equipmentElement.IsEmpty;
                            int  num5  = Math.Min(num2, 10);
                            List <WorldFrame> formationCreation = Formation.GetFormationFramesForBeforeFormationCreation((float)((double)num5 * (double)Formation.GetDefaultUnitDiameter(flag2) + (double)(num5 - 1) * (double)Formation.GetDefaultMinimumInterval(flag2)), num2, flag2, new WorldPosition(Mission.Current.Scene, matrixFrame.origin), rotation);
                            agentBuildData.InitialFrame(formationCreation[index - 1].ToGroundMatrixFrame());
                        }
                        Agent agent = this.Mission.SpawnAgent(agentBuildData, true);
                        agent.AddComponent((AgentComponent) new MPPerksAgentComponent(agent));
                        agent.MountAgent?.UpdateAgentProperties();
                        float num6 = spawnPerkHandler != null?spawnPerkHandler.GetHitpoints(isPlayer) : 0.0f;

                        agent.HealthLimit += num6;
                        agent.Health       = agent.HealthLimit;
                        agent.AddComponent((AgentComponent) new AgentAIStateFlagComponent(agent));
                        if (!isPlayer)
                        {
                            agent.SetWatchState(AgentAIStateFlagComponent.WatchState.Alarmed);
                        }
                        agent.WieldInitialWeapons();
                        if (isPlayer)
                        {
                            Action <MissionPeer> spawnedFromVisuals = this.OnPeerSpawnedFromVisuals;
                            if (spawnedFromVisuals != null)
                            {
                                spawnedFromVisuals(peer);
                            }
                        }
                    }
                    ++peer.SpawnCountThisRound;
                    Action <MissionPeer> spawnedFromVisuals1 = this.OnAllAgentsFromPeerSpawnedFromVisuals;
                    if (spawnedFromVisuals1 != null)
                    {
                        spawnedFromVisuals1(peer);
                    }
                    this.AgentVisualSpawnComponent.RemoveAgentVisuals(peer, true);
                    MPPerkObject.GetPerkHandler(peer)?.OnEvent(MPPerkCondition.PerkEventFlags.SpawnEnd);
                }
            }
            if (this.IsSpawningEnabled || !this.IsRoundInProgress())
            {
                return;
            }
            if ((double)this.SpawningDelayTimer >= (double)this.SpawningEndDelay && !this._hasCalledSpawningEnded)
            {
                Mission.Current.AllowAiTicking = true;
                if (this.OnSpawningEnded != null)
                {
                    this.OnSpawningEnded();
                }
                this._hasCalledSpawningEnded = true;
            }
            this.SpawningDelayTimer += dt;
        }
 public override void OnAgentCreated(Agent agent)
 {
     base.OnAgentCreated(agent);
     agent.AddComponent((AgentComponent) new MoraleAgentComponent(agent));
     agent.AddComponent((AgentComponent) new RetreatAgentComponent(agent));
 }
Ejemplo n.º 21
0
 public void OnAgentBuild(Agent agent, Banner banner)
 {
     agent.AddComponent(new CommandSystemAgentComponent(agent));
 }