Ejemplo n.º 1
0
    /// <summary>
    /// 选择寻路算法的起点和终点
    /// </summary>
    private void ClickTile()
    {
        if (Input.GetMouseButtonDown(1))
        {
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

            if (hit.collider != null)
            {
                TileScript temp = hit.transform.GetComponent <TileScript>();
                if (temp != null)
                {
                    if (start == null)
                    {
                        start = temp;
                        start.GetComponent <SpriteRenderer>().sprite = whiteSprite;
                        start.GetComponent <SpriteRenderer>().color  = new Color32(255, 110, 0, 255);
                        start.Debuging = true;
                    }
                    else if (end == null && temp.GridPosition != start.GridPosition)
                    {
                        end = temp;
                        end.GetComponent <SpriteRenderer>().sprite = whiteSprite;
                        end.GetComponent <SpriteRenderer>().color  = new Color32(255, 0, 0, 255);
                        end.Debuging = true;
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
    private void InitRandomTiles()
    {
        Random.InitState(previewSeed);

        int lastlastRandom, lastRandom, currentRandom;

        lastlastRandom = lastRandom = currentRandom = -1;

        for (int i = 0; i < numOfPreviewTiles; i++)
        {
            TileScript tile = Instantiate(
                tilePrefab,
                tileHolder.transform.position + new Vector3(i * tileOffset, 0, 0),
                Quaternion.identity,
                tileHolder.transform).GetComponent <TileScript>();

            tile.transform.localScale *= tileScale;
            tiles.Add(tile);

            currentRandom = Random.Range(0, (int)ColorName.COUNT);
            while (lastlastRandom == lastRandom && lastRandom == currentRandom)
            {
                currentRandom = Random.Range(0, (int)ColorName.COUNT);
            }

            tile.GetComponent <TileScript>().InitTile(
                GameManagerScript.Instance.GetTileColor((ColorName)currentRandom),
                true,
                GameManagerScript.Instance.GetTilePoint());

            lastlastRandom = lastRandom;
            lastRandom     = currentRandom;
        }
    }
    void findTheSameTileGroupIDAndChangeColor(GameObject selectedObj)
    {
        //Get the TileScript attached to the selectedObj
        TileScript selectedTileScript = selectedObj.GetComponent <TileScript>();

        //Loop through all GameObject in the array
        for (int i = 0; i < tilesArray.Length; i++)
        {
            /*
             * Make sure this is NOT selectedObj since we've arleady
             * changed its Material in OnObjectSelection function
             */
            if (selectedObj != tilesArray[i])
            {
                //Get TileScript attached to the current Tile loop
                TileScript tileLoop = tilesArray[i].GetComponent <TileScript>();
                //Check if selectedObj and the current loop tileGroupID matches
                if (selectedTileScript.tileGroupID == tileLoop.tileGroupID)
                {
                    //It matches! Now, change it's color
                    tileLoop.GetComponent <MeshRenderer>().material = tileSelectedMaterial;
                }
            }
        }
    }
Ejemplo n.º 4
0
    //cria um gameobject do piso, e manda ele pra posição certa
    private void PlaceTile(string tileType, int x, int y, Vector3 worldStart)
    {
        int        tileindex = int.Parse(tileType);
        TileScript newTile   = Instantiate(tilefabs[tileindex]).GetComponent <TileScript>();

        newTile.GetComponent <TileScript>().Setup(new Point(x, y), new Vector3(worldStart.x + (Tilesize * x), worldStart.y - (Tilesize * y), 0));
        Tiles.Add(new Point(x, y), newTile);
    }
Ejemplo n.º 5
0
    // Places the tiles where we want
    private void PlaceTile(int x, int y, Vector3 worldStartPosition)
    {
        // Creates a new tile and makes a reference to that tile in the NewTile
        TileScript newTile = Instantiate(tile).GetComponent <TileScript>();

        // Uses the new tile variable to change the position of the tile
        newTile.GetComponent <TileScript>().Setup(new Point(x, y), new Vector3(worldStartPosition.x + (TileSize * x), worldStartPosition.y - (TileSize * y), 0), map);

        Tiles.Add(new Point(x, y), newTile);
    }
Ejemplo n.º 6
0
    private GameObject CreateDebugTile(TileScript tile, Color32 color, AStarNode node = null)
    {
        GameObject debugTile = (GameObject)Instantiate(debugTilePrefab, tile.WorldPosition, Quaternion.identity);

        debugTile.GetComponent <SpriteRenderer> ().color        = color;
        debugTile.GetComponent <SpriteRenderer> ().sortingOrder = tile.GetComponent <SpriteRenderer> ().sortingOrder + 1;
        debugTile.GetComponent <Canvas> ().sortingOrder         = tile.GetComponent <SpriteRenderer> ().sortingOrder + 2;

        if (node != null)
        {
            debugTile.GetComponent <AStarDebugTile> ().GValueText.gameObject.SetActive(true);
            debugTile.GetComponent <AStarDebugTile> ().GValueText.text = "G: " + node.GScore.ToString();

            debugTile.GetComponent <AStarDebugTile> ().HValueText.gameObject.SetActive(true);
            debugTile.GetComponent <AStarDebugTile> ().HValueText.text = "H: " + node.HScore.ToString();

            debugTile.GetComponent <AStarDebugTile> ().FValueText.gameObject.SetActive(true);
            debugTile.GetComponent <AStarDebugTile> ().FValueText.text = "F: " + node.FScore.ToString();
        }

        return(debugTile);
    }
 public void Sell()
 {
     if (towerSelect != null)
     {
         towerSelect.GetComponentInParent <TileScript>();
         Destroy(towerSelect.transform.parent.gameObject);
         tile.GetComponent <TileScript>();
         tile.isEmpty = true;
         Upgrade UP = GameObject.FindObjectOfType <Upgrade>();
         UP.DeselectSoldier();
         DeselectTower();
         Gold += 50;
     }
 }
    private void PlaceTile(string tileType, int x, int y, Vector3 worldStart)
    {
        int tileIndex = int.Parse(tileType);

        TileScript newTile = Instantiate(tilePrefabs[tileIndex].GetComponent <TileScript>());

        newTile.GetComponent <TileScript>().Setup(new Point(x, y), new Vector3(worldStart.x + (TileSize * x), worldStart.y - (TileSize * y), 0), map);

        //Check if tile is water or brick
        if ((tileType == "2") || (tileType == "1"))
        {
            newTile.WalkAble = false;
        }

        Tiles.Add(new Point(x, y), newTile);
    }
Ejemplo n.º 9
0
    public void Move()
    {
        if (path.Count > 0)
        {
            TileScript t      = path.Peek();
            Vector3    target = t.transform.position;

            //calculer la position de l'objet sur la tile target
            target.y += halfHeight + t.GetComponent <Collider>().bounds.extents.y;

            if (Vector3.Distance(transform.position, target) >= 0.05f)
            {
                bool jump = transform.position.y != target.y;

                if (jump)
                {
                    Jump(target);
                }
                else
                {
                    CalculateHeading(target);
                    SetHorizontaleVelocity();
                }

                //locomotion
                transform.forward   = heading;
                transform.position += velocity * Time.deltaTime;
            }
            else
            {
                //A atteint le centre de la tile
                transform.position = target;
                path.Pop();
            }
        }
        else
        {
            RemoveSelectableTiles();
            moving = false;

            TurnManager.EndTurn();
        }
    }
Ejemplo n.º 10
0
    private void InitCustomTiles()
    {
        numOfPreviewTiles = customSequence.Length;
        for (int i = 0; i < customSequence.Length; i++)
        {
            TileScript tile = Instantiate(
                tilePrefab,
                tileHolder.transform.position + new Vector3(i * tileOffset, 0, 0),
                Quaternion.identity,
                tileHolder.transform).GetComponent <TileScript>();

            tile.transform.localScale *= tileScale;
            tiles.Add(tile);

            tile.GetComponent <TileScript>().InitTile(
                GameManagerScript.Instance.GetTileColor(customSequence[i]),
                true,
                GameManagerScript.Instance.GetTilePoint());
        }
    }
Ejemplo n.º 11
0
    //点击一个按钮时
    public void SelectTile(TileScript ts)
    {
        if (!gaming)
        {
            return;
        }
        if (pausing)
        {
            return;
        }

        //没有选中时,选中该按钮
        if (selectedTile == null)
        {
            //Debug.Log("选中");
            selectedTile = ts;

            selectFrame.GetComponent <Image>().color = Color.white;
            selectFrame.GetComponent <RectTransform>().anchoredPosition = ts.GetComponent <RectTransform>().anchoredPosition;
            //selectedTile.
        }
        else
        {
            //如果重复点击一个按钮,取消选择
            if (ts == selectedTile)
            {
                Debug.Log("重复!");
                CancelSelect();
                return;
            }
            else
            {
                //能够按规则连接则消除
                if (CanConnect(selectedTile, ts))
                {
                    selectedTile.button.interactable = false;
                    ts.button.interactable           = false;

                    if (gameMode == MODE_GRAVITY)
                    {
                        if (selectedTile.y > ts.y)
                        {
                            Gravitiy(selectedTile);
                            Gravitiy(ts);
                        }
                        else
                        {
                            Gravitiy(ts);
                            Gravitiy(selectedTile);
                        }
                    }

                    else
                    {
                        StartCoroutine(PaintLine());
                    }

                    CancelSelect();
                }
                //否则取消选择
                else
                {
                    CancelSelect();
                    return;
                }
            }
        }
    }
Ejemplo n.º 12
0
    public IEnumerator updateOwnUnits()
    {
        // Clone the list!
        m_playerNotInteractGOList = new List <GameObject>(m_playerGOList);
        yield return(new WaitForSeconds(1.0f));

        // If there is a previous unit, move the camera towards there!
        if (m_lastActionUnitTile)
        {
            CameraMovement.Instance.MoveTowardsPosition(m_lastActionUnitTile.transform.position);
        }
        else if (m_playerGOList.Count > 0)
        {
            // Randomly move the camera to any of the objects!
            CameraMovement.Instance.MoveTowardsPosition(m_playerGOList[0].transform.position);
        }
        while (m_playerNotInteractGOList.Count > 0)
        {
            CameraMovement.Instance.BeginCamFreeMovement();
            playerMouseInput.enabled = true;
            // Will wait every frame for the player to click on the tile which belongs to the player! Also making sure that the player has not interact with the tile before!
            while (playerMouseInput.playerClickedTile == null || playerMouseInput.playerClickedTile.tag != "Player" || (!m_playerNotInteractGOList.Contains(playerMouseInput.playerClickedTile.gameObject) && playerMouseInput.playerClickedTile.tag == "Player"))
            {
                yield return(null);
            }
            CameraMovement.Instance.StopCamUpdateMovement();
            TileScript firstTileClicked = playerMouseInput.playerClickedTile;
            // then set the green indicator!
            playerMouseInput.SetUnitIndicatorPermanent(firstTileClicked.transform);
            // Set it to null and prevent player from pressing!
            playerMouseInput.playerClickedTile = null;
            playerMouseInput.enabled           = false;
            CharacterScript playerUnitStat = firstTileClicked.GetComponent <CharacterScript>();
            UnitStatWindowManager.gameObject.SetActive(true);
            UnitStatWindowManager.DisplayUI(playerUnitStat);
            m_hasFinishedConversing = false;
            // set the motivation to be true then wait for it to be inactive!
            //displayMotivationScreen.SetActive(true);
            //while (displayMotivationScreen.activeSelf)
            //    yield return null;
            //string talkToWhatChar = playerUnitStat.m_AttackType.ToString() + "|" + playerUnitStat.m_characterCharis.ToString();
            // Try to talk to the character
            //theConversationChart.SendFungusMessage(talkToWhatChar);
            theConversationChart.SetIntegerVariable(m_MotivationVarStr, playerUnitStat.m_Motivation);
            theConversationChart.SetStringVariable(m_AttckTypeVarStr, playerUnitStat.m_AttackType.ToString());
            theConversationChart.SendFungusMessage(m_MotivateDialogueStr);
            while (!m_hasFinishedConversing)
            {
                yield return(null);
            }
            UnitStatWindowManager.gameObject.SetActive(false);
            // Then we wait till the next tile that the player clicked on or maybe there is none!
            UnitFSM playerFSM = firstTileClicked.GetComponent <UnitFSM>();
            yield return(null);

            playerUnitStat.m_Motivation = theConversationChart.GetIntegerVariable(m_MotivationVarStr);

            // Wait till the player clicked on a tile and it turns out to be the enemy or player clicked on the background and nothing is selected forsure!
            m_clickedFlag = false;
            //if (playerFSM.GetGenericState("DemoralizeState").interactWithState(m_PlayerChoseChar))
            if (playerFSM.GetGenericState("DemoralizeState").interactWithState(null))
            {
                // Only Successful interaction will mean being able to move the unit!
                m_endPlayerTurnScreen.SetActive(true);
                playerUnitStat.unitRangeRingGO.SetActive(true);
            }
            playerMouseInput.enabled = true;
            // Wait for next frame
            yield return(null);

            playerMouseInput.playerClickedTile = null;
            #region UNIT_ACTION
            while (m_endPlayerTurnScreen.activeSelf)
            {
                CameraMovement.Instance.BeginCamFreeMovement();
                // Wait for PlayerBattleMouse to send the event trigger!
                while (!m_clickedFlag && m_endPlayerTurnScreen.activeSelf)
                {
                    if (playerMouseInput.playerClickedTile && (playerMouseInput.playerClickedTile.tag == "Enemy" || playerMouseInput.playerClickedTile.tag == "EnemyFortress") && playerUnitStat.m_AttackType != CharacterScript.TYPE_ATTACK.HEAL)
                    {
                        // check whether the player is close to the enemy!
                        if (playerUnitStat.m_Range >= Vector3.Distance(playerUnitStat.transform.position, playerMouseInput.playerClickedTile.transform.position))
                        {
                            CharacterScript otherCharStat = playerMouseInput.playerClickedTile.GetComponent <CharacterScript>();
                            playerFSM.GetGenericState("AttackState").interactWithState(otherCharStat);
                            playerFSM.ChangeCurrentState("AttackState");
                            // If Player attack, this means the unit turn has ended
                            m_endPlayerTurnScreen.SetActive(false);
                            break;
                        }
                        else
                        {
                            playerMouseInput.playerClickedTile = null;
                        }
                    }
                    else if (playerMouseInput.playerClickedTile && playerMouseInput.playerClickedTile.tag == "Player" && playerUnitStat.m_AttackType == CharacterScript.TYPE_ATTACK.HEAL)
                    {
                        // check whether the player is close to allies!
                        if (playerUnitStat.m_Range >= Vector3.Distance(playerUnitStat.transform.position, playerMouseInput.playerClickedTile.transform.position))
                        {
                            CharacterScript otherCharStat = playerMouseInput.playerClickedTile.GetComponent <CharacterScript>();
                            playerFSM.GetGenericState("AttackState").interactWithState(otherCharStat);
                            playerFSM.ChangeCurrentState("AttackState");
                            // If Player attack, this means the unit turn has ended
                            m_endPlayerTurnScreen.SetActive(false);
                            break;
                        }
                        else
                        {
                            playerMouseInput.playerClickedTile = null;
                        }
                    }
                    yield return(null);
                }
                // Making sure the player clicked on an empty tile and their available movement tiles are more than 0.
                if (!hasUIBlockRaycast && !playerMouseInput.playerClickedTile && playerUnitStat.m_leftOverMoveSpeed > 0)
                {
                    // If successful interaction, then will move!
                    // Player pressed nothing, so move towards there!
                    if (playerFSM.GetGenericState("MoveState").interactWithState(playerMouseInput.playerMouseLastClickedPos))
                    {
                        playerFSM.ChangeCurrentState("MoveState");
                        // Then wait for the FSM to be finished updating!
                        yield return(playerFSM.updateStateCoroutine);
                    }
                }
                //else
                {
                    // Reset the tile!
                    playerMouseInput.playerClickedTile = null;
                }
                CameraMovement.Instance.StopCamUpdateMovement();
                m_clickedFlag = false;
                yield return(null);
            }
            #endregion
            // Unblock the raycast!
            hasUIBlockRaycast = false;
            playerMouseInput.SetUnitIndicatorPermanent(null);
            if (firstTileClicked)
            {
                playerUnitStat.resetMoveSpeed();
                // Removed the already interacted gameobject!
                m_playerNotInteractGOList.Remove(firstTileClicked.gameObject);
                m_lastActionUnitTile = firstTileClicked;
                firstTileClicked.GetComponent <SpriteRenderer>().color = colorOfUsedUnit;
                playerUnitStat.unitRangeRingGO.SetActive(false);
            }
            else
            {
                RemoveDestroyedUnit();
            }
        }
        CameraMovement.Instance.StopCamUpdateMovement();
        // Set it to be false!
        GameManager.Instance.isItPlayerTurn = false;
        // Then change all of the unit color back to normal
        foreach (GameObject unitGO in m_playerGOList)
        {
            SpriteRenderer unitSprRender = unitGO.GetComponent <SpriteRenderer>();
            unitSprRender.color = Color.white;
        }
        yield break;
    }