예제 #1
0
 protected void Awake()
 {
     if (tileTemplate == null)
     {
         tileTemplate           = TileBehaviour.CreateTileTemplate();
         tileTemplate.hideFlags = HideFlags.HideAndDontSave;
         tileTemplate.GetComponent <Renderer>().enabled = false;
     }
     ++tileTemplateUseCount;
 }
예제 #2
0
    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);
        }
    }
예제 #3
0
        /// <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);
            }
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
 /// <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);
     }
 }
예제 #6
0
        /// <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);
                    }
                }
            }
        }
예제 #7
0
 void SobeNoTile()
 {
     Current           = CurrentTile.GetComponent <TileBehaviour>().Letra;
     tilespercorridos += 1;
     StartCoroutine(InBetween());
 }