public void RefreshUnitState() { if (!SelfBaseUnit.IsLive) { return; } UnitsEnemy.Clear(); UnitsAlly.Clear(); UnitsSelf.Clear(); foreach (var item in Units) { if (SelfBaseUnit.IsEnemy(item)) { UnitsEnemy.Add(item); } if (SelfBaseUnit.IsSOF(item)) { UnitsAlly.Add(item); } if (SelfBaseUnit.IsSelf(item)) { UnitsSelf.Add(item); } } }
/// <summary> /// Notify listeners of dead units and remove from the index. /// </summary> /// <param name="event">Event from the newest ResponseObservation</param> private void DeadUnits(Event @event) { if (@event == null) { return; } foreach (var id in @event.DeadUnits) { if (UnitsSelf.TryGetValue(id, out var deadUnit)) { UnitsSelf.Remove(id); Handler.Handle(Case.UnitDestroyed, deadUnit); } else if (StructuresSelf.TryGetValue(id, out deadUnit)) { StructuresSelf.Remove(id); Handler.Handle(Case.StructureDestroyed, deadUnit); } else if (WorkersSelf.TryGetValue(id, out deadUnit)) { WorkersSelf.Remove(id); Handler.Handle(Case.WorkerDestroyed, deadUnit); } else if (UnitsEnemy.TryGetValue(id, out deadUnit)) { UnitsEnemy.Remove(id); Handler.Handle(Case.UnitAddedEnemy, deadUnit); } else if (StructureEnemy.TryGetValue(id, out deadUnit)) { StructureEnemy.Remove(id); Handler.Handle(Case.StructureAddedEnemy, deadUnit); } else if (WorkersEnemy.TryGetValue(id, out deadUnit)) { WorkersEnemy.Remove(id); Handler.Handle(Case.WorkerAddedEnemy, deadUnit); } else if (MineralFields.TryGetValue(id, out deadUnit)) { MineralFields.Remove(id); foreach (var c in Colonies) { if (c.Minerals.Remove(deadUnit)) { break; } } Handler.Handle(Case.MineralDepleted, deadUnit); } } }
public bool TryGet(ulong tag, out IUnit unit) { if (UnitsSelf.TryGetValue(tag, out var u)) { unit = u; return(true); } if (StructuresSelf.TryGetValue(tag, out var building)) { unit = building; return(true); } if (WorkersSelf.TryGetValue(tag, out var worker)) { unit = worker; return(true); } if (StructureEnemy.TryGetValue(tag, out var buildingE)) { unit = buildingE; return(true); } if (UnitsEnemy.TryGetValue(tag, out var uE)) { unit = uE; return(true); } if (WorkersEnemy.TryGetValue(tag, out var workerE)) { unit = workerE; return(true); } if (Destructibles.TryGetValue(tag, out var destructible)) { unit = destructible; return(true); } if (MineralFields.TryGetValue(tag, out var mineral)) { unit = mineral; return(true); } if (VespeneGeysers.TryGetValue(tag, out var vespene)) { unit = vespene; return(true); } unit = null; return(false); }
public void Clear() { foreach (var item in Units) { item.DetectionMgr.Remove(this, SelfBaseUnit); } Units.Clear(); UnitsEnemy.Clear(); UnitsAlly.Clear(); UnitsSelf.Clear(); for (int i = 0; i < ColliderResults.Length; i++) { ColliderResults[i] = null; } }
/// <summary> /// Clear all stored data. /// </summary> private void Clear() { StructuresSelf.Clear(); WorkersSelf.Clear(); UnitsSelf.Clear(); StructureEnemy.Clear(); WorkersEnemy.Clear(); UnitsEnemy.Clear(); Colonies.Clear(); PrimaryColony = null; UpgradesSelf.Clear(); MineralFields.Clear(); VespeneGeysers.Clear(); Destructibles.Clear(); XelNagaTowers.Clear(); Handler = new CaseHandler <Case, IUnit>(); }
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); } }
public void DoTestExit(Collider col) { if (!SelfBaseUnit.IsLive) { return; } TUnit unit = col.GetComponent <TUnit>(); if (unit != null) { Units.Remove(unit); UnitsEnemy.Remove(unit); UnitsAlly.Remove(unit); UnitsSelf.Remove(unit); unit.DetectionMgr.Remove(this, SelfBaseUnit); OnExit(unit); } OnExitObject(col); }
public void RefreshEnemyAlly() { UnitsEnemy.Clear(); UnitsAlly.Clear(); UnitsSelf.Clear(); foreach (var item in Units) { if (SelfBaseUnit.IsEnemy(item)) { UnitsEnemy.Add(item); } if (SelfBaseUnit.IsSOF(item)) { UnitsAlly.Add(item); } if (SelfBaseUnit.IsSelf(item)) { UnitsSelf.Add(item); } } }
public void DoTestEnter(Collider col) { if (!SelfBaseUnit.IsLive) { return; } if (col == null) { return; } TUnit unit = col.GetComponent <TUnit>(); if (unit != null) { if (!unit.IsLive) { return; } Units.Add(unit); if (SelfBaseUnit.IsEnemy(unit)) { UnitsEnemy.Add(unit); } if (SelfBaseUnit.IsSOF(unit)) { UnitsAlly.Add(unit); } if (SelfBaseUnit.IsSelf(unit)) { UnitsSelf.Add(unit); } unit.DetectionMgr.Add(this, SelfBaseUnit); OnEnter(unit); } OnEnterObject(col); }