示例#1
0
        private Vehicle CreatePathFindingVehicle()
        {
            GameInstance    game        = UnityGameInstance.BattleTechGame;
            CombatGameState combatState = game.Combat;
            string          spawnerId   = Guid.NewGuid().ToString();
            string          uniqueId    = $"{spawnerId}.9999999998";

            HeraldryDef heraldryDef = null;

            combatState.DataManager.Heraldries.TryGet(HeraldryDef.HeraldyrDef_SinglePlayerSkirmishPlayer1, out heraldryDef);

            VehicleDef vehicleDef = null;

            combatState.DataManager.VehicleDefs.TryGet("vehicledef_DEMOLISHER", out vehicleDef);

            PilotDef pilotDef = null;

            combatState.DataManager.PilotDefs.TryGet("pilot_default", out pilotDef);
            Vehicle vehicle = new Vehicle(vehicleDef, pilotDef, new TagSet(), uniqueId, combatState, spawnerId, heraldryDef);

            string teamId = TeamUtils.GetTeamGuid("NeutralToAll");
            Team   team   = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(teamId);

            AccessTools.Field(typeof(AbstractActor), "_team").SetValue(vehicle, team);
            AccessTools.Field(typeof(AbstractActor), "_teamId").SetValue(vehicle, teamId);

            return(vehicle);
        }
示例#2
0
        private Mech CreatePathFinderMech()
        {
            GameInstance    game        = UnityGameInstance.BattleTechGame;
            CombatGameState combatState = game.Combat;
            string          spawnerId   = Guid.NewGuid().ToString();
            string          uniqueId    = $"{spawnerId}.9999999999";

            HeraldryDef heraldryDef = null;

            combatState.DataManager.Heraldries.TryGet(HeraldryDef.HeraldyrDef_SinglePlayerSkirmishPlayer1, out heraldryDef);

            MechDef mechDef = null;

            combatState.DataManager.MechDefs.TryGet("mechdef_spider_SDR-5V", out mechDef);

            PilotDef pilotDef = null;

            combatState.DataManager.PilotDefs.TryGet("pilot_default", out pilotDef);
            Mech mech = new Mech(mechDef, pilotDef, new TagSet(), uniqueId, combatState, spawnerId, heraldryDef);

            string teamId = TeamUtils.GetTeamGuid("NeutralToAll");
            Team   team   = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(teamId);

            AccessTools.Field(typeof(AbstractActor), "_team").SetValue(mech, team);
            AccessTools.Field(typeof(AbstractActor), "_teamId").SetValue(mech, teamId);

            return(mech);
        }
        public override void Trigger(MessageCenterMessage inMessage, string triggeringName)
        {
            Main.LogDebug($"[SetTeamByLanceSpawnerGuid] Setting Team '{Team}' with Spawner Guid '{LanceSpawnerGuid}'");
            LanceSpawnerGameLogic spawnerGameLogic = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <LanceSpawnerGameLogic>(LanceSpawnerGuid);
            Lance lance = spawnerGameLogic.GetLance();
            List <AbstractActor> lanceUnits = spawnerGameLogic.GetLance().GetLanceUnits();

            Main.LogDebug($"[SetTeamByLanceSpawnerGuid] Found '{lanceUnits.Count}' lance units");
            Team oldTeam = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(spawnerGameLogic.teamDefinitionGuid);
            Team newTeam = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(TeamUtils.GetTeamGuid(Team));

            spawnerGameLogic.teamDefinitionGuid = TeamUtils.GetTeamGuid(Team);
            spawnerGameLogic.encounterTags.Remove(oldTeam.Name);
            spawnerGameLogic.encounterTags.Add(newTeam.Name);

            oldTeam.lances.Remove(lance);
            newTeam.lances.Add(lance);

            foreach (AbstractActor actor in lanceUnits)
            {
                oldTeam.RemoveUnit(actor);
                actor.AddToTeam(newTeam);
                newTeam.AddUnit(actor);

                actor.EncounterTags.Remove(oldTeam.Name);
                actor.EncounterTags.Add(newTeam.Name);

                if (ApplyTags != null)
                {
                    actor.EncounterTags.AddRange(ApplyTags);
                }

                CombatHUDInWorldElementMgr inworldElementManager = GameObject.Find("uixPrfPanl_HUD(Clone)").GetComponent <CombatHUDInWorldElementMgr>();
                if (oldTeam.GUID == TeamUtils.NEUTRAL_TO_ALL_TEAM_ID)
                {
                    AccessTools.Method(typeof(CombatHUDInWorldElementMgr), "AddInWorldActorElements").Invoke(inworldElementManager, new object[] { actor });
                }
                else if (newTeam.GUID == TeamUtils.NEUTRAL_TO_ALL_TEAM_ID)
                {
                    AccessTools.Method(typeof(CombatHUDInWorldElementMgr), "RemoveInWorldUI").Invoke(inworldElementManager, new object[] { actor.GUID });
                }

                CombatantSwitchedTeams message = new CombatantSwitchedTeams(actor.GUID, newTeam.GUID);
                this.combat.MessageCenter.PublishMessage(message);

                LazySingletonBehavior <FogOfWarView> .Instance.FowSystem.Rebuild();
            }

            if (this.AlertLance)
            {
                lance.BroadcastAlert();
            }
        }
        public override void Trigger(MessageCenterMessage inMessage, string triggeringName)
        {
            Main.LogDebug($"[SetTeamShareVisionWithAlliesResult] Setting Team '{Team}' to share vision with allies '{ShareVision}'");
            Team team = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(TeamUtils.GetTeamGuid(Team));

            // Visibility stuff might be a bit too early here

            /*
             * team.VisibilityCache = null;
             * AccessTools.Property(typeof(Team), "ShareVisionWithAlliance").SetValue(team, ShareVision);
             * AccessTools.Method(typeof(Team), "InitVisibilityCaches").Invoke(team, null);
             *
             * foreach (Lance lance in team.lances) {
             * AccessTools.Method(typeof(Lance), "InitVisibilityCache").Invoke(lance, null);
             * }
             */

            /*
             * Main.LogDebug($"[SetTeamShareVisionWithAlliesResult] Units in team are: '{team.units.Count}'");
             * team.units.ForEach(unit => {
             * Main.LogDebug($"[SetTeamShareVisionWithAlliesResult] Hiding unit '{unit.DisplayName}'");
             * unit.OnPlayerVisibilityChanged(VisibilityLevel.None);
             * });
             */
        }
        public override void Trigger(MessageCenterMessage inMessage, string triggeringName)
        {
            Main.LogDebug($"[SetTeamByTagResult] Setting Team '{Team}' with tags '{String.Concat(Tags)}'");
            List <ICombatant> combatants = ObjectiveGameLogic.GetTaggedCombatants(UnityGameInstance.BattleTechGame.Combat, new TagSet(Tags));

            Main.LogDebug($"[SetTeamByTagResult] Found '{combatants.Count}' combatants");
            Team  newTeam  = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(TeamUtils.GetTeamGuid(Team));
            Lance newLance = new Lance(newTeam);

            newLance.team = newTeam;

            foreach (ICombatant combatant in combatants)
            {
                if (combatant is AbstractActor)
                {
                    /*
                     * AbstractActor actor = combatant as AbstractActor;
                     *
                     * actor.lance.RemoveUnitGUID(actor.GUID);
                     * actor.RemoveFromLance();
                     * actor.team.RemoveUnit(actor);
                     *
                     * actor.AddToTeam(newTeam);
                     * newLance.AddUnitGUID(actor.GUID);
                     * actor.AddToLance(newLance);
                     * newLance.team.AddUnit(actor);
                     *
                     * actor.team.lances.Add(newLance);
                     */
                    Main.Logger.LogError($"[SetTeamByTagResult] Using this result with AbstractActors isn't supported yet");
                }
                else
                {
                    combatant.RemoveFromTeam();
                    combatant.AddToTeam(newTeam);
                }

                if (ApplyTags != null)
                {
                    combatant.EncounterTags.AddRange(ApplyTags);
                }

                CombatantSwitchedTeams message = new CombatantSwitchedTeams(combatant.GUID, newTeam.GUID);
                this.combat.MessageCenter.PublishMessage(message);

                LazySingletonBehavior <FogOfWarView> .Instance.FowSystem.Rebuild();
            }

            if (newLance.unitGuids.Count > 0)
            {
                newTeam.lances.Add(newLance);
                UnityGameInstance.BattleTechGame.Combat.ItemRegistry.AddItem(newLance);

                if (this.AlertLance)
                {
                    newLance.BroadcastAlert();
                }
            }
        }
