28 lines
948 B
GDScript
28 lines
948 B
GDScript
@tool
|
|
extends Sprite3D
|
|
|
|
|
|
@export var rotations : Dictionary[float,Texture2D]
|
|
|
|
func _process(delta: float) -> void:
|
|
var camera = get_viewport().get_camera_3d()
|
|
if Engine.is_editor_hint():
|
|
camera = EditorInterface.get_editor_viewport_3d().get_camera_3d()
|
|
# Angle between camera's -basis.z (forward direction) and direction to camera
|
|
var angle = vec3_to_vec2(global_transform.basis.z).angle_to(vec3_to_vec2(global_position - camera.global_position)) + PI
|
|
var chosen_index = 0
|
|
for i in rotations.keys():
|
|
if abs(angle-i) < abs(angle-chosen_index):
|
|
chosen_index = i
|
|
texture = rotations[chosen_index]
|
|
|
|
@export_tool_button("Generate entries") var generator = entry_generator
|
|
@export var rotation_count : float = 8
|
|
|
|
func entry_generator():
|
|
rotations.clear()
|
|
for i in range(rotation_count+1):
|
|
rotations[TAU/rotation_count*i] = Texture2D.new()
|
|
|
|
func vec3_to_vec2(vector : Vector3) -> Vector2:
|
|
return Vector2(vector.z,vector.x).normalized()
|