public void SetPlace(EUnitRange range, EUnitPosition position) { Place = UnitData.TemplatePlace.Range != EUnitRange.None && UnitData.TemplatePlace.Position != EUnitPosition.None ? UnitData.TemplatePlace : new UnitPlace() { Range = range, Position = position }; }
List <BaseUnitBehaviour>[] GetRangeUnits(ArrayRO <BaseUnitBehaviour> units) { List <BaseUnitBehaviour>[] rangeUnits = new List <BaseUnitBehaviour>[3] { new List <BaseUnitBehaviour>(), new List <BaseUnitBehaviour>(), new List <BaseUnitBehaviour>() }; List <BaseUnitBehaviour> heroes = rangeUnits[FirstZoneIndex]; List <BaseUnitBehaviour> remoteUnits = rangeUnits[SecondZoneIndex]; List <BaseUnitBehaviour> nearUnits = rangeUnits[ThirdZoneIndex]; for (int i = 0; i < units.Length; i++) { BaseUnitBehaviour unit = units[i]; if (unit != null && unit.UnitData != null) { EUnitPosition position = unit.Place.Position; if (UnitsConfig.Instance.IsHero(unit.UnitData.Data.Key)) { if (heroes.Count < 3) { heroes.Add(unit); } else if (remoteUnits.Count < 3) { unit.Place = new UnitPlace() { Range = EUnitRange.Ranged, Position = position }; remoteUnits.Add(unit); } else if (nearUnits.Count < 3) { unit.Place = new UnitPlace() { Range = EUnitRange.Melee, Position = position }; nearUnits.Add(unit); } } else { EUnitRange range = unit.UnitData.TemplatePlace.Range != EUnitRange.None ? unit.UnitData.TemplatePlace.Range : unit.UnitData.Data.BaseRange; if (range == EUnitRange.Ranged) { if (remoteUnits.Count < 3) { unit.Place = new UnitPlace() { Range = EUnitRange.Ranged, Position = position }; remoteUnits.Add(unit); } else if (nearUnits.Count < 3) { unit.Place = new UnitPlace() { Range = EUnitRange.Melee, Position = position }; nearUnits.Add(unit); } } else if (range == EUnitRange.Melee) { if (nearUnits.Count < 3) { unit.Place = new UnitPlace() { Range = EUnitRange.Melee, Position = position }; nearUnits.Add(unit); } else if (remoteUnits.Count < 3) { unit.Place = new UnitPlace() { Range = EUnitRange.Ranged, Position = position }; remoteUnits.Add(unit); } } } } } return(rangeUnits); }