private void SearchForTile() { Ray ray = mainCam.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (hit.transform.tag.Equals("Tile")) { selectedTile = hit.transform.gameObject; selectedTileScript = hit.transform.GetComponent <TileIndicator>(); selectedTilePos = hit.transform.position; if (selectedUnitIsWorker) { if (selectedTileScript.isOccupied == false && hit.transform.GetComponent <Tile>().hasCrystals) { selectedTileScript.thisTileSelected = true; isDropable = true; } } else if (selectedTileScript.isOccupied == false) { selectedTileScript.thisTileSelected = true; isDropable = true; } } } }
// Use this for initialization void Start() { for (int i = 0; i < Constant.mapX; i++) { for (int j = 0; j < Constant.mapY; j++) { GameObject tile = (GameObject)Instantiate(Resources.Load("TileIndicator") , new Vector3((float)(i * Constant.tileSize + Constant.tileOffSetX) , (float)(j * Constant.tileSize + Constant.tileOffSetY), 0), Quaternion.identity); tile.transform.parent = gameObject.transform; TileIndicator tileIndicator = tile.GetComponent <TileIndicator>(); tileIndicator.tileX = i; tileIndicator.tileY = j; map[i, j] = tile; } } ///Add cat Instantiate(Resources.Load("Cat") , new Vector3((float)(5 * Constant.tileSize + Constant.tileOffSetX) , (float)(4 * Constant.tileSize + Constant.tileOffSetY), 0), Quaternion.identity); Instantiate(Resources.Load("Cat") , new Vector3((float)(3 * Constant.tileSize + Constant.tileOffSetX) , (float)(4 * Constant.tileSize + Constant.tileOffSetY), 0), Quaternion.identity); }
//End #2 private void OnMouseDown() { //#3 If there is a selected object need to move to new tile if (OnGoingProperties.selectedObject != null) { GameObject srcTile = OnGoingProperties.selectedObject; TileIndicator tileIndicator = srcTile.GetComponent <TileIndicator>(); if (switchToMoveTile && gameObjectInMap == null) { ArrayList moveTiles = OnGoingProperties.selectedMoveTiles; if (moveTiles != null) { StartCoroutine(yeahWait(srcTile, moveTiles)); } } else { tileIndicator.gameObjectInMap.ChangeState(0); } showMovementTile(tileIndicator.gameObjectInMap.gameObjectStats.movement, tileIndicator.tileX, tileIndicator.tileY, false); clearPreviousPath(); OnGoingProperties.selectedObject = null; OnGoingProperties.selectedMoveTiles = null; return; } //#End #3 if (gameObjectInMap != null) { gameObjectInMap.ChangeState(2); OnGoingProperties.selectedObject = gameObject; showMovementTile(gameObjectInMap.gameObjectStats.movement, tileX, tileY, true); } }
//#1 Create path to the destination public void createPathToDestination(GameObject src, GameObject des, GameObject[,] map) { clearPreviousPath(); movableTiles = null; TileIndicator srcTile = src.GetComponent <TileIndicator>(); TileIndicator desTile = des.GetComponent <TileIndicator>(); int incrementalX = (desTile.tileX - srcTile.tileX > 0) ? 1 : -1; int incrementalY = (desTile.tileY - srcTile.tileY > 0) ? 1 : -1; int moveX = Math.Abs(desTile.tileX - srcTile.tileX); int moveY = Math.Abs(desTile.tileY - srcTile.tileY); int move = moveX + moveY; int curX = srcTile.tileX, curY = srcTile.tileY; while (move > 0) { bool blockX = false; bool blockY = false; while (!blockX && moveX > 0) { GameObject nextTile = map[curX + incrementalX, curY]; ///check if tile is movable if (nextTile.GetComponent <TileIndicator>().isMoveAbleTile) { addMovableTile(nextTile); curX = curX + incrementalX; moveX--; move--; } else { blockX = true; } } while (!blockY && moveY > 0) { GameObject nextTile = map[curX, curY + incrementalY]; ///check if tile is movable if (nextTile.GetComponent <TileIndicator>().isMoveAbleTile) { addMovableTile(nextTile); curY = curY + incrementalY; moveY--; move--; } else { blockY = true; } } } if (movableTiles != null) { OnGoingProperties.selectedMoveTiles = movableTiles; } }
IEnumerator yeahWait(GameObject srcTile, ArrayList moveTiles) { foreach (GameObject tile in moveTiles) { StartCoroutine(moveObjectToNewPosition(srcTile, tile)); yield return(new WaitUntil(() => !stillRunning)); } TileIndicator tileIndicator = srcTile.GetComponent <TileIndicator>(); gameObject.GetComponent <TileIndicator>().gameObjectInMap = tileIndicator.gameObjectInMap; tileIndicator.gameObjectInMap.ChangeState(0); tileIndicator.gameObjectInMap = null; }
// Use this for initialization void Start() { animator = GetComponent <Animator>(); GameObject[,] map = AddingMovingIndicatorTile.map; for (int i = 0; i < map.GetLength(0); i++) { for (int j = 0; j < map.GetLength(1); j++) { if (map[i, j].transform.position == transform.position) { TileIndicator tileIndicator = map[i, j].GetComponent <TileIndicator>(); tileIndicator.gameObjectInMap = this; //Set up stats gameObjectStats = new GameObjectStats(); gameObjectStats.name = "Cat"; gameObjectStats.movement = 4; gameObjectStats.attackRange = 1; Debug.Log(map.GetLength(0)); break; } } } }
void OnEnable() { nodeGraph = target as NodeGraph; tileIndicator = FindObjectOfType <TileIndicator>(); }