예제 #1
0
        void DeplaceTower(MoveableTower tower, SingleTowerPlacementArea area)
        {
            if (area == null)
            {
                return;
            }

            else
            {
                Vector3 targetPosition = area.transform.position;
                float   dist           = Vector3.Distance(tower.transform.position, targetPosition);

                if (dist < 0.1f)
                {
                    tower.transform.position = targetPosition;
                    IntVector2 gridPosition = area.WorldToGrid(targetPosition, dimensions);
                    area.Occupy(gridPosition, dimensions);
                    tower.currentBase = area;
                    return;
                }

                else
                {
                    tower.transform.LookAt(targetPosition, Vector3.up);
                    tower.transform.position += tower.transform.forward * speed * Time.deltaTime;
                }
            }
        }
예제 #2
0
        // find the available bases for setting these moveable towers

        private SingleTowerPlacementArea SearchNearestBase(Agent nearestAgent)
        {
            if (nearestAgent == null)
            {
                return(null);
            }

            else
            {
                float distance = float.MaxValue;
                SingleTowerPlacementArea nearest = null;

                for (int i = 0; i < allBases.Count; i++)
                {
                    if (allBases[i].isSelected == true)
                    {
                        continue;
                    }

                    float currentDistance = Vector3.Distance(nearestAgent.transform.position, allBases[i].transform.position);
                    if (currentDistance < distance)
                    {
                        distance = currentDistance;
                        nearest  = allBases[i];
                    }
                }
                nearest.isSelected = true;
                return(nearest);
            }
        }
예제 #3
0
    /// <summary>
    /// Builds the tower.
    /// </summary>
    /// <param name="towerPrefab">Tower prefab.</param>
    public void BuildTower(GameObject towerPrefab)
    {
        // Close active building tree
        CloseBuildingTree();
        Tower target             = towerPrefab.GetComponent <Tower>();
        int   cost               = target.currentTargetLevelData.Cost;
        bool  successfulPurchase = BattleField.instance.currency.TryPurchase(cost);

        if (successfulPurchase)
        {
            SingleTowerPlacementArea placementArea = Instantiate(buildingPlace).GetComponent <SingleTowerPlacementArea>();
            placementArea.transform.parent   = transform.parent;
            placementArea.transform.position = transform.position;

            placementArea.transform.Find("DefendPoint").transform.position = defendPoint.position;

            Tower createdTarget = Instantiate(target);
            createdTarget.Initialize(placementArea, IntVector2.zero);
            createdTarget.transform.parent = placementArea.transform;

            Destroy(gameObject);
        }
    }
예제 #4
0
        private void Preparation()
        {
            towers       = GetCurrentTowers();
            nearestAgent = GetNearestAgent();

            possibleBases.Clear();

            foreach (SingleTowerPlacementArea area in allBases)
            {
                area.isSelected = false;
            }
            foreach (MoveableTower tower in towers)
            {
                AttackAffector attackAffector = tower.gameObject.transform.GetChild(1).GetChild(0).GetComponent <AttackAffector>();
                attackAffector.enabled = true;
                SingleTowerPlacementArea selectedBase = SearchNearestBase(nearestAgent);
                IntVector2 gridPosition = selectedBase.WorldToGrid(selectedBase.transform.position, dimensions);
                selectedBase.Clear(gridPosition, dimensions);
                possibleBases.Add(selectedBase);
                tower.currentBase.Clear(gridPosition, dimensions);
                tower.currentBase = null;
            }
        }