You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Gridmap/scripts/Grid.gd

109 lines
3.8 KiB

extends GridMap
@export var ChunkWidth: int = 128
@export var ChunkHeight: int = 128
var world = World.new(1024, 1024)
@onready var camera = $Camera3D
func _ready():
world.generate_world()
setGridChunk(0, ChunkWidth, 0, ChunkHeight)
func generateGridChunk(cameraPos: Vector3) -> void:
clear()
var chunkCenter = local_to_map(cameraPos)
var rowStart: float = chunkCenter.z - (ChunkHeight / 2)
var rowEnd: float = chunkCenter.z + (ChunkHeight / 2)
var columnStart: float = chunkCenter.x - (ChunkWidth / 2)
var columnEnd: float = chunkCenter.x + (ChunkWidth / 2)
setGridChunk(columnStart, columnEnd, rowStart, rowEnd)
func setGridChunk(columnStart: float, columnEnd: float, rowStart: float, rowEnd: float) -> void:
if columnStart < 0 :
columnStart = 0
if rowStart < 0 :
rowStart = 0
if columnEnd > world._data.width - 1 :
columnEnd = world._data.width - 2
if rowEnd > world._data.height - 1 :
rowEnd = world._data.height - 2
for mz in range(rowStart, rowEnd):
for mx in range(columnStart, columnEnd):
var my: float = world.find_elevation(Vector2(mx, mz))
var meshID
var mesh_rotation
if my > 0:
var neighbours = world.get_neighbours_4_at_same_height(Vector2(mx, mz))
match neighbours:
Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_3
mesh_rotation = Global.GRID_ROTATION[3]
Global.directions_4.LEFT:
meshID = Global.bloc_sides_id.SIDE_3
mesh_rotation = Global.GRID_ROTATION[1]
Global.directions_4.LEFT + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_2_OPPOSITE
mesh_rotation = Global.GRID_ROTATION[0]
Global.directions_4.BOTTOM:
meshID = Global.bloc_sides_id.SIDE_3
mesh_rotation = Global.GRID_ROTATION[0]
Global.directions_4.BOTTOM + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
mesh_rotation = Global.GRID_ROTATION[3]
Global.directions_4.BOTTOM + Global.directions_4.LEFT:
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
mesh_rotation = Global.GRID_ROTATION[0]
Global.directions_4.BOTTOM + Global.directions_4.LEFT + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_1
mesh_rotation = Global.GRID_ROTATION[0]
Global.directions_4.TOP:
meshID = Global.bloc_sides_id.SIDE_3
mesh_rotation = Global.GRID_ROTATION[2]
Global.directions_4.TOP + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
mesh_rotation = Global.GRID_ROTATION[2]
Global.directions_4.TOP + Global.directions_4.LEFT:
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
mesh_rotation = Global.GRID_ROTATION[1]
Global.directions_4.TOP + Global.directions_4.LEFT + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_1
mesh_rotation = Global.GRID_ROTATION[2]
Global.directions_4.TOP + Global.directions_4.BOTTOM:
meshID = Global.bloc_sides_id.SIDE_2_OPPOSITE
mesh_rotation = Global.GRID_ROTATION[1]
Global.directions_4.TOP + Global.directions_4.BOTTOM + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_1
mesh_rotation = Global.GRID_ROTATION[3]
Global.directions_4.TOP + Global.directions_4.BOTTOM + Global.directions_4.LEFT:
meshID = Global.bloc_sides_id.SIDE_1
mesh_rotation = Global.GRID_ROTATION[1]
Global.directions_4.TOP + Global.directions_4.BOTTOM + Global.directions_4.LEFT + Global.directions_4.RIGHT:
meshID = Global.bloc_sides_id.SIDE_0
mesh_rotation = Global.GRID_ROTATION[0]
0:
meshID = Global.bloc_sides_id.SIDE_4
mesh_rotation = Global.GRID_ROTATION[0]
set_cell_item( Vector3(mx, my, mz) , meshID, mesh_rotation)
func _on_MapUpdateTimer_timeout():
generateGridChunk(camera.global_transform.origin)