Visual polish pass (v0.2.0): phase lighting, street lamps, marquee, dressing, night screenshots
- Phase-based lighting: sun direction/energy/color, ProceduralSkyMaterial gradient, and ambient per shift phase (GameManager.PHASE_LIGHTING), applied on phase transitions and shift start - WorldBuilder: street lamp poles with emissive bulbs + OmniLights, set_night_mode(), glowing STEP LINE marquee (Label3D + emissive bars), crosswalk stripes, planters, low-poly street trees - NPC avatars: per-seed height/brightness variation (deterministic LCG) - Denser routine traffic probabilities - capture_screenshots.gd: fast-forward to LATE phase and capture night set; README gallery is now 2x3 day+night; docs/screenshots regenerated - Version bumped to 0.2.0; build/ artifacts rebuilt; Linux binary smoke-tested - New headless tests for phased lighting config and street dressing (56 total)
This commit is contained in:
1 parent
93883334d0
commit
513f8a0f60
21 files changed
+280
-25
No files matched your search
@@ -41,6 +41,7 @@ func get_npc_controller() -> NPCController:
|
||||
|
||||
func setup(profile: NpcProfile, intent: String, seed_value: int, p_spawn: Vector3, p_target: Vector3, p_door: Vector3 = Vector3(0, 0.5, 1.2)) -> void:
|
||||
npc.setup("npc_%d" % seed_value, profile, intent, seed_value)
|
||||
_visual_seed = seed_value
|
||||
spawn_position = p_spawn
|
||||
target_position = p_target
|
||||
door_position = p_door
|
||||
@@ -66,6 +67,8 @@ func setup(profile: NpcProfile, intent: String, seed_value: int, p_spawn: Vector
|
||||
collider.position = Vector3(0, 0.8, 0)
|
||||
add_child(collider)
|
||||
|
||||
var _visual_seed := 0
|
||||
|
||||
func _build_body(npc_type: int) -> void:
|
||||
var body := MeshInstance3D.new()
|
||||
var capsule := CapsuleMesh.new()
|
||||
@@ -74,6 +77,13 @@ func _build_body(npc_type: int) -> void:
|
||||
body.mesh = capsule
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.albedo_color = TYPE_COLORS.get(npc_type, Color(0.7, 0.7, 0.7))
|
||||
# Per-seed variation: slight height and brightness differences so crowds
|
||||
# read as individuals (deterministic LCG, no RNG side effects).
|
||||
var frac := float((_visual_seed * 1103515245 + 12345) % 1000) / 1000.0
|
||||
var height_scale := 0.9 + 0.2 * frac
|
||||
body.scale = Vector3(1.0, height_scale, 1.0)
|
||||
body.position.y = (height_scale - 1.0) * 0.8
|
||||
mat.albedo_color = mat.albedo_color.lightened(0.15 * frac) if frac < 0.5 else mat.albedo_color.darkened(0.15 * (1.0 - frac))
|
||||
body.material_override = mat
|
||||
add_child(body)
|
||||
var id_tag := MeshInstance3D.new()
|
||||
|
||||
Reference in new issue
Block a user