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); }
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(); } } }
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 }); */ }