Integrate per-save identity and interaction UI

This commit is contained in:
Alexander Sellite 2026-09-01 17:30:50 -04:00
parent ac82a28f3b
commit 4fda6e97f6
58 changed files with 3471 additions and 461 deletions

View file

@ -14,4 +14,5 @@ surface_water_relation = 2
population = 4
surface_population_per_100_square_meters = 0.4
maximum_surface_population = 16
sprite_pixel_size = 0.0005
sprite_pixel_size = 0.01
sprite_surface_offset = 0.11

View file

@ -20,7 +20,8 @@ scare_radius = 2.8
capture_radius = 0.7
interaction_range = 2.6
charge_duration = 2.0
sprite_pixel_size = 0.0005
sprite_pixel_size = 0.01
sprite_surface_offset = 0.11
sprite_tilt_degrees = -45.0
capture_respawn_min_seconds = 480.0
capture_respawn_max_seconds = 720.0

View file

@ -11,4 +11,5 @@ required_tool_id = &"crab_net"
surface_materials = Array[StringName]([&"sand"])
minimum_surface_y = -0.5
population = 4
sprite_pixel_size = 0.0005
sprite_pixel_size = 0.01
sprite_surface_offset = 0.11

View file

@ -11,4 +11,5 @@ required_tool_id = &"crab_net"
surface_materials = Array[StringName]([&"sand"])
minimum_surface_y = 0.08
population = 4
sprite_pixel_size = 0.0005
sprite_pixel_size = 0.01
sprite_surface_offset = 0.11

View file

@ -61,6 +61,7 @@ var surface_population_per_100_square_meters := 0.0
@export_range(0.1, 10.0, 0.05) var interaction_range: float = 2.6
@export_range(0.1, 10.0, 0.05) var charge_duration: float = 2.0
@export_range(0.0001, 0.01, 0.00005) var sprite_pixel_size: float = 0.001
@export_range(-2.0, 2.0, 0.01) var sprite_surface_offset: float = 0.11
@export_range(-90.0, 90.0, 1.0) var sprite_tilt_degrees: float = -45.0
@export_category("Respawn Budget")
@export_range(0.0, 3600.0, 1.0) var capture_respawn_min_seconds: float = 480.0
@ -117,6 +118,7 @@ func is_valid() -> bool:
and interaction_range > 0.0
and charge_duration > 0.0
and sprite_pixel_size > 0.0
and is_finite(sprite_surface_offset)
and capture_respawn_max_seconds >= capture_respawn_min_seconds
and scare_respawn_max_seconds >= scare_respawn_min_seconds
)

View file

@ -2,8 +2,6 @@ class_name WorldGatherable
extends Node3D
const GatherableDataType = preload("res://gathering/gatherable_data.gd")
const REFERENCE_SPRITE_PIXEL_SIZE: float = 0.001
const REFERENCE_SPRITE_HEIGHT: float = 0.22
const WATER_SPURT_INTERVAL_SECONDS: float = 1.15
const WATER_SPURT_COLOR := Color(0.48, 0.82, 0.84, 1.0)
const WATER_SPURT_HOLE_COLOR := Color(0.23, 0.27, 0.24, 1.0)
@ -47,11 +45,7 @@ func configure(
_sprite.position.y = (
0.0
if not data.spawn_anchor_set_id.is_empty()
else (
REFERENCE_SPRITE_HEIGHT
* data.sprite_pixel_size
/ REFERENCE_SPRITE_PIXEL_SIZE
)
else data.sprite_surface_offset
)
_sprite.rotation_degrees.x = data.sprite_tilt_degrees
@ -118,7 +112,6 @@ func _ensure_visual() -> void:
return
_sprite = Sprite3D.new()
_sprite.name = "GatherableSprite"
_sprite.position.y = REFERENCE_SPRITE_HEIGHT
_sprite.shaded = false
_sprite.double_sided = true
_sprite.billboard = BaseMaterial3D.BILLBOARD_ENABLED