Exemple #1
0
 private void MissileFireOnToggleTeam(MissileFire wm, BDTeam team)
 {
     if (_showGui)
     {
         UpdateList();
     }
 }
Exemple #2
0
 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);
        }
Exemple #5
0
 public int NumFriendliesEngaging(BDTeam team)
 {
     if (friendliesEngaging.TryGetValue(team, out var friendlies))
     {
         friendlies.RemoveAll(item => item == null);
         return(friendlies.Count);
     }
     return(0);
 }
Exemple #6
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);
            }
Exemple #7
0
 public static void AddTarget(TargetInfo target, BDTeam reportingTeam)
 {
     if (target.Team == null)
     {
         return;
     }
     if (!BDATargetManager.TargetList(reportingTeam).Contains(target))
     {
         BDATargetManager.TargetList(reportingTeam).Add(target);
     }
 }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
 void Update()
 {
     if (!vessel)
     {
         AboutToBeDestroyed();
     }
     else
     {
         if ((vessel.vesselType == VesselType.Debris) && (weaponManager == null))
         {
             BDATargetManager.RemoveTarget(this);
             Team = null;
         }
     }
 }
Exemple #11
0
        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;
        }
Exemple #15
0
        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;
        }
Exemple #16
0
 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();
         }
     }
 }
Exemple #17
0
        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);
        }
Exemple #18
0
        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;
                }
            }
        }
Exemple #19
0
 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);
        }
Exemple #22
0
        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!
            }
        }