/// <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; } } } } }
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; } } } }
//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); }
// 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); }
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); }
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(); } }
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()); } }
//点击一个按钮时 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; } } } }
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; }