public static Dictionary <Vector2, TowerPositionData> CardinalTowersNoAnglesLoop(TowerSlotController self, Dictionary <Vector2, TowerSlotController> allTowers, CardinalSet cardinalSet) { Dictionary <Vector2, TowerPositionData> dict = new Dictionary <Vector2, TowerPositionData>(); Vector2 selfPosition = self.transform.position; float towerDiscoveryRange = StaticObjects.Instance.TowerSize; float SecondTowerDiscoveryRange = SelectorTest2.instance.SecondDiscoveryRange; float RangeMultiplier = SelectorTest2.instance.SecondDiscoveryRangeMultiplier; for (int i = 0; i < cardinalSet.length; i++) { dict.Add(cardinalSet.directionsClockwise[i], new TowerPositionData(null as TowerSlotController, 999f)); } foreach (var item in allTowers) { if (item.Value.name == self.name || item.Value == null) { continue; } TowerPositionQuery tq = new TowerPositionQuery(selfPosition, item.Key, towerDiscoveryRange); for (int i = 0; i < cardinalSet.length; i++) { if (cardinalSet.discoveryConditionsClockwise[i](tq)) { float d = Vector2.Distance(selfPosition, item.Key); if (dict[cardinalSet.directionsClockwise[i]].Distance > d) { dict[cardinalSet.directionsClockwise[i]] = new TowerPositionData(item.Value, d); } } } } return(dict); }
public static bool FindIfTowerInHorizontalRange(TowerPositionQuery tq) { float maxY = tq.ThisTower.y + tq.BaseDiscoveryRange; float minY = tq.ThisTower.y - tq.BaseDiscoveryRange; if (tq.TargetTower.x <= maxY && tq.TargetTower.x >= minY) { return(true); } return(false); }
public static bool FindIfTowerInVerticalRange(TowerPositionQuery tq) { float maxX = tq.ThisTower.x + tq.BaseDiscoveryRange; float minX = tq.ThisTower.x - tq.BaseDiscoveryRange; if (tq.TargetTower.x <= maxX && tq.TargetTower.x >= minX) { return(true); } return(false); }
public static Dictionary <Vector2, TowerPositionData> CardinalTowersNoAnglesLoopOver(GameObject self, Dictionary <Vector2, TowerSlotController> allTowers, CardinalSet cardinalSet, int rangeCheckCyclesAmount) { Dictionary <Vector2, TowerPositionData> dict = new Dictionary <Vector2, TowerPositionData>(); Vector2 selfPosition = self.transform.position; float towerDiscoveryRange = StaticObjects.Instance.TowerSize; for (int i = 0; i < cardinalSet.length; i++) { dict.Add(cardinalSet.directionsClockwise[i], new TowerPositionData(null, 999f, 99)); foreach (var tower in allTowers) { if (tower.Value.name == self.name || tower.Value == null) { continue; } for (int ii = 1; ii < rangeCheckCyclesAmount; ii++) { float newDiscoveryRange = (towerDiscoveryRange * (float)ii); TowerPositionQuery tq = new TowerPositionQuery(selfPosition, tower.Key, towerDiscoveryRange, newDiscoveryRange); if (tower.Value.name == dict[cardinalSet.directionsClockwise[i]].TowerSlotGo?.name) { continue; } if (cardinalSet.discoveryConditionsClockwise[i](tq)) { float d = Vector2.Distance(selfPosition, tower.Key); TowerPositionData tempTowerPos = new TowerPositionData(tower.Value.gameObject, tower.Value, d, ii); float currentDistanceScore = GetDistanceScore(towerDiscoveryRange, dict[cardinalSet.directionsClockwise[i]]); float candidateDistanceScore = GetDistanceScore(towerDiscoveryRange, tempTowerPos); if (candidateDistanceScore < currentDistanceScore) { dict[cardinalSet.directionsClockwise[i]] = tempTowerPos; } } } } } return(dict); }