69 lines
2.2 KiB
GDScript
69 lines
2.2 KiB
GDScript
extends Node
|
|
|
|
func line(pos1: Vector3, pos2: Vector3, color = Color.WHITE_SMOKE, persist_ms = 0):
|
|
var mesh_instance := MeshInstance3D.new()
|
|
var immediate_mesh := ImmediateMesh.new()
|
|
var material := ORMMaterial3D.new()
|
|
|
|
mesh_instance.mesh = immediate_mesh
|
|
mesh_instance.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
|
|
|
immediate_mesh.surface_begin(Mesh.PRIMITIVE_LINES, material)
|
|
immediate_mesh.surface_add_vertex(pos1)
|
|
immediate_mesh.surface_add_vertex(pos2)
|
|
immediate_mesh.surface_end()
|
|
|
|
material.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
|
material.albedo_color = color
|
|
|
|
return await final_cleanup(mesh_instance, persist_ms)
|
|
|
|
func point(pos: Vector3, radius = 0.05, color = Color.WHITE_SMOKE, persist_ms = 0):
|
|
var mesh_instance := MeshInstance3D.new()
|
|
var sphere_mesh := SphereMesh.new()
|
|
var material := ORMMaterial3D.new()
|
|
|
|
mesh_instance.mesh = sphere_mesh
|
|
mesh_instance.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
|
mesh_instance.position = pos
|
|
|
|
sphere_mesh.radius = radius
|
|
sphere_mesh.height = radius*2
|
|
sphere_mesh.material = material
|
|
|
|
material.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
|
material.albedo_color = color
|
|
|
|
return await final_cleanup(mesh_instance, persist_ms)
|
|
|
|
func square(pos: Vector3, size: Vector2, color = Color.WHITE_SMOKE, persist_ms = 0):
|
|
var mesh_instance := MeshInstance3D.new()
|
|
var box_mesh := BoxMesh.new()
|
|
var material := ORMMaterial3D.new()
|
|
|
|
mesh_instance.mesh = box_mesh
|
|
mesh_instance.cast_shadow = GeometryInstance3D.SHADOW_CASTING_SETTING_OFF
|
|
mesh_instance.position = pos
|
|
|
|
box_mesh.size = Vector3(size.x, size.y, 1)
|
|
box_mesh.material = material
|
|
|
|
material.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
|
material.albedo_color = color
|
|
|
|
return await final_cleanup(mesh_instance, persist_ms)
|
|
|
|
## 1 -> Lasts ONLY for current physics frame
|
|
## >1 -> Lasts X time duration.
|
|
## <1 -> Stays indefinitely
|
|
func final_cleanup(mesh_instance: MeshInstance3D, persist_ms: float):
|
|
get_tree().get_root().add_child(mesh_instance)
|
|
if persist_ms == 1:
|
|
await get_tree().physics_frame
|
|
mesh_instance.queue_free()
|
|
elif persist_ms > 0:
|
|
await get_tree().create_timer(persist_ms).timeout
|
|
mesh_instance.queue_free()
|
|
else:
|
|
return mesh_instance
|