Ejemplo n.º 1
0
        /// <summary>
        /// The registry needs to know which team the locally
        /// playing player is on, as some unit lists are split
        /// on an ally/enemy basis.
        /// <para></para>
        /// Do not call outside of MatchSession.
        /// </summary>
        /// <param name="newTeam"></param>
        public void UpdateTeamBelonging(Team newTeam)
        {
            if (_localTeam == newTeam)
            {
                return;
            }

            _localTeam = newTeam;

            // Refresh ally/enemy-based lists:
            AllyUnits  = UnitsByTeam[_localTeam];
            EnemyUnits = EnemiesByTeam[_localTeam];

            AllyVisionComponents.Clear();
            EnemyVisionComponents.Clear();

            foreach (UnitDispatcher unit in Units)
            {
                if (_localTeam == unit.Platoon.Team)
                {
                    AllyVisionComponents.Add(unit.VisionComponent);
                }
                else
                {
                    EnemyVisionComponents.Add(unit.VisionComponent);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Must notify the registry every time a
        /// (real, active) unit is created.
        /// <para></para>
        /// Do not call outside of MatchSession.
        /// </summary>
        /// <param name="unit"></param>
        public void RegisterUnitBirth(UnitDispatcher unit)
        {
            Units.Add(unit);

            Team unitTeam = unit.Platoon.Team;

            UnitsByTeam[unitTeam].Add(unit);

            // Add unit as enemy to all other teams:
            foreach (var pair in EnemiesByTeam)
            {
                if (pair.Key != unitTeam)
                {
                    pair.Value.Add(unit);
                }
            }

            VisionComponent visibleBehavior = unit.VisionComponent;

            if (unitTeam == _localTeam)
            {
                AllyVisionComponents.Add(visibleBehavior);
            }
            else
            {
                EnemyVisionComponents.Add(visibleBehavior);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Must notify the registry every time a
        /// (real, active) unit is removed.
        /// <para></para>
        /// Do not call outside of MatchSession.
        /// </summary>
        /// <param name="unit"></param>
        public void RegisterUnitDeath(UnitDispatcher unit)
        {
            Units.Remove(unit);

            Team unitTeam = unit.Platoon.Team;

            UnitsByTeam[unitTeam].Remove(unit);
            foreach (var pair in EnemiesByTeam)
            {
                if (pair.Key != unitTeam)
                {
                    pair.Value.Remove(unit);
                }
            }

            VisionComponent visionComponent = unit.VisionComponent;

            if (unitTeam == _localTeam)
            {
                AllyVisionComponents.Remove(visionComponent);
            }
            else
            {
                EnemyVisionComponents.Remove(visionComponent);
            }
        }