示例#6
0
        private void SetTeam(ICombatant combatant)
        {
            Main.LogDebug($"[SetUnitsInRegionToBeTaggedObjectiveTargetsResult] Setting Team '{Team}' for '{combatant.GameRep.name} - {combatant.DisplayName}'");
            Team oldTeam = combatant.team;
            Team newTeam = UnityGameInstance.BattleTechGame.Combat.ItemRegistry.GetItemByGUID <Team>(TeamUtils.GetTeamGuid(Team));

            if (Type == "Building")
            {
                oldTeam.RemoveBuilding((BattleTech.Building)combatant);
                newTeam.AddCombatant(combatant);
            }
            else
            {
                Main.LogDebug($"[SetUnitsInRegionToBeTaggedObjectiveTargetsResult] Setting Team '{Type}' Not Yet Supported. Use 'SetTeamByLanceSpawnerGuid'");
            }

            /*
             * // Dumped this here for a visibility test after OnEncounterBegin
             * Main.LogDebug($"[SetUnitsInRegionToBeTaggedObjectiveTargetsResult] Units in team are: '{newTeam.units.Count}'");
             * newTeam.units.ForEach(unit => {
             * Main.LogDebug($"[SetUnitsInRegionToBeTaggedObjectiveTargetsResult] Hiding unit '{unit.DisplayName}'");
             * unit.OnPlayerVisibilityChanged(VisibilityLevel.None);
             * });
             *
             * List<ICombatant> allLivingCombatants = UnityGameInstance.BattleTechGame.Combat.GetAllLivingCombatants();
             * AccessTools.Method(typeof(TurnDirector), "RebuildVisCaches").Invoke(UnityGameInstance.BattleTechGame.Combat.TurnDirector, new object[] { allLivingCombatants });
             */
        }