private void AddUnitEnemy(Unit unit) { var data = new IntelUnit(unit); if (GameConstants.IsWorker(unit.UnitType)) { if (WorkersEnemy.ContainsKey(unit.Tag)) { WorkersEnemy[unit.Tag].DataSource = unit; } else { WorkersEnemy.Add(unit.Tag, data); Handler.Handle(Case.WorkerAddedEnemy, data); } } else if (IsBuilding(unit.UnitType)) { if (StructureEnemy.ContainsKey(unit.Tag)) { StructureEnemy[unit.Tag].DataSource = unit; } else { StructureEnemy.Add(unit.Tag, data); Handler.Handle(Case.StructureAddedEnemy, data); } } else // must be unit { if (UnitsEnemy.ContainsKey(unit.Tag)) { UnitsEnemy[unit.Tag].DataSource = unit; } else { UnitsEnemy.Add(unit.Tag, data); Handler.Handle(Case.UnitAddedEnemy, data); } } if (data.DisplayType == DisplayType.Hidden) { Handler.Handle(Case.AddedHiddenEnemy, data); } }
// Method required because snapshots change ID when visible... private void UpdateSnapshotNeutral(Dictionary <ulong, IntelUnit> dictionary, Unit unit) { if (dictionary.ContainsKey(unit.Tag)) { dictionary[unit.Tag].DataSource = unit; return; } IntelUnit data = dictionary.Where(p => p.Value.Pos.X == unit.Pos.X && p.Value.Pos.Y == unit.Pos.Y).Select(p => p.Value).FirstOrDefault(); if (data == null) { throw new System.ArgumentNullException($"Could not find neutral unit ({unit.UnitType} at X:{unit.Pos.X} Y:{unit.Pos.Y})"); } dictionary.Remove(data.Tag); data.DataSource = unit; dictionary.Add(data.Tag, data); }
/// <summary> /// Notify listeners and add/update stored allied units. /// </summary> /// <param name="unit">Unit where Alliance == Self</param> private void AddUnitSelf(Unit unit) { if (GameConstants.IsWorker(unit.UnitType)) { if (WorkersSelf.ContainsKey(unit.Tag)) { WorkersSelf[unit.Tag].DataSource = unit; } else { var data = new IntelUnit(unit); WorkersSelf.Add(unit.Tag, data); Handler.Handle(Case.WorkerAddedSelf, data); } } else if (IsBuilding(unit.UnitType)) { if (StructuresSelf.ContainsKey(unit.Tag)) { StructuresSelf[unit.Tag].DataSource = unit; } else { var data = new IntelUnit(unit); StructuresSelf.Add(unit.Tag, data); Handler.Handle(Case.StructureAddedSelf, data); } } else // must be unit { if (UnitsSelf.ContainsKey(unit.Tag)) { UnitsSelf[unit.Tag].DataSource = unit; } else { var data = new IntelUnit(unit); UnitsSelf.Add(unit.Tag, data); Handler.Handle(Case.UnitAddedSelf, data); } } }