Warnings fixed: - BBCode injection (line 153): escape [ → [lb] in server text before interpolation - sort_custom on silent-drop (line 125): sort now only runs on actual insertion/replacement - clip_contents: add clip_contents=true to MonologueDisplay Control (overflow guard) - confrontation tick guard (main.gd): _last_confrontation_tick deduplicates same-tick signals - GameState decoupling: show_monologue() reads lattice_profile once and passes it through _show_line() → _build_line_node(); renderer no longer reaches into autoload (D-020) - Equal-priority eviction: >= tiebreak (was >); FIFO for equal-priority queue overflow Suggestions fixed: - Minimum duration clamp: maxf(duration, FADE_IN_SEC + 0.1) — line survives own fade-in - _label_text bounds check: guard against empty _visible before indexing [0] Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -19,8 +19,9 @@ extends Node2D
|
||||
|
||||
var _last_dialogue_npc_id: int = -1 # D-064: NPC entity_id for WalkAway input
|
||||
var _camera_anchored: bool = false
|
||||
var _last_monologue_tick: int = -1 # Prevent re-consuming monologue when same tick polled twice
|
||||
var _last_monologue_tick: int = -1 # Prevent re-consuming monologue when same tick polled twice
|
||||
var _last_dialogue_tick: int = -1
|
||||
var _last_confrontation_tick: int = -1 # Deduplicate confrontation_monologue signals within same tick
|
||||
var _known_recognition_ids: Dictionary = {} # D-067: entity_ids that have already chimed
|
||||
var _flash_rect: ColorRect = null # #502/#501: ephemeral screen flash overlay (shared: teleport preempts amber)
|
||||
var _teleport_in_progress: bool = false # #501: defer smoothing re-enable by one frame after teleport
|
||||
@@ -338,9 +339,14 @@ func _on_dialogue_option_selected(response_id: String, text: String) -> void:
|
||||
|
||||
# D-063: Handle confrontation beat monologue → show on monologue display (layer 7)
|
||||
# Confrontation lines are high-priority (3) and urgent — full opacity, elevated colour.
|
||||
# Tick guard deduplicates if dialogue box emits the signal multiple times in one tick.
|
||||
func _on_confrontation_monologue(text: String, duration: float) -> void:
|
||||
if monologue_display:
|
||||
monologue_display.show_monologue(text, duration, 3, true)
|
||||
if not monologue_display:
|
||||
return
|
||||
if GameState.current_tick == _last_confrontation_tick:
|
||||
return
|
||||
_last_confrontation_tick = GameState.current_tick
|
||||
monologue_display.show_monologue(text, duration, 3, true)
|
||||
|
||||
|
||||
# D-064: Handle walk-away → send WalkAway{npc_id} to server
|
||||
|
||||
Reference in New Issue
Block a user