/// <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(); }
void Awake() { WorldMousePosition = Vector2.zero; PrevWorldMousePosition = Vector2.zero; plane = new Plane(Vector3.forward, Vector3.zero); HexMousePosition = new OffsetHex(0, 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)); }
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))); }
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(); }
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)); }
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]; }