private void MissileFireOnToggleTeam(MissileFire wm, BDTeam team) { if (_showGui) { UpdateList(); } }
protected virtual void OnToggleTeam(MissileFire mf, BDTeam team) { if (mf.vessel == vessel || (commandLeader && commandLeader.vessel == mf.vessel)) { ReleaseCommand(); } }
private void MissileFireOnToggleTeam(MissileFire wm, BDTeam team) { if (BDTISettings.TEAMICONS) { UpdateList(); } }
void Awake() { if (!vessel) { vessel = GetComponent <Vessel>(); } if (!vessel) { //Debug.Log ("[BDArmory]: TargetInfo was added to a non-vessel"); Destroy(this); return; } //destroy this if a target info is already attached to the vessel foreach (var otherInfo in vessel.gameObject.GetComponents <TargetInfo>()) { if (otherInfo != this) { Destroy(this); return; } } Team = null; var mf = VesselModuleRegistry.GetMissileFire(vessel, true); if (mf != null) { Team = mf.Team; weaponManager = mf; } else { var ml = VesselModuleRegistry.GetMissileBase(vessel, true); if (ml != null) { isMissile = true; MissileBaseModule = ml; Team = ml.Team; } } vessel.OnJustAboutToBeDestroyed += AboutToBeDestroyed; //add delegate to peace enable event BDArmorySetup.OnPeaceEnabled += OnPeaceEnabled; //lifeRoutine = StartCoroutine(LifetimeRoutine()); // TODO: CHECK BEHAVIOUR AND SIDE EFFECTS! if (!isMissile && Team != null) { GameEvents.onVesselPartCountChanged.Add(VesselModified); //massRoutine = StartCoroutine(MassRoutine()); // TODO: CHECK BEHAVIOUR AND SIDE EFFECTS! } UpdateTargetPartList(); GameEvents.onVesselDestroy.Add(CleanFriendliesEngaging); }
public int NumFriendliesEngaging(BDTeam team) { if (friendliesEngaging.TryGetValue(team, out var friendlies)) { friendlies.RemoveAll(item => item == null); return(friendlies.Count); } return(0); }
public Dictionary <BDTeam, List <GPSTargetInfo> > Load() { var value = new Dictionary <BDTeam, List <GPSTargetInfo> >(); for (int i = 0; i < Team.Count; ++i) { value.Add(BDTeam.Get(Team[i]), JsonUtility.FromJson <SerializableGPSList>(Data[i]).Load()); } return(value); }
public static void AddTarget(TargetInfo target, BDTeam reportingTeam) { if (target.Team == null) { return; } if (!BDATargetManager.TargetList(reportingTeam).Contains(target)) { BDATargetManager.TargetList(reportingTeam).Add(target); } }
public static List <TargetInfo> TargetList(BDTeam team) { if (TargetDatabase.TryGetValue(team, out List <TargetInfo> database)) { return(database); } var newList = new List <TargetInfo>(); TargetDatabase.Add(team, newList); return(newList); }
public static List <GPSTargetInfo> GPSTargetList(BDTeam team) { if (team == null) { throw new ArgumentNullException("team"); } if (GPSTargets.TryGetValue(team, out List <GPSTargetInfo> database)) { return(database); } var newList = new List <GPSTargetInfo>(); GPSTargets.Add(team, newList); return(newList); }
void Update() { if (!vessel) { AboutToBeDestroyed(); } else { if ((vessel.vesselType == VesselType.Debris) && (weaponManager == null)) { BDATargetManager.RemoveTarget(this); Team = null; } } }
public bool ProcessMessage(MissileFireEventArgs message) { if (message == null) { return(false); } Vessel vessel = FlightGlobals.VesselsLoaded.FirstOrDefault(v => v.id == message.VesselId); if (vessel == null || vessel.packed) { if (!LunaMultiplayerSystem.missileMessagePending.Contains(message)) { LunaMultiplayerSystem.missileMessagePending.Enqueue(message); } return(false); } else { if (!vessel.loaded) { vessel.Load(); } } MissileBase missile = vessel.FindPartModuleImplementing <MissileBase>(); if (missile == null) { return(false); } if (BDArmorySettings.MULTIPLAYER_VESSELS_OWNED.Contains(message.VesselId)) { return(true); } if (missile.SourceVessel != null && BDArmorySettings.MULTIPLAYER_VESSELS_OWNED.Contains(missile.SourceVessel.id)) { return(true); } missile.Team = BDTeam.Get(message.TeamName); missile.ActivateMissileMultiplayer(); return(true); }
public TargetSignatureData(Vector3 _velocity, Vector3 _position, Vector3 _acceleration, bool _exists, float _signalStrength) { velocity = _velocity; geoPos = VectorUtils.WorldPositionToGeoCoords(_position, FlightGlobals.currentMainBody); acceleration = _acceleration; exists = _exists; timeAcquired = Time.time; signalStrength = _signalStrength; targetInfo = null; vesselJammer = null; Team = null; pingPosition = Vector2.zero; orbital = false; orbit = null; lockedByRadar = null; vessel = null; }
public TargetSignatureData(CMFlare flare, float _signalStrength) { velocity = flare.velocity; geoPos = VectorUtils.WorldPositionToGeoCoords(flare.transform.position, FlightGlobals.currentMainBody); exists = true; acceleration = Vector3.zero; timeAcquired = Time.time; signalStrength = _signalStrength; targetInfo = null; vesselJammer = null; Team = null; pingPosition = Vector2.zero; orbital = false; orbit = null; lockedByRadar = null; vessel = null; }
public TargetSignatureData(Vessel v, float _signalStrength) { orbital = v.InOrbit(); orbit = v.orbit; timeAcquired = Time.time; vessel = v; velocity = v.Velocity(); geoPos = VectorUtils.WorldPositionToGeoCoords(v.CoM, v.mainBody); acceleration = v.acceleration_immediate; exists = true; signalStrength = _signalStrength; targetInfo = v.gameObject.GetComponent <TargetInfo>(); // vessel never been picked up on radar before: create new targetinfo record if (targetInfo == null) { targetInfo = v.gameObject.AddComponent <TargetInfo>(); } Team = null; if (targetInfo) // Always true, as we just set it? { Team = targetInfo.Team; } else { List <MissileFire> .Enumerator mf = v.FindPartModulesImplementing <MissileFire>().GetEnumerator(); while (mf.MoveNext()) { Team = mf.Current.Team; break; } mf.Dispose(); } vesselJammer = v.gameObject.GetComponent <VesselECMJInfo>(); pingPosition = Vector2.zero; lockedByRadar = null; }
public TargetSignatureData(Vessel v, float _signalStrength) { orbital = v.InOrbit(); orbit = v.orbit; timeAcquired = Time.time; vessel = v; velocity = v.Velocity(); geoPos = VectorUtils.WorldPositionToGeoCoords(v.CoM, v.mainBody); acceleration = v.acceleration_immediate; exists = true; signalStrength = _signalStrength; targetInfo = v.gameObject.GetComponent <TargetInfo>(); // vessel never been picked up on radar before: create new targetinfo record if (targetInfo == null) { targetInfo = v.gameObject.AddComponent <TargetInfo>(); } Team = null; if (targetInfo) // Always true, as we just set it? { Team = targetInfo.Team; } else { var mf = VesselModuleRegistry.GetMissileFire(v, true); if (mf != null) { Team = mf.Team; } } vesselJammer = v.gameObject.GetComponent <VesselECMJInfo>(); pingPosition = Vector2.zero; lockedByRadar = null; }
void Update() { if (!vessel) { AboutToBeDestroyed(); } else { if ((vessel.vesselType == VesselType.Debris) && (weaponManager == null)) { BDATargetManager.RemoveTarget(this); Team = null; } } if (HighLogic.LoadedSceneIsFlight) { if (BDArmorySetup.windowSettingsEnabled) { UpdateTargetPartList(); } } }
public bool ProcessMessage(VesselTeamChangeEventArgs message) { if (message == null) { return(false); } Vessel vessel = FlightGlobals.VesselsLoaded.FirstOrDefault(v => v.id == message.VesselId); if (vessel == null || vessel.packed) { return(false); } List <MissileFire> weaponManagerList = vessel.FindPartModulesImplementing <MissileFire>(); foreach (var weaponManager in weaponManagerList) { Debug.Log($"VesselTeamChangeMessageHandler.ProcessMessage for {message.VesselId}"); weaponManager.SetTeam(BDTeam.Get(message.Team), false); } return(true); }
private void OnGUI() { if (_ready) { if (_showGui && BDArmorySetup.GAME_UI_ENABLED) { SetNewHeight(_windowHeight); // this Rect initialization ensures any save issues with height or width of the window are resolved BDArmorySetup.WindowRectVesselSwitcher = new Rect(BDArmorySetup.WindowRectVesselSwitcher.x, BDArmorySetup.WindowRectVesselSwitcher.y, _windowWidth, _windowHeight); BDArmorySetup.WindowRectVesselSwitcher = GUI.Window(10293444, BDArmorySetup.WindowRectVesselSwitcher, WindowVesselSwitcher, Localizer.Format("#LOC_BDArmory_BDAVesselSwitcher_Title"),//"BDA Vessel Switcher" BDArmorySetup.BDGuiSkin.window); Misc.Misc.UpdateGUIRect(BDArmorySetup.WindowRectVesselSwitcher, _guiCheckIndex); } else { Misc.Misc.UpdateGUIRect(new Rect(), _guiCheckIndex); } if (_teamSwitchDirty) { if (_wmToSwitchTeam) { _wmToSwitchTeam.NextTeam(); } else { // if no team is specified toggle between FFA and all friends // FFA button starts timer running //ResetSpeeds(); _freeForAll = !_freeForAll; char T = 'A'; // switch everyone to their own teams var allPilots = new List <MissileFire>(); using (var teamManagers = weaponManagers.GetEnumerator()) while (teamManagers.MoveNext()) { using (var wm = teamManagers.Current.Value.GetEnumerator()) while (wm.MoveNext()) { if (wm.Current == null) { continue; } allPilots.Add(wm.Current); } } foreach (var pilot in allPilots) { Debug.Log("[BDArmory] assigning " + pilot.vessel.GetDisplayName() + " to team " + T.ToString()); pilot.SetTeam(BDTeam.Get(T.ToString())); if (_freeForAll) { T++; } } } _teamSwitchDirty = false; _wmToSwitchTeam = null; } } }
void RemoveTarget(TargetInfo target, BDTeam team) { TargetDatabase[team].Remove(target); }
void OnToggleTeam(MissileFire mf, BDTeam team) { RefreshFriendlies(); RefreshWingmen(); }
private void TeamSelectorWindow(int id) { height = margin; // Team input field newTeamName = GUI.TextField(new Rect(margin, margin, width - buttonGap - 2 * margin - newTeanButtonWidth, buttonHeight), newTeamName, 30); // New team button Rect newTeamButtonRect = new Rect(width - margin - newTeanButtonWidth, height, newTeanButtonWidth, buttonHeight); if (GUI.Button(newTeamButtonRect, Localizer.Format("#LOC_BDArmory_Generic_New"), BDArmorySetup.BDGuiSkin.button))//"New" { if (!string.IsNullOrEmpty(newTeamName.Trim())) { targetWeaponManager.SetTeam(BDTeam.Get(newTeamName.Trim())); open = false; } } height += buttonHeight; // Scrollable list of existing teams scrollable = (BDArmorySetup.Instance.Teams.Count * (buttonHeight + buttonGap) * 2 > Screen.height); if (scrollable) { scrollPosition = GUI.BeginScrollView( new Rect(margin, height, width - margin * 2 + scrollWidth, Screen.height / 2), scrollPosition, new Rect(margin, height, width - margin * 2, BDArmorySetup.Instance.Teams.Count * (buttonHeight + buttonGap)), false, true); } using (var teams = BDArmorySetup.Instance.Teams.Values.GetEnumerator()) while (teams.MoveNext()) { if (teams.Current == null || !teams.Current.Name.ToLowerInvariant().StartsWith(newTeamName.ToLowerInvariant().Trim())) { continue; } height += buttonGap; Rect buttonRect = new Rect(margin, height, width - 2 * margin, buttonHeight); GUIStyle buttonStyle = (teams.Current == targetWeaponManager.Team) ? BDArmorySetup.BDGuiSkin.box : BDArmorySetup.BDGuiSkin.button; if (GUI.Button(buttonRect, teams.Current.Name, buttonStyle)) { targetWeaponManager.SetTeam(teams.Current); open = false; } height += buttonHeight; } if (scrollable) { GUI.EndScrollView(); } // Buttons if (Event.current.type == EventType.KeyUp) { if ((Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter) && !string.IsNullOrEmpty(newTeamName.Trim())) { targetWeaponManager.SetTeam(BDTeam.Get(newTeamName.Trim())); open = false; } else if (Event.current.keyCode == KeyCode.Escape) { open = false; } } height += margin; BDGUIUtils.RepositionWindow(ref window); BDGUIUtils.UseMouseEventInRect(window); }
void Awake() { if (!vessel) { vessel = GetComponent <Vessel>(); } if (!vessel) { //Debug.Log ("[BDArmory]: TargetInfo was added to a non-vessel"); Destroy(this); return; } //destroy this if a target info is already attached to the vessel IEnumerator otherInfo = vessel.gameObject.GetComponents <TargetInfo>().GetEnumerator(); while (otherInfo.MoveNext()) { if ((object)otherInfo.Current != this) { Destroy(this); return; } } Team = null; bool foundMf = false; List <MissileFire> .Enumerator mf = vessel.FindPartModulesImplementing <MissileFire>().GetEnumerator(); while (mf.MoveNext()) { foundMf = true; Team = mf.Current.Team; weaponManager = mf.Current; break; } mf.Dispose(); if (!foundMf) { List <MissileBase> .Enumerator ml = vessel.FindPartModulesImplementing <MissileBase>().GetEnumerator(); while (ml.MoveNext()) { isMissile = true; MissileBaseModule = ml.Current; Team = ml.Current.Team; break; } ml.Dispose(); } vessel.OnJustAboutToBeDestroyed += AboutToBeDestroyed; //add delegate to peace enable event BDArmorySetup.OnPeaceEnabled += OnPeaceEnabled; //lifeRoutine = StartCoroutine(LifetimeRoutine()); // TODO: CHECK BEHAVIOUR AND SIDE EFFECTS! if (!isMissile && Team != null) { GameEvents.onVesselPartCountChanged.Add(VesselModified); //massRoutine = StartCoroutine(MassRoutine()); // TODO: CHECK BEHAVIOUR AND SIDE EFFECTS! } }