Sync working project files - hub layout, boss roster, doc updates
This commit is contained in:
+16
-11
@@ -9,21 +9,22 @@ const ROOM_H := 540.0
|
||||
const TRANSITION_TIME := 0.25
|
||||
const ENTRY_INSET := 60.0
|
||||
|
||||
# Fixed hub layout — 6 rooms arranged as:
|
||||
# Fixed hub layout — 7 rooms arranged as:
|
||||
#
|
||||
# [Control (0,-1)]
|
||||
# |
|
||||
# [Cafe(-1,0)]-[Staging(0,0)]-[Armory(1,0)]
|
||||
# | |
|
||||
# [Shop(0,1)]----[Trophy(1,1)]
|
||||
# [Control(-1,-1)]
|
||||
# |
|
||||
# [Armory(-1,0)]-[Staging(0,0)]-[Shop(1,0)]
|
||||
# | | |
|
||||
# [Practice(-1,1)]-[Cafeteria(0,1)]-[Trophy(1,1)]
|
||||
#
|
||||
# HubRoomType: STAGING=0, ARMORY=1, CAFETERIA=2, SHOP=3, CONTROL_ROOM=4, TROPHY_ROOM=5
|
||||
# HubRoomType: STAGING=0, ARMORY=1, CAFETERIA=2, SHOP=3, CONTROL_ROOM=4, TROPHY_ROOM=5, PRACTICE=6
|
||||
const LAYOUT := [
|
||||
{"type": 0, "grid": Vector2i( 0, 0)}, # STAGING
|
||||
{"type": 4, "grid": Vector2i( 0, -1)}, # CONTROL_ROOM
|
||||
{"type": 2, "grid": Vector2i(-1, 0)}, # CAFETERIA
|
||||
{"type": 1, "grid": Vector2i( 1, 0)}, # ARMORY
|
||||
{"type": 3, "grid": Vector2i( 0, 1)}, # SHOP
|
||||
{"type": 4, "grid": Vector2i(-1, -1)}, # CONTROL_ROOM
|
||||
{"type": 1, "grid": Vector2i(-1, 0)}, # ARMORY
|
||||
{"type": 3, "grid": Vector2i( 1, 0)}, # SHOP
|
||||
{"type": 6, "grid": Vector2i(-1, 1)}, # PRACTICE
|
||||
{"type": 2, "grid": Vector2i( 0, 1)}, # CAFETERIA
|
||||
{"type": 5, "grid": Vector2i( 1, 1)}, # TROPHY_ROOM
|
||||
]
|
||||
|
||||
@@ -41,6 +42,7 @@ const DIRS := {
|
||||
@onready var camera: Camera2D = $Camera2D
|
||||
@onready var player: Node2D = $Player
|
||||
@onready var armory_ui: CanvasLayer = $ArmoryUI
|
||||
@onready var atm_ui: CanvasLayer = $AtmUI
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# State
|
||||
@@ -131,3 +133,6 @@ func _grid_to_world(grid_pos: Vector2i) -> Vector2:
|
||||
# ---------------------------------------------------------------------------
|
||||
func open_armory() -> void:
|
||||
armory_ui.open()
|
||||
|
||||
func open_atm() -> void:
|
||||
atm_ui.open()
|
||||
|
||||
@@ -11,6 +11,7 @@ enum HubRoomType {
|
||||
SHOP = 3,
|
||||
CONTROL_ROOM = 4,
|
||||
TROPHY_ROOM = 5,
|
||||
PRACTICE = 6,
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -31,6 +32,7 @@ const ROOM_NAMES := [
|
||||
"SHOP", # 3
|
||||
"CONTROL ROOM", # 4
|
||||
"TROPHY ROOM", # 5
|
||||
"PRACTICE ROOM", # 6
|
||||
]
|
||||
|
||||
const FLOOR_COLORS := [
|
||||
@@ -40,6 +42,7 @@ const FLOOR_COLORS := [
|
||||
Color(0.14, 0.10, 0.14), # SHOP — purple tint
|
||||
Color(0.08, 0.12, 0.18), # CONTROL_ROOM — blue tint
|
||||
Color(0.16, 0.14, 0.08), # TROPHY_ROOM — warm gold tint
|
||||
Color(0.12, 0.16, 0.13), # PRACTICE — muted green
|
||||
]
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -73,8 +76,11 @@ func setup(room_type: int, connections: Dictionary, hub_ref: Node) -> void:
|
||||
|
||||
if _type == HubRoomType.STAGING:
|
||||
_build_run_portal()
|
||||
_build_atm()
|
||||
elif _type == HubRoomType.ARMORY:
|
||||
_build_armory_workbench()
|
||||
elif _type == HubRoomType.PRACTICE:
|
||||
_build_practice_room()
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Wall generation (same logic as room.gd)
|
||||
@@ -256,3 +262,50 @@ func _build_run_portal() -> void:
|
||||
if b.is_in_group("player"):
|
||||
GameManager.call_deferred("start_run"))
|
||||
contents.add_child(area)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Deposit machine — shows bank balance, lets player set withdrawal for next run
|
||||
# ---------------------------------------------------------------------------
|
||||
func _build_atm() -> void:
|
||||
# Visual — grey terminal with cyan screen
|
||||
var body := Polygon2D.new()
|
||||
body.polygon = PackedVector2Array([-28, -40, 28, -40, 28, 40, -28, 40])
|
||||
body.color = Color(0.25, 0.28, 0.32)
|
||||
body.position = Vector2(200, -150)
|
||||
contents.add_child(body)
|
||||
|
||||
var screen := Polygon2D.new()
|
||||
screen.polygon = PackedVector2Array([-18, -28, 18, -28, 18, 0, -18, 0])
|
||||
screen.color = Color(0.1, 0.8, 0.9, 0.85)
|
||||
screen.position = Vector2(200, -150)
|
||||
contents.add_child(screen)
|
||||
|
||||
var lbl := Label.new()
|
||||
lbl.text = "DEPOSIT"
|
||||
lbl.position = Vector2(172, -202)
|
||||
contents.add_child(lbl)
|
||||
|
||||
var area := Area2D.new()
|
||||
area.collision_layer = 0
|
||||
area.collision_mask = 2
|
||||
|
||||
var cs := CollisionShape2D.new()
|
||||
var rs := RectangleShape2D.new()
|
||||
rs.size = Vector2(56, 80)
|
||||
cs.shape = rs
|
||||
area.add_child(cs)
|
||||
area.position = Vector2(200, -150)
|
||||
|
||||
area.body_entered.connect(func(b: Node) -> void:
|
||||
if b.is_in_group("player"):
|
||||
_hub.call_deferred("open_atm"))
|
||||
contents.add_child(area)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Practice room — placeholder until VS combat is implemented
|
||||
# ---------------------------------------------------------------------------
|
||||
func _build_practice_room() -> void:
|
||||
var lbl := Label.new()
|
||||
lbl.text = "PRACTICE ROOM — OFFLINE"
|
||||
lbl.position = Vector2(-90, -20)
|
||||
contents.add_child(lbl)
|
||||
|
||||
Reference in New Issue
Block a user