Beispiel #1
0
        /// <summary>
        /// converts from hexagonal tile to world position
        /// </summary>
        /// <returns>The to world position.</returns>
        /// <param name="x">The x coordinate.</param>
        /// <param name="y">The y coordinate.</param>
        private Vector2 HexagonalTileToWorldPosition(int x, int y)
        {
            var offsetHex     = new OffsetHex(x, y);
            var worldPosition = OffsetHexCoordinatesToScreenPoint(offsetHex);

            return(worldPosition);
        }
 void Awake()
 {
     Main = this;
     if (ReferenceEquals(meshFilter, null))
     {
         meshFilter = GetComponent <MeshFilter>();
         if (ReferenceEquals(meshFilter, null))
         {
             Debug.LogError("Failed to locate MeshFilter on SingleHexRender");
         }
     }
     if (ReferenceEquals(meshRenderer, null))
     {
         meshRenderer = GetComponent <MeshRenderer>();
         if (ReferenceEquals(meshRenderer, null))
         {
             Debug.LogError("Failed to locate MeshRenderer on SingleHexRender");
         }
     }
     if (ReferenceEquals(mesh, null))
     {
         mesh = new Mesh()
         {
             name = "SingleHexRenderMesh"
         };
         meshFilter.mesh       = mesh;
         meshFilter.sharedMesh = mesh;
     }
     Current            = new OffsetHex(0, 0);
     transform.position = new Vector3(0.0f, 0.0f, -1.0f);
     goalPos            = transform.position;
     Render();
 }
Beispiel #3
0
 void Awake()
 {
     WorldMousePosition     = Vector2.zero;
     PrevWorldMousePosition = Vector2.zero;
     plane            = new Plane(Vector3.forward, Vector3.zero);
     HexMousePosition = new OffsetHex(0, 0);
 }
Beispiel #4
0
        private CubeHex ConvertOffsetCoordinatesToCube(OffsetHex offsetHex)
        {
            var q = offsetHex.q - (offsetHex.r - (offsetHex.r & 1)) / 2;
            var r = offsetHex.r;
            var s = -q - r;

            return(new CubeHex(q, r, s));
        }
Beispiel #5
0
        private Vector2 OffsetHexCoordinatesToScreenPoint(OffsetHex offsetHex)
        {
            var sizex = TileWidth / Mathf.Sqrt(3);
            var sizey = TileHeight / 2;

            var x = sizex * Mathf.Sqrt(3) * (offsetHex.q + 0.5 * (offsetHex.r & 1));
            var y = sizey * (0.0f * offsetHex.q + 3.0f / 2.0f * offsetHex.r);

            return(new Vector2((float)x + (TileWidth / 2), y + (TileHeight / 2)));
        }
Beispiel #6
0
    public void RenderContainingChunk(OffsetHex hex)
    {
        int chunkX = Mathf.FloorToInt((float)hex.col / chunkSize);
        int chunkY = Mathf.FloorToInt((float)hex.row / chunkSize);

        if (chunkX < 0 || chunkX >= chunksX || chunkY < 0 || chunkY >= chunksY)
        {
            Debug.LogError("Failed to render chunk: (" + chunkX + ", " + chunkY + "), it does not exist.");
            return;
        }
        chunks[chunkX, chunkY].RenderChunk();
    }
Beispiel #7
0
 void Update()
 {
     ray = Camera.main.ScreenPointToRay(Input.mousePosition);
     if (plane.Raycast(ray, out dist))
     {
         world = ray.GetPoint(dist);
         WorldMousePosition = new Vector2(world.x, world.y);
         if (!WorldMousePosition.Equals(PrevWorldMousePosition))
         {
             PrevWorldMousePosition = WorldMousePosition;
             HexMousePosition       = OffsetHex.FromPixel(WorldHandler.Main.hexSize, WorldMousePosition.x, WorldMousePosition.y);
         }
     }
 }
 void Update()
 {
     if (!MouseHandler.HexMousePosition.Equals(prevHex))
     {
         prevHex = MouseHandler.HexMousePosition;
         int     col = Mathf.Clamp(MouseHandler.HexMousePosition.col, 0, WorldHandler.Main.GetMaxX());
         int     row = Mathf.Clamp(MouseHandler.HexMousePosition.row, 0, WorldHandler.Main.GetMaxY());
         Vector2 s   = (Current = new OffsetHex(col, row)).ToPixel(WorldHandler.Main.hexSize);
         goalPos = new Vector3(s.x, s.y, -1.0f);
     }
     transform.position = Vector3.SmoothDamp(transform.position, goalPos, ref smoothVel, smoothing);
     if (Input.GetMouseButtonDown(0))
     {
         SelectedHex = Current;
     }
     else if (Input.GetMouseButtonDown(0))
     {
         SelectedHex = null;
     }
 }
 public static void AddFilledHex(List <Vector3> verts, List <int> inds, List <Vector2> uvs, float radius, OffsetHex hex)
 {
     AddFilledHex(verts, inds, uvs, radius, hex.ToPixel(radius));
 }
 public static void AddBorderedHex(List <Vector3> verts, List <int> inds, List <Vector2> uvs, float radius, float borderSize, OffsetHex hex)
 {
     AddBorderedHex(verts, inds, uvs, radius, borderSize, hex.ToPixel(radius));
 }
Beispiel #11
0
 public Hex(WorldHandler worldHandler, OffsetHex position, bool spawnStar, Vector2Int planets)
 {
     this.worldHandler = worldHandler;
     this.position     = position;
     star = (spawnStar) ? new Star("xyzzyx", this, Random.Range(planets.x, planets.y + 1)) : null;
 }
 // Constructor using OffsetHex
 public CubeHex(OffsetHex offsetHex)
     : this(offsetHex.X, offsetHex.Y)
 {
 }
 // Returns a HexTile based on its cube coordinates
 // See reference for info on cube coordinates
 HexTile GetHexTileByCube(CubeHex cube)
 {
     var offsetHex = new OffsetHex(cube);
     if (!IsHexWithinBounds(offsetHex.X, offsetHex.Y))
     {
         return null;
     }
     return GameBoard[offsetHex.X, offsetHex.Y];
 }