Skip to content

Instantly share code, notes, and snippets.

@NathoSteveo
Last active September 24, 2023 19:38
Show Gist options
  • Save NathoSteveo/9bb4d1bb58b0b6ccde7e924444a7d43a to your computer and use it in GitHub Desktop.
Save NathoSteveo/9bb4d1bb58b0b6ccde7e924444a7d43a to your computer and use it in GitHub Desktop.
@tool
extends Node3D
@export var grid_parent: Node3D
var grid_size
var block_size
@export var current_grid_size: int
@export var current_block_size: int
var grid_block = preload("res://assets/open_world/scenes/grid_block.tscn")
var grid_block_mat = preload("res://assets/open_world/shaders/grid_block.tres")
func _ready():
GlobalSignals.connect("spawn_grid_button_pressed", _spawn_grid)
GlobalSignals.connect("clear_grid_button_pressed", _clear_grid)
func _spawn_grid():
@warning_ignore("integer_division")
grid_size = GlobalSignals.grid_size / 2
block_size = GlobalSignals.block_size
current_grid_size = grid_size*2
current_block_size = block_size
# [ SPAWN GRID ]
#if grid_parent.get_child_count() == 0 and grid_size != 0:
var child_count = grid_parent.get_child_count()
var actual_grid_size = grid_size*2
if grid_size != 0:
if child_count != actual_grid_size*actual_grid_size:
var grid_block_spawn = Vector3(block_size/2,0,block_size/2)
for z in range(-grid_size, grid_size):
for x in range(-grid_size, grid_size):
var world_position = Vector3(x * block_size + grid_block_spawn.x, 0, z * block_size + grid_block_spawn.z)
var grid_block_instance = grid_block.instantiate()
grid_block_instance.transform.origin = world_position
grid_parent.add_child(grid_block_instance)
grid_block_instance.set_owner(owner)
grid_block_instance.set_display_folded(true)
set_editable_instance(grid_block_instance, true)
var parent_name = (str("block [ ",world_position.x,",",world_position.z," ]"))
grid_block_instance.name = parent_name
grid_block_instance.get_node("StaticBody3D/Label3D").text = parent_name
if block_size > 2:
grid_block_instance.get_node("StaticBody3D/CollisionShape3D/CSGBox3D").scale.x = block_size/2
grid_block_instance.get_node("StaticBody3D/CollisionShape3D/CSGBox3D").scale.y = block_size/2
grid_block_instance.get_node("StaticBody3D/CollisionShape3D/CSGBox3D").scale.z = block_size/2
grid_block_mat.uv1_scale.x = (0.5)/(block_size/2)
grid_block_mat.uv1_scale.y = (0.5)/(block_size/2)
grid_block_mat.uv1_scale.z = (0.5)/(block_size/2)
grid_block_instance.get_node("StaticBody3D").transform.origin.y = block_size/2
else:
grid_block_mat.uv1_scale.x = (0.5)
grid_block_mat.uv1_scale.y = (0.5)
grid_block_mat.uv1_scale.z = (0.5)
grid_parent.name = "[ GRID ]"
grid_parent.name = (str(grid_parent.name,"[ ",grid_parent.get_child_count()," ]"))
print("[ grid size: ",GlobalSignals.grid_size," ]")
print("[ block size: ",GlobalSignals.block_size," ]")
print("[ SPAWNED GRID ]")
print(str("[ Total blocks: ",grid_parent.get_child_count()," ]"))
func _clear_grid():
if grid_parent.get_child_count() != 0:
for i in range(grid_parent.get_child_count()):
var child_node = grid_parent.get_child(i)
child_node.queue_free()
grid_parent.name = "[ GRID ]"
print("[ CLEARED GRID ]")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment