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