Add portable RV homes and decor prototype

This commit is contained in:
Alexander Sellite 2026-08-30 21:37:26 -04:00
parent 81decf2b71
commit fe099f47dd
56 changed files with 5459 additions and 112 deletions

View file

@ -4,6 +4,7 @@ extends Control
const INPUT_OWNER: StringName = &"player_storage"
signal menu_visibility_changed(is_open: bool)
signal decorate_requested
var _player: Player
var _fishing_spot: FishingSpot
@ -14,6 +15,9 @@ var _storage_grid: GeneralInventoryGrid
var _inventory_count: Label
var _storage_count: Label
var _feedback: Label
var _title: Label
var _decorate_button: Button
var _home_access: bool = false
var _prior_movement_enabled: bool = true
var _prior_camera_enabled: bool = true
var _prior_mouse_mode: Input.MouseMode = Input.MOUSE_MODE_VISIBLE
@ -75,15 +79,34 @@ func set_world_interaction(interaction: PlayerStorageInteraction) -> void:
func open_storage() -> bool:
return _open_storage(false)
func open_storage_from_home(allow_decorating: bool = true) -> bool:
return _open_storage(true, allow_decorating)
func _open_storage(
home_access: bool,
allow_decorating: bool = false,
) -> bool:
if (
visible
or _player == null
or _interaction == null
or not _interaction.is_local_player_in_range()
or _fishing_spot == null
or not _fishing_spot.can_open_fishing_shop()
or (
not home_access
and (
_interaction == null
or not _interaction.is_local_player_in_range()
)
)
):
return false
_home_access = home_access
_title.text = "RV storage" if home_access else "private storage"
_decorate_button.visible = home_access and allow_decorating
_prior_movement_enabled = _player.is_movement_enabled()
_prior_camera_enabled = _player.is_camera_input_enabled()
_prior_mouse_mode = Input.mouse_mode
@ -112,10 +135,13 @@ func close_storage(restore_controls: bool = true) -> void:
_player.set_movement_enabled(_prior_movement_enabled)
_player.set_camera_input_enabled(_prior_camera_enabled)
Input.mouse_mode = _prior_mouse_mode
_home_access = false
menu_visibility_changed.emit(false)
func close_for_range_exit() -> void:
if _home_access:
return
close_storage()
@ -248,12 +274,20 @@ func _build_ui() -> void:
var header := HBoxContainer.new()
layout.add_child(header)
var title := Label.new()
title.text = "private storage"
title.add_theme_font_size_override("font_size", 32)
title.add_theme_color_override("font_color", UtilityPageStyle.OCEAN_TEXT_PRIMARY)
title.size_flags_horizontal = Control.SIZE_EXPAND_FILL
header.add_child(title)
_title = Label.new()
_title.text = "private storage"
_title.add_theme_font_size_override("font_size", 32)
_title.add_theme_color_override("font_color", UtilityPageStyle.OCEAN_TEXT_PRIMARY)
_title.size_flags_horizontal = Control.SIZE_EXPAND_FILL
header.add_child(_title)
_decorate_button = Button.new()
_decorate_button.text = "decorate RV"
_decorate_button.tooltip_text = "Place decor inside your RV"
_decorate_button.custom_minimum_size = Vector2(160.0, 48.0)
UtilityPageStyle.apply_ocean_button(_decorate_button)
_decorate_button.hide()
_decorate_button.pressed.connect(_request_decorating)
header.add_child(_decorate_button)
var close := Button.new()
close.text = "×"
close.tooltip_text = "Close storage"
@ -285,6 +319,13 @@ func _build_ui() -> void:
layout.add_child(_feedback)
func _request_decorating() -> void:
if not _home_access:
return
close_storage()
decorate_requested.emit()
func _build_column(parent: HBoxContainer, title_text: String) -> Dictionary:
var panel := PanelContainer.new()
panel.custom_minimum_size = Vector2(550.0, 0.0)