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.
125 lines
4.8 KiB
125 lines
4.8 KiB
extends GridMap
|
|
|
|
@onready var camera = $Camera3D
|
|
|
|
@onready var entities = []
|
|
|
|
func _ready():
|
|
setFloor()
|
|
# setGridChunk(0, ChunkWidth, 0, ChunkHeight)
|
|
|
|
func setFloor():
|
|
for mz in range(0, Global.world.width - 1):
|
|
for mx in range(0, Global.world.height - 1):
|
|
var bloc = Global.world.get_bloc(Vector2(mx, mz))
|
|
var my: float = bloc.y
|
|
var meshID
|
|
var mesh_rotation
|
|
if bloc.type != 0:
|
|
var neighbours = Global.world.get_neighbours_4_at_same_height(Vector2(mx, mz))
|
|
if neighbours == Global.directions_4.RIGHT:
|
|
meshID = Global.bloc_sides_id.SIDE_3
|
|
mesh_rotation = Global.GRID_ROTATION[3]
|
|
elif neighbours == Global.directions_4.LEFT:
|
|
meshID = Global.bloc_sides_id.SIDE_3
|
|
mesh_rotation = Global.GRID_ROTATION[1]
|
|
elif neighbours == Global.directions_4.LEFT + Global.directions_4.RIGHT:
|
|
meshID = Global.bloc_sides_id.SIDE_2_OPPOSITE
|
|
mesh_rotation = Global.GRID_ROTATION[0]
|
|
elif neighbours == Global.directions_4.BOTTOM:
|
|
meshID = Global.bloc_sides_id.SIDE_3
|
|
mesh_rotation = Global.GRID_ROTATION[0]
|
|
elif neighbours == Global.directions_4.BOTTOM + Global.directions_4.RIGHT:
|
|
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
|
|
mesh_rotation = Global.GRID_ROTATION[3]
|
|
elif neighbours == Global.directions_4.BOTTOM + Global.directions_4.LEFT:
|
|
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
|
|
mesh_rotation = Global.GRID_ROTATION[0]
|
|
elif neighbours == 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]
|
|
elif neighbours == Global.directions_4.TOP:
|
|
meshID = Global.bloc_sides_id.SIDE_3
|
|
mesh_rotation = Global.GRID_ROTATION[2]
|
|
elif neighbours == Global.directions_4.TOP + Global.directions_4.RIGHT:
|
|
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
|
|
mesh_rotation = Global.GRID_ROTATION[2]
|
|
elif neighbours == Global.directions_4.TOP + Global.directions_4.LEFT:
|
|
meshID = Global.bloc_sides_id.SIDE_2_ANGLE
|
|
mesh_rotation = Global.GRID_ROTATION[1]
|
|
elif neighbours == 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]
|
|
elif neighbours == Global.directions_4.TOP + Global.directions_4.BOTTOM:
|
|
meshID = Global.bloc_sides_id.SIDE_2_OPPOSITE
|
|
mesh_rotation = Global.GRID_ROTATION[1]
|
|
elif neighbours == 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]
|
|
elif neighbours == 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]
|
|
elif neighbours == 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]
|
|
elif neighbours == 0:
|
|
meshID = Global.bloc_sides_id.SIDE_4
|
|
mesh_rotation = Global.GRID_ROTATION[0]
|
|
|
|
set_cell_item( Vector3(mx, my, mz) , meshID, mesh_rotation)
|
|
if bloc.entity != -1:
|
|
var entity = Global.world.entities[bloc.entity]
|
|
var mesh_instance = MeshInstance3D.new()
|
|
mesh_instance.mesh = CapsuleMesh.new()
|
|
mesh_instance.translate(map_to_local(Vector3(bloc.x, bloc.y, bloc.z)))
|
|
entity.moving.connect(_on_entity_moving)
|
|
entities.append(mesh_instance)
|
|
add_child(entities[entities.size()-1])
|
|
Global.world.entities[bloc.entity].move(0)
|
|
|
|
|
|
|
|
#
|
|
#func setEntities(columnStart: float, columnEnd: float, rowStart: float, rowEnd: float) -> void:
|
|
# if columnStart < 0 :
|
|
# columnStart = 0
|
|
# if rowStart < 0 :
|
|
# rowStart = 0
|
|
# if columnEnd > Global.world.width - 1 :
|
|
# columnEnd =Global.world.width - 2
|
|
# if rowEnd > Global.world.height - 1 :
|
|
# rowEnd = Global.world.height - 2
|
|
#
|
|
## var multimesh = MultiMesh.new()
|
|
#
|
|
## multimesh.transform_format = MultiMesh.TRANSFORM_3D
|
|
# var instances = []
|
|
# for mz in range(rowStart, rowEnd):
|
|
# for mx in range(columnStart, columnEnd):
|
|
# var bloc = Global.world.get_bloc(Vector2(mx, mz))
|
|
# if bloc.entity != -1:
|
|
# instances.append(map_to_local(Vector3(bloc.x, bloc.y, bloc.z)))
|
|
#
|
|
#
|
|
# multimesh.instance_count = instances.size()
|
|
# for instance_index in multimesh.instance_count:
|
|
# var transform := Transform3D()
|
|
# transform.origin = instances[instance_index]
|
|
#
|
|
# multimesh.set_instance_transform(instance_index, transform)
|
|
#
|
|
# if instances.size():
|
|
# var multimesh_instance = MultiMeshInstance3D.new()
|
|
# multimesh_instance.multimesh = multimesh
|
|
# multimeshInstances.append(multimesh_instance)
|
|
# add_child(multimeshInstances[multimeshInstances.size()-1])
|
|
#
|
|
#func _on_map_update_timer_timeout():
|
|
# pass
|
|
## generateGridChunk(camera.global_transform.origin)
|
|
|
|
|
|
|
|
func _on_entity_moving():
|
|
pass
|
|
# print("bonsoir")
|
|
|