Refactor vault camera and grid logic for improved zoom and positioning. Adjusted zoom step value, refined camera limits based on vault structure, and updated grid depth calculations. Enhanced drawing functions in vault view to include entrance visualization and corrected depth handling for pebbles and dirt rendering.
This commit is contained in:
@@ -20,6 +20,11 @@ const SHAFT := Color("#141c21")
|
||||
const RUNG := Color("#c9a227", 0.45)
|
||||
const CABIN := Color("#c9a227", 0.22)
|
||||
|
||||
const HUT_WALL := Color("#26333b")
|
||||
const HUT_ROOF := Color("#33434d")
|
||||
const HUT_DOOR := Color("#0a1014")
|
||||
const HUT_LAMP := Color("#f2b134")
|
||||
|
||||
const EMPTY_FILL := Color("#ffffff", 0.02)
|
||||
const EMPTY_LINE := Color("#ffffff", 0.06)
|
||||
const GHOST_OK := Color("#2ee6c5")
|
||||
@@ -74,6 +79,7 @@ func _draw() -> void:
|
||||
_draw_shell()
|
||||
_draw_empty_cells()
|
||||
_draw_shaft()
|
||||
_draw_entrance()
|
||||
_draw_floor_numbers()
|
||||
for room: Dictionary in grid.rooms:
|
||||
_draw_room(room)
|
||||
@@ -95,7 +101,7 @@ func _draw_dirt() -> void:
|
||||
var bounds := VaultGrid.bounds()
|
||||
var left := -MARGIN
|
||||
var right := bounds.size.x + MARGIN
|
||||
var depth := bounds.size.y + DIRT_DEPTH
|
||||
var depth := bounds.end.y + DIRT_DEPTH
|
||||
_fill_gradient(Rect2(Vector2(left, 0.0), Vector2(right - left, depth)), DIRT_TOP, DIRT_BOTTOM)
|
||||
|
||||
for pebble: Dictionary in _pebbles:
|
||||
@@ -125,7 +131,7 @@ func _generate_pebbles() -> void:
|
||||
_pebbles.append({
|
||||
"position": Vector2(
|
||||
rng.randf_range(-MARGIN, bounds.size.x + MARGIN),
|
||||
rng.randf_range(6.0, bounds.size.y + DIRT_DEPTH)
|
||||
rng.randf_range(6.0, bounds.end.y + DIRT_DEPTH)
|
||||
),
|
||||
"radius": rng.randf_range(1.5, 5.0),
|
||||
"color": Color("#000000", rng.randf_range(0.10, 0.28)),
|
||||
@@ -149,9 +155,15 @@ func _draw_empty_cells() -> void:
|
||||
|
||||
|
||||
func _draw_shaft() -> void:
|
||||
var rect := Rect2(
|
||||
Vector2(VaultGrid.ELEVATOR_COLUMN * VaultGrid.CELL.x, 0.0),
|
||||
Vector2(VaultGrid.CELL.x, VaultGrid.FLOORS * VaultGrid.CELL.y)
|
||||
var bounds := VaultGrid.bounds()
|
||||
var left := VaultGrid.ELEVATOR_COLUMN * VaultGrid.CELL.x
|
||||
# Шахта идёт от самой поверхности до низа: она связывает вход с этажами.
|
||||
var rect := Rect2(Vector2(left, 0.0), Vector2(VaultGrid.CELL.x, bounds.end.y))
|
||||
|
||||
# Ствол выше убежища обшиваем — иначе шахта висит в породе без стенок.
|
||||
draw_rect(
|
||||
Rect2(Vector2(left - 9.0, 0.0), Vector2(rect.size.x + 18.0, bounds.position.y)),
|
||||
SHELL
|
||||
)
|
||||
draw_rect(rect, SHAFT)
|
||||
|
||||
@@ -160,17 +172,58 @@ func _draw_shaft() -> void:
|
||||
draw_line(Vector2(rect.position.x + 18.0, y), Vector2(rect.end.x - 18.0, y), RUNG, 2.0)
|
||||
y += 26.0
|
||||
|
||||
# Кабина стоит на верхнем этаже.
|
||||
var cabin := Rect2(rect.position + Vector2(22.0, 14.0), Vector2(rect.size.x - 44.0, 92.0))
|
||||
# Кабина стоит на верхнем этаже убежища, а не на уровне земли.
|
||||
var cabin := Rect2(
|
||||
Vector2(rect.position.x + 22.0, bounds.position.y + 14.0),
|
||||
Vector2(rect.size.x - 44.0, 92.0)
|
||||
)
|
||||
draw_rect(cabin, CABIN)
|
||||
draw_rect(cabin, RUNG, false, 2.0)
|
||||
draw_rect(rect, OUTLINE, false, 2.0)
|
||||
|
||||
|
||||
## Будка входа на поверхности: то, что видно снаружи над шахтой.
|
||||
func _draw_entrance() -> void:
|
||||
var center_x := VaultGrid.ELEVATOR_COLUMN * VaultGrid.CELL.x + VaultGrid.CELL.x * 0.5
|
||||
var half := 96.0
|
||||
var height := 132.0
|
||||
|
||||
var body := Rect2(Vector2(center_x - half, -height), Vector2(half * 2.0, height))
|
||||
draw_rect(body, HUT_WALL)
|
||||
draw_rect(body, OUTLINE, false, 2.0)
|
||||
|
||||
var roof := Rect2(
|
||||
Vector2(center_x - half - 16.0, -height - 18.0), Vector2((half + 16.0) * 2.0, 18.0)
|
||||
)
|
||||
draw_rect(roof, HUT_ROOF)
|
||||
draw_rect(roof, OUTLINE, false, 2.0)
|
||||
|
||||
# Проём над шахтой — вход и есть устье ствола.
|
||||
var door := Rect2(Vector2(center_x - 34.0, -height + 40.0), Vector2(68.0, height - 40.0))
|
||||
draw_rect(door, HUT_DOOR)
|
||||
draw_rect(door, RUNG, false, 2.0)
|
||||
|
||||
# Лампа над дверью со скромным ореолом.
|
||||
var lamp := Vector2(center_x, -height + 24.0)
|
||||
draw_circle(lamp, 16.0, Color(HUT_LAMP, 0.10))
|
||||
draw_circle(lamp, 6.0, HUT_LAMP)
|
||||
|
||||
# Мачта на крыше — силуэт, который читается издалека.
|
||||
var mast_x := center_x + half - 22.0
|
||||
draw_line(
|
||||
Vector2(mast_x, -height - 18.0), Vector2(mast_x, -height - 86.0), HUT_ROOF, 4.0
|
||||
)
|
||||
draw_line(
|
||||
Vector2(mast_x - 14.0, -height - 62.0), Vector2(mast_x + 14.0, -height - 62.0),
|
||||
HUT_ROOF, 3.0
|
||||
)
|
||||
|
||||
|
||||
func _draw_floor_numbers() -> void:
|
||||
var font := ThemeDB.fallback_font
|
||||
for a_floor in VaultGrid.FLOORS:
|
||||
var pos := Vector2(-46.0, a_floor * VaultGrid.CELL.y + VaultGrid.CELL.y * 0.5 + 7.0)
|
||||
var row := VaultGrid.cell_rect(a_floor, 0)
|
||||
var pos := Vector2(-46.0, row.position.y + VaultGrid.CELL.y * 0.5 + 7.0)
|
||||
draw_string(font, pos, str(a_floor + 1), HORIZONTAL_ALIGNMENT_LEFT, -1, 20,
|
||||
Color("#ffffff", 0.28))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user