コード例 #1
0
        /// <summary>
        /// Instantiates Tile Objects to visualise the grid and sets up the <see cref="m_AvailableCells" />
        /// </summary>
        protected void SetUpGrid()
        {
            PlacementTile tileToUse = placementTilePrefab;

            if (tileToUse != null)
            {
                // Create a container that will hold the cells.
                var tilesParent = new GameObject("Container");
                tilesParent.transform.parent        = transform;
                tilesParent.transform.localPosition = Vector3.zero;
                tilesParent.transform.localRotation = Quaternion.identity;
                m_Tiles = new PlacementTile[dimensions.x, dimensions.y];

                for (int y = 0; y < dimensions.y; y++)
                {
                    for (int x = 0; x < dimensions.x; x++)
                    {
                        Vector3 targetPos = GridToWorld(new Vector2Int(x, y), new Vector2Int(1, 1));
                        targetPos.y += 0.01f;
                        PlacementTile newTile = Instantiate(tileToUse);
                        newTile.transform.parent        = tilesParent.transform;
                        newTile.transform.position      = targetPos;
                        newTile.transform.localRotation = Quaternion.identity;

                        m_Tiles[x, y] = newTile;
                        newTile.SetState(PlacementTileState.Empty);
                    }
                }
            }
        }
コード例 #2
0
        private void MouseClick_performed()
        {
            if (currentUiState == UiStates.Play && !EventSystem.current.IsPointerOverGameObject())
            {
                Vector2    mousePos = inputActions.UI.MousePosition.ReadValue <Vector2>();
                RaycastHit output;
                Ray        ray    = m_Camera.ScreenPointToRay(mousePos);
                bool       hasHit = Physics.Raycast(ray, out output, float.MaxValue, towerSelectionLayer);
                if (!hasHit)
                {
                    return;
                }

                Tower tower = output.collider.GetComponent <TowerLevel>()?.ParentTower;
                if (tower != null)
                {
                    SelectTower(tower);
                    return;
                }

                PlacementTile tile = output.collider.GetComponent <PlacementTile>();
                if (tile != null)
                {
                    SelectTile(tile);
                    return;
                }
                ClearSelection();
            }
        }
コード例 #3
0
        public void BuildLoadedTowers(List <TowerSaveData> towerSaveDatas)
        {
            int tempCoins = CurrencyManager.instance.GetCurrency();

            CurrencyManager.instance.SetCurrency(100000);

            foreach (TowerSaveData towerSaveData in towerSaveDatas)
            {
                TowerData     towerToBuild = towerConfigurations.Where(t => t.Id.Equals(towerSaveData.towerId)).FirstOrDefault();
                PlacementTile tile         = placementTilesholder.GetPlacementTile(towerSaveData.tileId);
                if (towerToBuild != null && tile != null)
                {
                    GameObject newTowerGO    = Instantiate(towerToBuild.Prefab.gameObject, tile.transform.position, tile.transform.rotation);
                    Tower      deffenceTower = newTowerGO.GetComponent <Tower>();
                    deffenceTower.Init(towerToBuild);
                    deffenceTower.PlacementTile = tile;
                    OnTowerBuild?.Invoke(deffenceTower);

                    UiManager.instance.SelectTower(deffenceTower);
                    while (deffenceTower.currentLevel < towerSaveData.currentLevel)
                    {
                        UpgradeTower();
                    }
                }
            }
            CurrencyManager.instance.SetCurrency(tempCoins);
        }
コード例 #4
0
 public void SelectTile(PlacementTile tile)
 {
     ClearSelection();
     LeftPanel.SetActive(true);
     newTowerMenu.SetActive(true);
     selectedTile = tile;
     selectedTile.Select();
 }
コード例 #5
0
        /// <summary>
        /// Set up visualisation tile
        /// </summary>
        protected void Awake()
        {
            PlacementTile tileToUse;

            tileToUse = placementTilePrefab;
            if (tileToUse != null)
            {
                m_SpawnedTile = Instantiate(tileToUse, transform);
                //m_SpawnedTile.transform.localPosition = Vector3.zero;
                //m_SpawnedTile.transform.localEulerAngles = new Vector3(90f, 0, 0);
            }
        }
コード例 #6
0
        /// <summary>
        /// Set up visualisation tile
        /// </summary>
        protected void Awake()
        {
            PlacementTile tileToUse;

            tileToUse = placementTilePrefab;

            if (tileToUse != null)
            {
                m_SpawnedTile = Instantiate(tileToUse);
                m_SpawnedTile.transform.SetParent(transform);
                m_SpawnedTile.transform.localPosition = new Vector3(0f, 0.05f, 0f);
            }
        }
コード例 #7
0
        /// <summary>
        /// Set up visualisation tile
        /// </summary>
        protected void Awake()
        {
            PlacementTile tileToUse;

#if UNITY_STANDALONE
            tileToUse = placementTilePrefab;
#else
            tileToUse = placementTilePrefabMobile;
#endif

            if (tileToUse != null)
            {
                m_SpawnedTile = Instantiate(tileToUse);
                m_SpawnedTile.transform.SetParent(transform);
                m_SpawnedTile.transform.localPosition = new Vector3(0f, 0.05f, 0f);
            }
        }
コード例 #8
0
        public void BuildTower(TowerData towerToBuild)
        {
            if (!CurrencyManager.instance.IsEnoughMoneyFor(towerToBuild.TowerLevels[0].UpgradeCost))
            {
                Debug.Log("Not enough money to build tower!");
                return;
            }
            selectedTile = UiManager.instance.selectedTile;
            GameObject newTowerGO    = Instantiate(towerToBuild.Prefab.gameObject, selectedTile.transform.position, selectedTile.transform.rotation);
            Tower      deffenceTower = newTowerGO.GetComponent <Tower>();

            deffenceTower.Init(towerToBuild);
            deffenceTower.PlacementTile = selectedTile;
            OnTowerBuild?.Invoke(deffenceTower);

            UiManager.instance.SelectTower(deffenceTower);
        }
コード例 #9
0
        internal void ClearSelection()
        {
            if (currentSelectedTower != null)
            {
                towerMenuGO.SetActive(false);
                currentSelectedTower.PlacementTile.Deselect();
                currentSelectedTower = null;
            }

            if (selectedTile != null)
            {
                newTowerMenu.SetActive(false);
                selectedTile.Deselect();
                selectedTile = null;
            }

            LeftPanel.SetActive(false);
        }
コード例 #10
0
        protected void SetUpGridOverride()
        {
            PlacementTile tileToUse;

#if UNITY_STANDALONE
            tileToUse = placementTilePrefab;
#else
            tileToUse = placementTilePrefabMobile;
#endif
            if (tileToUse != null)
            {
                // Create a container that will hold the cells.
                var tilesParent = new GameObject("Container");
                tilesParent.transform.parent        = transform;
                tilesParent.transform.localPosition = Vector3.zero;
                tilesParent.transform.localRotation = Quaternion.identity;
                //m_Tiles = new PlacementTile[dimensions.x, dimensions.y];
                PlacementTile  newTile = Instantiate(tileToUse);
                SpriteRenderer tileSpr = newTile.GetComponent <SpriteRenderer>();
                tileSpr.size = new Vector2(dimensions.x * 2, dimensions.y * 2);
            }
        }