40 lines
1.0 KiB
GDScript
40 lines
1.0 KiB
GDScript
@tool
|
|
|
|
extends Node3D
|
|
class_name Planet
|
|
|
|
@export var planet_data : Resource = PlanetData.new():
|
|
get:
|
|
return planet_data
|
|
set(value):
|
|
planet_data = value
|
|
on_data_changed()
|
|
if planet_data != null and not planet_data.is_connected("changed", on_data_changed):
|
|
planet_data.connect("changed", on_data_changed)
|
|
|
|
func _ready():
|
|
planet_data = PlanetData.new()
|
|
planet_data.noise_map = FastNoiseLite.new()
|
|
planet_data.noise_map.set_noise_type(FastNoiseLite.NoiseType.TYPE_SIMPLEX)
|
|
planet_data.noise_map.frequency = 1
|
|
planet_data.noise_map.fractal_octaves = 10
|
|
planet_data.planet_color = load("res://Earth-LikeGradient.tres")
|
|
on_data_changed()
|
|
|
|
func on_data_changed():
|
|
var i : int = 0
|
|
for child in get_children():
|
|
if i < 6:
|
|
(child as PlanetMeshFace).regenerate_mesh(planet_data)
|
|
else:
|
|
(child as CSGSphere3D).radius = planet_data.radius
|
|
i += 1
|
|
|
|
func _process(delta):
|
|
var i : int = 0
|
|
for child in get_children():
|
|
if i < 6:
|
|
var face := child as PlanetMeshFace
|
|
face.update_from_camera_pos(planet_data)
|
|
i += 1
|