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
@@ -1,10 +1,11 @@
|
||||
extends SceneTree
|
||||
## Dev helper: run the game windowed and capture staged screenshots for the
|
||||
## README. Saves 1600x900 PNGs to user://screenshots/.
|
||||
## README (day set + LATE-night set with street lamps and flashlight).
|
||||
## Saves 1280x720 PNGs to user://screenshots/.
|
||||
## Usage: godot --path . --script res://src/test/capture_screenshots.gd
|
||||
|
||||
const OUT_DIR := "user://screenshots"
|
||||
const MAX_FRAMES := 2400 # hard cap (~40s)
|
||||
const MAX_FRAMES := 3600 # hard cap (~60s)
|
||||
|
||||
var frames := 0
|
||||
var gm: Node = null
|
||||
@@ -39,7 +40,7 @@ func _advance() -> void:
|
||||
state_frames += 1
|
||||
match state:
|
||||
0:
|
||||
# 2s overview from the guard post.
|
||||
# 2s overview from the guard post (early morning light).
|
||||
if state_frames >= 120:
|
||||
_shoot("01-venue-overview.png")
|
||||
state = 1
|
||||
@@ -52,7 +53,6 @@ func _advance() -> void:
|
||||
state = 2
|
||||
state_frames = 0
|
||||
2:
|
||||
# Give the HUD a moment, then shoot the interaction shot.
|
||||
if state_frames >= 30:
|
||||
_shoot("02-targeting-npc.png")
|
||||
if targeted and gm != null:
|
||||
@@ -64,7 +64,6 @@ func _advance() -> void:
|
||||
_shoot("03-access-inspection.png")
|
||||
if gm != null:
|
||||
gm.hud.hide_inspection()
|
||||
# Re-target (target may have moved) before opening the radio form.
|
||||
if gm.npcs.size() > 0:
|
||||
gm.call("_cycle_nearby_target")
|
||||
gm.call("_open_radio", false)
|
||||
@@ -73,7 +72,25 @@ func _advance() -> void:
|
||||
4:
|
||||
if state_frames >= 30:
|
||||
_shoot("04-radio-report.png")
|
||||
# Close the radio form, then jump the shift to the LATE phase.
|
||||
if gm != null:
|
||||
gm.radio_panel.hide()
|
||||
gm.coordinator.elapsed_s = 750.0
|
||||
state = 5
|
||||
state_frames = 0
|
||||
5:
|
||||
# Let the phase transition (and street lamps / marquee) settle, then
|
||||
# take the night avenue shot.
|
||||
if state_frames >= 90:
|
||||
_shoot("05-late-night-avenue.png")
|
||||
if gm != null:
|
||||
gm.call("_toggle_flashlight")
|
||||
state = 6
|
||||
state_frames = 0
|
||||
6:
|
||||
if state_frames >= 40:
|
||||
_shoot("06-night-flashlight.png")
|
||||
state = 7
|
||||
quit(0)
|
||||
|
||||
func _shoot(file_name: String) -> void:
|
||||
|
||||
Reference in new issue
Block a user