Beispiel #1
0
    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);
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    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);
    }