#140: the objective moves behind a button next to the map's

The standing tracker #132 put on the HUD sat in the right-hand column, on
top of the dev wave button - and there is no free strip of that edge to move
it to, because everything down it is already something. So the objective
stops living on the HUD: a quest button beside the map's, and a panel when
you press it.

The panel shows the current objective, its progress, and the road behind it.
Deliberately NOT what comes next - the chain is meant to open the game up a
step at a time (#133), and a list of everything still to come is that
discovery given away on the first press.

It owns its own button, the way WorldMap owns the map button rather than
being wired through BuildController, and it hides that button during the
prologue for the same reason and in the same two places (at _ready as well
as in _process, since #128 means a dialog stops the tree before the first
_process frame ever comes).

Both scenes carry it. On a planet surface there is no map button to sit
beside, so it goes under the planet's name.

The test now checks the button is beside the map's and clear of the wave
button by rectangle rather than by eye, which is the bug the ticket reported.
This commit is contained in:
Loïc Wisniewski 2026-08-28 15:37:13 +02:00
commit 970eafc1de
7 changed files with 332 additions and 38 deletions

View file

@ -57,6 +57,10 @@ enum Icon {
PLANNING_CENTER,
# #116: the workshop and the drone it sends out. Appended, same rule.
WORKSHOP, REPAIR_DRONE,
# #140: the standing objective. Appended, same rule as everything above -
# inserting anywhere earlier renumbers every icon int already stored in
# every scene.
QUEST,
}
# Size the glyphs were originally drawn against. Every glyph dimension is
@ -313,6 +317,30 @@ func _draw() -> void:
_draw_workshop_icon(center, pulse, s)
Icon.REPAIR_DRONE:
_draw_repair_drone_icon(center, pulse, s)
Icon.QUEST:
_draw_quest_icon(center, pulse, s)
# #140: a checklist - a page with a tick against the top line. Reads as
# "what I have been asked to do" rather than as a map, a target or a flag,
# each of which this button sits next to.
func _draw_quest_icon(center: Vector2, pulse: float, s: float) -> void:
var half: Vector2 = Vector2(9.0, 12.0) * s
NeonDraw.draw_glowing_path(self, PackedVector2Array([
center + Vector2(-half.x, -half.y), center + Vector2(half.x, -half.y),
center + Vector2(half.x, half.y), center + Vector2(-half.x, half.y),
center + Vector2(-half.x, -half.y),
]), _active_color(), pulse, 0.5 * s, core_color)
# The done line, ticked; the two below it still open.
var tick: Vector2 = center + Vector2(-5.0, -5.0) * s
NeonDraw.draw_glowing_path(self, PackedVector2Array([
tick + Vector2(-1.5, 0.0) * s, tick + Vector2(0.5, 2.0) * s,
tick + Vector2(3.5, -2.5) * s,
]), _active_color(), pulse, 0.5 * s, core_color)
for row in [1.0, 5.0]:
NeonDraw.draw_glowing_line(self, center + Vector2(-5.5, row) * s,
center + Vector2(5.5, row) * s, _active_color(), pulse * 0.75,
0.4 * s, core_color)
func _draw_close(center: Vector2, pulse: float, s: float) -> void: