コード例 #1
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit2D hit      = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, Mathf.Infinity, tileLayerMask);
        RaycastHit2D towerHit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, Mathf.Infinity, towerLayerMask);

        if (towerHit)
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (towerHit.transform.gameObject == this.gameObject)
                {
                    guiManager.selectedGO = this.gameObject;
                    GUIManagerScript.Instance.UpdateSelectedInfo();
                    deselectTower = false;

                    if (!isMoving)
                    {
                        canMove      = true;
                        showChecking = true;
                    }
                }
                else
                {
                    Deactivate();
                    guiManager.selectedGO = towerHit.transform.gameObject;
                    GUIManagerScript.Instance.UpdateSelectedInfo();
                    deselectTower = true;
                }
            }
            else if (Input.GetMouseButtonDown(1))
            {
                if (towerHit.transform.gameObject != this.gameObject)
                {
                    Deactivate();
                    deselectTower = true;
                }
            }
        }

        if (moveGridIndex < moveGridList.Count)
        {
            moveGridTimer     += Time.deltaTime;
            transform.position = Vector3.Lerp(currentGridPos, moveGridList[moveGridIndex], moveGridTimer / moveGridDuration);

            if (moveGridTimer >= moveGridDuration)
            {
                currentGridPos = transform.position;
                moveGridTimer  = 0.0f;
                moveGridIndex++;
            }
            if (moveGridIndex >= moveGridList.Count)
            {
                moveGridIndex = 0;
                moveGridList.Clear();
                rowIndex = targetRowIndex;
                colIndex = targetColIndex;
            }

            if (moveGridList.Count == 0)
            {
                Destroy(indicator);
                canShoot = true;
                isMoving = false;

                if (!deselectTower)
                {
                    showChecking = true;
                    canMove      = true;
                }
            }
        }

        if (canMove)
        {
            if (hit)
            {
                if (Input.GetMouseButtonDown(1))
                {
                    SoundManagerScript.Instance.PlaySFX(AudioClipID.SFX_Click);

                    if (hit.transform.gameObject.CompareTag("Tile"))
                    {
                        if (hit.transform.gameObject.GetComponent <TileScript>().type == TileScript.Type.PLATFORM)
                        {
                            if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM01)
                            {
                                if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_01)
                                {
                                    if (hit.transform.gameObject != currentTile && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                                    {
                                        hit.transform.gameObject.GetComponent <PlaceTower>().tower = self;
                                        currentGridPos = transform.position;
                                        targetRowIndex = hit.transform.gameObject.GetComponent <TileScript>().rowIndex;
                                        targetColIndex = hit.transform.gameObject.GetComponent <TileScript>().colIndex;
                                        TileManagerScript.Instance.GeneratePath(rowIndex, colIndex, targetRowIndex, targetColIndex, ref moveGridList);
                                        canMove      = false;
                                        showChecking = false;
                                        currentTile.GetComponent <PlaceTower>().tower = null;
                                        currentTile = hit.transform.gameObject;
                                        canShoot    = false;
                                        isMoving    = true;

                                        indicator = (GameObject)Instantiate(movingIndicator, hit.transform.gameObject.transform.position, Quaternion.identity);
                                    }
                                }
                            }

                            else if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM02)
                            {
                                if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_02)
                                {
                                    if (hit.transform.gameObject != currentTile && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                                    {
                                        hit.transform.gameObject.GetComponent <PlaceTower>().tower = self;
                                        currentGridPos = transform.position;
                                        targetRowIndex = hit.transform.gameObject.GetComponent <TileScript>().rowIndex;
                                        targetColIndex = hit.transform.gameObject.GetComponent <TileScript>().colIndex;
                                        TileManagerScript.Instance.GeneratePath(rowIndex, colIndex, targetRowIndex, targetColIndex, ref moveGridList);
                                        canMove      = false;
                                        showChecking = false;
                                        currentTile.GetComponent <PlaceTower>().tower = null;
                                        currentTile = hit.transform.gameObject;
                                        canShoot    = false;
                                        isMoving    = true;

                                        indicator = (GameObject)Instantiate(movingIndicator, currentTile.transform.gameObject.transform.position, Quaternion.identity);
                                    }
                                }
                            }

                            else if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM03)
                            {
                                if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_03)
                                {
                                    if (hit.transform.gameObject != currentTile && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                                    {
                                        hit.transform.gameObject.GetComponent <PlaceTower>().tower = self;
                                        currentGridPos = transform.position;
                                        targetRowIndex = hit.transform.gameObject.GetComponent <TileScript>().rowIndex;
                                        targetColIndex = hit.transform.gameObject.GetComponent <TileScript>().colIndex;
                                        TileManagerScript.Instance.GeneratePath(rowIndex, colIndex, targetRowIndex, targetColIndex, ref moveGridList);
                                        canMove      = false;
                                        showChecking = false;
                                        currentTile.GetComponent <PlaceTower>().tower = null;
                                        currentTile = hit.transform.gameObject;
                                        canShoot    = false;
                                        isMoving    = true;

                                        indicator = (GameObject)Instantiate(movingIndicator, currentTile.transform.gameObject.transform.position, Quaternion.identity);
                                    }
                                }
                            }

                            else if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM04)
                            {
                                if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_04)
                                {
                                    if (hit.transform.gameObject != currentTile && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                                    {
                                        hit.transform.gameObject.GetComponent <PlaceTower>().tower = self;
                                        currentGridPos = transform.position;
                                        targetRowIndex = hit.transform.gameObject.GetComponent <TileScript>().rowIndex;
                                        targetColIndex = hit.transform.gameObject.GetComponent <TileScript>().colIndex;
                                        TileManagerScript.Instance.GeneratePath(rowIndex, colIndex, targetRowIndex, targetColIndex, ref moveGridList);
                                        canMove      = false;
                                        showChecking = false;
                                        currentTile.GetComponent <PlaceTower>().tower = null;
                                        currentTile = hit.transform.gameObject;
                                        canShoot    = false;
                                        isMoving    = true;

                                        indicator = (GameObject)Instantiate(movingIndicator, currentTile.transform.gameObject.transform.position, Quaternion.identity);
                                    }
                                }
                            }

                            else if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM05)
                            {
                                if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_05)
                                {
                                    if (hit.transform.gameObject != currentTile && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                                    {
                                        hit.transform.gameObject.GetComponent <PlaceTower>().tower = self;
                                        currentGridPos = transform.position;
                                        targetRowIndex = hit.transform.gameObject.GetComponent <TileScript>().rowIndex;
                                        targetColIndex = hit.transform.gameObject.GetComponent <TileScript>().colIndex;
                                        TileManagerScript.Instance.GeneratePath(rowIndex, colIndex, targetRowIndex, targetColIndex, ref moveGridList);
                                        canMove      = false;
                                        showChecking = false;
                                        currentTile.GetComponent <PlaceTower>().tower = null;
                                        currentTile = hit.transform.gameObject;
                                        canShoot    = false;
                                        isMoving    = true;

                                        indicator = (GameObject)Instantiate(movingIndicator, currentTile.transform.gameObject.transform.position, Quaternion.identity);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        if (hit)
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (hit.transform.gameObject.CompareTag("Tile"))
                {
                    if (hit.transform.gameObject.GetComponent <TileScript>().type == TileScript.Type.PLATFORM && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                    {
                        Deactivate();
                        deselectTower = true;
                    }
                }
                else if (hit.transform.gameObject.CompareTag("Core"))
                {
                    if (hit.transform.gameObject.GetComponent <TileScript>().type == TileScript.Type.PLATFORM && hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                    {
                        Deactivate();
                        deselectTower = true;
                    }
                }
            }
        }

        if (showChecking)
        {
            if (hit)
            {
                if (hit.transform.gameObject.CompareTag("Tile"))
                {
                    if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_01)
                    {
                        if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM01)
                        {
                            if (hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.green;
                            }
                            else
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                            }
                        }
                        else if (hit.transform.gameObject.GetComponent <TileScript>().type != TileScript.Type.PATH)
                        {
                            hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                        }
                    }

                    else if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_02)
                    {
                        if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM02)
                        {
                            if (hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.green;
                            }
                            else
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                            }
                        }
                        else if (hit.transform.gameObject.GetComponent <TileScript>().type != TileScript.Type.PATH)
                        {
                            hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                        }
                    }

                    else if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_03)
                    {
                        if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM03)
                        {
                            if (hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.green;
                            }
                            else
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                            }
                        }
                        else if (hit.transform.gameObject.GetComponent <TileScript>().type != TileScript.Type.PATH)
                        {
                            hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                        }
                    }

                    else if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_04)
                    {
                        if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM04)
                        {
                            if (hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.green;
                            }
                            else
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                            }
                        }
                        else if (hit.transform.gameObject.GetComponent <TileScript>().type != TileScript.Type.PATH)
                        {
                            hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                        }
                    }

                    else if (this.gameObject.GetComponent <TowerData>().platform == Platform.PLATFORM_05)
                    {
                        if (hit.transform.gameObject.GetComponent <TileScript>().platform == TileScript.Platform.PLATOFORM05)
                        {
                            if (hit.transform.gameObject.GetComponent <PlaceTower>().tower == null)
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.green;
                            }
                            else
                            {
                                hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                            }
                        }
                        else if (hit.transform.gameObject.GetComponent <TileScript>().type != TileScript.Type.PATH)
                        {
                            hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
                        }
                    }

                    if (hit.transform.gameObject.GetComponent <PlaceTower>().tower == this.gameObject)
                    {
                        hit.transform.gameObject.GetComponent <SpriteRenderer>().color = Color.white;
                    }
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            Deactivate();
            deselectTower = true;
            guiManager.UnselectEverything();
        }
    }