Question by
RetroSpecter · Jun 15, 2016 at 06:22 AM ·
gridgrid based game
Trying to make a grid with rectangular nodes
So I'm trying to make a grid similar to the one shown in this A* tutorial (https://www.youtube.com/watch?v=nhiFx28e7JY) but I need to create more rectangular nodes rather than perfect squares. Here is what I have so far:
//creates a grid of roomNodes based off the grid size and the room sizes
void CreateGrid() {
nodeGrid = new RoomNode[gridSizeX, gridSizeY];
Vector2 worldBottomLeft = transform.position - Vector3.right * (gridWorldSize.x) / 2 - Vector3.up * gridWorldSize.y / 2;
for (int x = 0; x < gridSizeX; x++) {
for (int y = 0; y < gridSizeY; y++) {
Vector2 worldPoint = worldBottomLeft + new Vector2(1.07f,0) * (x * nodeDiameter + nodeRadius) + Vector2.up * (y * nodeDiameter + nodeRadius); // the 1.07f accounts for the extra padding between the nodes making it more rectangular
nodeGrid[x, y] = new RoomNode(false, worldPoint, x, y, null);
}
}
}
// returns a node at a world position. If round to closest, then it will return the node closest to that position
public RoomNode nodeFromWorldPoint(Vector3 worldPos) {
float percentX = worldPos.x / gridWorldSize.x + 0.5f;
float percentY = worldPos.y / gridWorldSize.y + 0.5f;
percentX = Mathf.Clamp(percentX, 0, 1f);
percentY = Mathf.Clamp(percentY, 0, 1f);
int x = Mathf.RoundToInt((gridSizeX - 1) * percentX);
int y = Mathf.RoundToInt((gridSizeY - 1) * percentY);
return nodeGrid[x, y];
}
So far I've been able to get the spacing right, however it messes up my algorithm to transfer a position in world space to a node. Does anyone know what I can do to fix this?
Comment
Your answer
Follow this Question
Related Questions
How to make gridbased movement while also using collision? 0 Answers
Rotating a grid, 0 Answers
Destroying an object in a matrix 0 Answers
How can i make a script that generates like a "ghost" tile map 1 Answer
Move object to grid 1 Answer