37 lines
825 B
GDScript
37 lines
825 B
GDScript
# Level-of-Detail instances manager (use as Autoload, or in custom viewport)
|
|
class_name LODManager
|
|
extends Node
|
|
|
|
# -- signals --
|
|
# -- enums --
|
|
# -- constants --
|
|
# -- exported variables --
|
|
export var precision = 0.1
|
|
export var timer = 5.0
|
|
# -- public variables --
|
|
# -- private variables --
|
|
var _previous_cam = Vector3.INF
|
|
var _time = 0.0
|
|
# -- onready variables --
|
|
|
|
# -- preloads --
|
|
|
|
# -- virtual methods --
|
|
|
|
func _process(delta):
|
|
var cam := get_viewport().get_camera().global_transform.origin
|
|
_time += delta
|
|
|
|
if _time > timer or cam.distance_to(_previous_cam) > precision:
|
|
_previous_cam = cam
|
|
_time = 0.0
|
|
update_lod(cam)
|
|
|
|
# -- public methods --
|
|
|
|
func update_lod(camera_location: Vector3):
|
|
for instance in get_tree().get_nodes_in_group("thunderk-lod"):
|
|
instance.update_lod(camera_location)
|
|
|
|
# -- private methods --
|