Added basic build menu and placement

This commit is contained in:
2024-03-06 09:25:28 -06:00
parent abde90e75f
commit ca8cfee1e8
25 changed files with 377 additions and 27 deletions

View File

@@ -6,10 +6,15 @@ class_name Player
var last_direction = 0
var interaction_location: Vector2i
var _interaction_options: InteractionWheel
var _interacting := false
var _attempting_build: Building
var _build_placement: Sprite2D
@onready var sprite: AnimatedSprite2D = $Sprite
@onready var interaction_timer: Timer = $InteractionTimer
const INTERACTION_WHEEL = preload("res://scene/interaction_wheel.tscn")
const INTERACTION_BAR = preload("res://scene/interaction_bar.tscn")
const BUILD_MENU = preload("res://scene/build_menu.tscn")
const BUILDING_BASE = preload("res://data/buildings/building_base.tscn")
func _physics_process(delta: float) -> void:
var input_direction := Input.get_vector("move_left", "move_right", "move_up", "move_down")
@@ -27,15 +32,33 @@ func _physics_process(delta: float) -> void:
Grid.set_selected_tile(interaction_location)
else:
sprite.stop()
if _build_placement:
_build_placement.position = Grid.grid_to_world_center(interaction_location)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("select") and not _interaction_options:
var interactions: Array[Interaction] = Grid.get_location_data(interaction_location).get_interaction_options()
if interactions.size() > 0:
_interaction_options = INTERACTION_WHEEL.instantiate()
_interaction_options.initialize(interaction_location, interactions)
_interaction_options.closed.connect(_on_interation_options_closed)
add_sibling(_interaction_options)
if event.is_action_pressed("interact"):
if _attempting_build and Grid.get_location_data(interaction_location).is_buildable():
var build: BuildingBase = BUILDING_BASE.instantiate()
build.initialize(_attempting_build, interaction_location)
add_sibling(build)
if not _interacting and Grid.get_location_data(interaction_location).is_interactable():
var interaction = INTERACTION_BAR.instantiate()
interaction.position = Grid.grid_to_world_center(interaction_location) - Vector2(30,10)
_interacting = true
add_sibling(interaction)
if event.is_action_pressed("build"):
var build_menu = BUILD_MENU.instantiate()
build_menu.build.connect(_on_build_menu_build)
add_sibling(build_menu)
func _on_build_menu_build(building: Building) -> void:
print("Building: %s" % building.name)
_attempting_build = building
_build_placement = Sprite2D.new()
_build_placement.texture = _attempting_build.atlas_texture
_build_placement.self_modulate = Color(1, 0, 0, 0.4)
add_sibling(_build_placement)
func _on_interation_options_closed() -> void:
_interaction_options = null