Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions scripts/main.gd
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ var grid_h := BOTTOM_GRID_H
var stockpile_pos := BOTTOM_STOCKPILE_POS
var anchor_family := "bottom"
var tile_size := Vector2i(56, 56)
var _last_usable_rect: Rect2i
var _dock_recheck_timer: float = 0.0
const DOCK_RECHECK_COOLDOWN := 0.5
var worker_overlay_nodes: Dictionary = {}

func make_panel_style(bg: Color, border: Color, corner_radius: int = 12) -> StyleBoxFlat:
Expand Down Expand Up @@ -274,6 +277,7 @@ func apply_dock_position() -> void:
DisplayServer.window_set_min_size(dock_size)
DisplayServer.window_set_size(dock_size)
DisplayServer.window_set_position(dock_position_for_anchor(usable_rect, dock_size, dock_anchor))
_last_usable_rect = usable_rect

func update_tile_metrics(dock_anchor: String) -> void:
var tile_px: int = tile_px_for_anchor(dock_anchor)
Expand Down Expand Up @@ -767,6 +771,16 @@ func _on_tick() -> void:

func _process(delta: float) -> void:
# Edge snapping: snap window to screen edge when dragging near boundary
# Reapply dock geometry when screen work area changes
if _dock_recheck_timer > 0.0:
_dock_recheck_timer -= delta
return
var screen_idx := DisplayServer.window_get_current_screen()
var current_usable := DisplayServer.screen_get_usable_rect(screen_idx)
if current_usable != _last_usable_rect:
_last_usable_rect = current_usable
apply_dock_position()
_dock_recheck_timer = DOCK_RECHECK_COOLDOWN
edge_snap_cooldown = maxf(edge_snap_cooldown - delta, 0.0)
var current_pos := DisplayServer.window_get_position()
var window_size := DisplayServer.window_get_size()
Expand Down
6 changes: 3 additions & 3 deletions tests/test_e2e.gd
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ func flow_boot_and_bootstrap() -> void:
var loaded = gs.load_game()
_assert_not_empty(loaded, "save/load round-trip returns data")
_assert_eq(loaded.get("tick", -1), 0, "loaded tick matches")
_assert_eq(loaded.get("save_version", -1), 1, "loaded save_version matches")
_assert_eq(loaded.get("save_version", -1), 2, "loaded save_version matches")
_assert_eq(loaded.get("resources", {}).get("wood", -1), 8, "loaded resources.wood matches")


Expand Down Expand Up @@ -280,7 +280,7 @@ func flow_tick_simulation() -> void:
var loaded = gs.load_game()
_assert_eq(loaded.get("tick", -1), 5, "tick advanced to 5")
_assert(loaded.get("events", []).size() > 0, "events populated after ticks")
_assert_eq(loaded.get("save_version", -1), 1, "save_version still 1")
_assert_eq(loaded.get("save_version", -1), 2, "save_version still 2")


# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -434,7 +434,7 @@ func flow_anchor_switching() -> void:
_assert_eq(loaded.get("tick", -1), 20, "tick preserved after anchor switch")
_assert_eq(loaded.get("resources", {}).get("wood", -1), 10, "wood preserved")
_assert_eq(loaded.get("workers", []).size(), 2, "workers preserved")
_assert_eq(loaded.get("save_version", -1), 1, "save_version preserved")
_assert_eq(loaded.get("save_version", -1), 2, "save_version preserved")

# Simulate anchor switch to "bottom"
gs.save_game(state)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_runner.gd
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ func test_save_version_tracking(gs: Node) -> void:
var loaded = gs.load_game()

_assert_not_empty(loaded, "save_version: load returned data")
_assert_eq(int(loaded.get("save_version", -1)), 1, "save_version: version is 1")
_assert_eq(int(loaded.get("save_version", -1)), 2, "save_version: version is 2")


func test_settings_roundtrip(gs: Node) -> void:
Expand Down