protected void Awake() { if (tileTemplate == null) { tileTemplate = TileBehaviour.CreateTileTemplate(); tileTemplate.hideFlags = HideFlags.HideAndDontSave; tileTemplate.GetComponent <Renderer>().enabled = false; } ++tileTemplateUseCount; }
public void ExpandCity(TileBehaviour chosenTile, TileBehaviour expandingFrom) { chosenTile.Colonise(expandingFrom); cityPlayer.GetComponent <CityPlayer>().AddTerritory(chosenTile.GetComponent <PointController>()); //algo foreach (GameObject aTile in cityPlayer.GetComponent <CityPlayer>().Disconnect()) { aTile.GetComponent <TileBehaviour>().SetType(TileBehaviour.Type.EMPTY); } }
/// <summary> /// Removes the tiles outside of the camera frustum and zoom level. /// </summary> /// <param name="frustum">Frustum.</param> /// <param name="roundedZoom">Rounded zoom.</param> private void CleanUpTiles(Plane[] frustum, int roundedZoom) { List <string> tilesToRemove = new List <string> (); foreach (KeyValuePair <string, TileBehaviour> pair in tiles) { TileBehaviour tile = pair.Value; string tileKey = pair.Key; string[] tileAddressTokens = tileKey.Split('_'); int tileRoundedZoom = Int32.Parse(tileAddressTokens [0]); int tileX = Int32.Parse(tileAddressTokens [1]); int tileY = Int32.Parse(tileAddressTokens [2]); int roundedZoomDif = tileRoundedZoom - roundedZoom; bool inFrustum = GeometryUtility.TestPlanesAABB(frustum, tile.GetComponent <Collider>().bounds); if (!inFrustum || roundedZoomDif != 0) { CancelTileRequest(tileX, tileY, tileRoundedZoom); if (!inFrustum || (roundedZoomDif > 0 && CheckTileOutExistence(roundedZoom, tileRoundedZoom, tileX, tileY)) || (roundedZoomDif < 0 && CheckTileInExistence(roundedZoom, tileRoundedZoom, tileX, tileY))) { tilesToRemove.Add(tileKey); } } } foreach (string tileAddress in tilesToRemove) { TileBehaviour tile = tiles [tileAddress]; Renderer renderer = tile.GetComponent <Renderer>(); if (renderer != null) { GameObject.DestroyImmediate(renderer.material.mainTexture); //TextureAtlasManager.Instance.RemoveTexture(pair.Value.TextureId); renderer.material.mainTexture = null; renderer.enabled = false; } #if DEBUG_LOG Debug.Log("DEBUG: remove tile: " + pair.Key); #endif tiles.Remove(tileAddress); tileCache.Add(tile); } }
/// <summary> /// Checks if a tile is fully visible /// </summary> /// <returns><c>true</c>, if the tile exists, <c>false</c> otherwise.</returns> /// <param name="tileRoundedZoom">Tile rounded zoom.</param> /// <param name="tileX">Tile x.</param> /// <param name="tileY">Tile y.</param> private bool CheckTileExistence(int tileRoundedZoom, int tileX, int tileY) { string key = TileBehaviour.GetTileKey(tileRoundedZoom, tileX, tileY); if (!tiles.ContainsKey(key)) { return(true); // the tile is out of the frustum } TileBehaviour tile = tiles [key]; Renderer r = tile.GetComponent <Renderer>(); return(r.enabled && r.material.mainTexture != null && !tile.Showing); }
/// <summary> /// Implementation of <see cref="http://docs.unity3d.com/ScriptReference/MonoBehaviour.html">MonoBehaviour</see>.Start(). /// </summary> private void Start() { // create the tile template if needed if (tileTemplate == null) { Debug.Log("Shader is " + Shader); tileTemplate = TileBehaviour.CreateTileTemplate(Shader); tileTemplate.hideFlags = HideFlags.HideAndDontSave; tileTemplate.GetComponent <Renderer>().enabled = false; } ++tileTemplateUseCount; if (tileTemplate.transform.localScale.x != Map.RoundedHalfMapScale) { tileTemplate.transform.localScale = new Vector3(Map.RoundedHalfMapScale, 1.0f, Map.RoundedHalfMapScale); } }
/// <summary> /// Grows the tiles recursively starting from the map's center in all four directions. /// </summary> /// <param name="frustum">Frustum.</param> /// <param name="tileX">Tile x.</param> /// <param name="tileY">Tile y.</param> /// <param name="tileCountOnX">Tile count on x.</param> /// <param name="tileCountOnY">Tile count on y.</param> /// <param name="offsetX">Offset x.</param> /// <param name="offsetZ">Offset z.</param> void GrowTiles(Plane[] frustum, int tileX, int tileY, int tileCountOnX, int tileCountOnY, float offsetX, float offsetZ) { tileTemplate.transform.position = new Vector3(offsetX, tileTemplate.transform.position.y, offsetZ); if (GeometryUtility.TestPlanesAABB(frustum, tileTemplate.GetComponent <Collider>().bounds) == true) { if (tileX < 0) { tileX += tileCountOnX; } else if (tileX >= tileCountOnX) { tileX -= tileCountOnX; } string tileAddress = TileBehaviour.GetTileKey(Map.RoundedZoom, tileX, tileY); //Debug.Log("DEBUG: tile address: " + tileAddress); if (tiles.ContainsKey(tileAddress) == false) { TileBehaviour tile = null; if (tileCache.Count > 0) { tile = tileCache [0]; tileCache.Remove(tile); tile.transform.position = tileTemplate.transform.position; tile.transform.localScale = new Vector3(Map.RoundedHalfMapScale, 1.0f, Map.RoundedHalfMapScale); //tile.gameObject.active = this.gameObject.active; } else { tile = (GameObject.Instantiate(tileTemplate.gameObject) as GameObject).GetComponent <TileBehaviour> (); tile.transform.parent = this.gameObject.transform; } tile.name = "tile_" + tileAddress; tiles.Add(tileAddress, tile); RequestTile(tileX, tileY, Map.RoundedZoom, tile); } tileAddressLookedFor = tileAddress; if (visitedTiles.Exists(visitedTilesMatchPredicate) == false) { visitedTiles.Add(tileAddress); // grow tiles in the four directions without getting outside of the coordinate range of the zoom level int nTileX, nTileY; float nOffsetX, nOffsetZ; if (GetNeighbourTile(tileX, tileY, offsetX, offsetZ, tileCountOnX, tileCountOnY, NeighbourTileDirection.South, out nTileX, out nTileY, out nOffsetX, out nOffsetZ)) { GrowTiles(frustum, nTileX, nTileY, tileCountOnX, tileCountOnY, nOffsetX, nOffsetZ); } if (GetNeighbourTile(tileX, tileY, offsetX, offsetZ, tileCountOnX, tileCountOnY, NeighbourTileDirection.North, out nTileX, out nTileY, out nOffsetX, out nOffsetZ)) { GrowTiles(frustum, nTileX, nTileY, tileCountOnX, tileCountOnY, nOffsetX, nOffsetZ); } if (GetNeighbourTile(tileX, tileY, offsetX, offsetZ, tileCountOnX, tileCountOnY, NeighbourTileDirection.East, out nTileX, out nTileY, out nOffsetX, out nOffsetZ)) { GrowTiles(frustum, nTileX, nTileY, tileCountOnX, tileCountOnY, nOffsetX, nOffsetZ); } if (GetNeighbourTile(tileX, tileY, offsetX, offsetZ, tileCountOnX, tileCountOnY, NeighbourTileDirection.West, out nTileX, out nTileY, out nOffsetX, out nOffsetZ)) { GrowTiles(frustum, nTileX, nTileY, tileCountOnX, tileCountOnY, nOffsetX, nOffsetZ); } } } }
void SobeNoTile() { Current = CurrentTile.GetComponent <TileBehaviour>().Letra; tilespercorridos += 1; StartCoroutine(InBetween()); }