The tutorial's sun waits for you (Gitea #5): the afternoon goes no later than 16:30 until the torch step brings dusk
This commit is contained in:
@@ -324,12 +324,34 @@ func _process(delta: float) -> void:
|
|||||||
if d > 0.01 and d < 5.0: # (not a teleport or a respawn)
|
if d > 0.01 and d < 5.0: # (not a teleport or a respawn)
|
||||||
_count("walk", d)
|
_count("walk", d)
|
||||||
_last_pos = p
|
_last_pos = p
|
||||||
|
hold_daylight()
|
||||||
_marker_t -= delta
|
_marker_t -= delta
|
||||||
if _marker_t <= 0.0:
|
if _marker_t <= 0.0:
|
||||||
_marker_t = 0.5
|
_marker_t = 0.5
|
||||||
_marker = find_marker()
|
_marker = find_marker()
|
||||||
poll()
|
poll()
|
||||||
|
|
||||||
|
## The sun waits for you (Gitea #5): until a step that sets the clock comes
|
||||||
|
## up (the torch step, at dusk), the afternoon goes no later than
|
||||||
|
## DAYLIGHT_UNTIL, however long the earlier steps take. Then dusk comes on
|
||||||
|
## when the tutorial means it to.
|
||||||
|
const DAYLIGHT_UNTIL := 16.5
|
||||||
|
func hold_daylight() -> void:
|
||||||
|
if not active or world == null or not is_instance_valid(world) or world.day_night == null:
|
||||||
|
return
|
||||||
|
if _clock_step_reached():
|
||||||
|
return
|
||||||
|
var latest := DAYLIGHT_UNTIL / 24.0
|
||||||
|
if world.day_night.time > latest:
|
||||||
|
world.day_night.time = latest
|
||||||
|
|
||||||
|
## Whether the current step, or one before it, moves the clock on.
|
||||||
|
func _clock_step_reached() -> bool:
|
||||||
|
for i in range(mini(index + 1, steps.size())):
|
||||||
|
if Dictionary(steps[i].get("setup", {})).has("time"):
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
||||||
## Goals that are states, not events: checked twice a second.
|
## Goals that are states, not events: checked twice a second.
|
||||||
func poll() -> void:
|
func poll() -> void:
|
||||||
if not active or world == null or not is_instance_valid(world):
|
if not active or world == null or not is_instance_valid(world):
|
||||||
|
|||||||
@@ -135,6 +135,23 @@ func _starts() -> void:
|
|||||||
"\"%s\" / \"%s\"" % [pn._chapter.text, pn._title.text])
|
"\"%s\" / \"%s\"" % [pn._chapter.text, pn._title.text])
|
||||||
check(G.guide_name == "Old Tam" and pn._text.text.begins_with("Old Tam: \""), "Old Tam the hermit talks you through it: %s" % pn._text.text)
|
check(G.guide_name == "Old Tam" and pn._text.text.begins_with("Old Tam: \""), "Old Tam the hermit talks you through it: %s" % pn._text.text)
|
||||||
check(G.find_marker() == Vector3.INF, "(no marker for that one)")
|
check(G.find_marker() == Vector3.INF, "(no marker for that one)")
|
||||||
|
# Gitea #5: the sun waits for you until the torch step brings dusk.
|
||||||
|
var dn: Node = world.day_night
|
||||||
|
var t0: float = dn.time
|
||||||
|
dn.time = 19.0 / 24.0
|
||||||
|
G.hold_daylight()
|
||||||
|
check(absf(dn.time * 24.0 - G.DAYLIGHT_UNTIL) < 0.01, "early in the tutorial the afternoon goes no later than %.1f h (%.2f)" % [G.DAYLIGHT_UNTIL, dn.time * 24.0])
|
||||||
|
var torch_i := -1
|
||||||
|
for i in range(G.steps.size()):
|
||||||
|
if String(G.steps[i].id) == "torch":
|
||||||
|
torch_i = i
|
||||||
|
var was_i: int = G.index
|
||||||
|
G.index = torch_i
|
||||||
|
dn.time = 19.0 / 24.0
|
||||||
|
G.hold_daylight()
|
||||||
|
check(torch_i > 0 and absf(dn.time * 24.0 - 19.0) < 0.01, "from the torch step on, night comes as usual")
|
||||||
|
G.index = was_i
|
||||||
|
dn.time = t0
|
||||||
|
|
||||||
func _chapter_one() -> void:
|
func _chapter_one() -> void:
|
||||||
print("1. look around")
|
print("1. look around")
|
||||||
|
|||||||
Reference in New Issue
Block a user