Ejemplo n.º 1
0
 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);
         }
     }
 }
Ejemplo n.º 2
0
 /// <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);
         }
     }
 }
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
 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;
     }
 }
Ejemplo n.º 5
0
 /// <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>();
 }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
 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);
         }
     }
 }
Ejemplo n.º 9
0
        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);
        }