interaction wheel

cancel interaction wheel
This commit is contained in:
2024-02-28 07:12:09 -06:00
parent f87b1cfa9a
commit 50093e5937
9 changed files with 188 additions and 5 deletions

View File

@@ -1,6 +1,9 @@
class_name CellData
extends Resource
const BUILD = preload("res://data/interactions/build.tres")
const GATHER = preload("res://data/interactions/gather.tres")
@export var layer_info: Dictionary = {
Constants.TilemapLayers.CORRUPTION: false
}
@@ -27,6 +30,9 @@ func get_resource() -> GameResource:
func has_resource() -> bool:
return has_layer(Constants.TilemapLayers.ENVIRONMENT)
func has_building() -> bool:
return has_layer(Constants.TilemapLayers.BUILDINGS)
func is_corrupted() -> bool:
return layer_info[Constants.TilemapLayers.CORRUPTION]
@@ -35,7 +41,7 @@ func has_layer(layer: int) -> bool:
return layer_info.has(layer)
func interact(timer: Timer) -> void:
var is_interactable := has_resource() or has_layer(Constants.TilemapLayers.BUILDINGS)
var is_interactable := has_resource() or not has_building()
if is_interactable and not interaction_display:
timer.timeout.connect(_on_interaction_finished.bind(timer))
timer.start(3)
@@ -47,6 +53,14 @@ func interact(timer: Timer) -> void:
var tween = timer.get_tree().create_tween()
tween.tween_property(interaction_display, "value", 100, 3)
timer.get_parent().add_sibling(interaction_display)
func get_interaction_options() -> Array[Interaction]:
var interactions: Array[Interaction] = []
if has_resource():
interactions.append(GATHER)
if not has_building():
interactions.append(BUILD)
return interactions
func _on_interaction_finished(timer: Timer) -> void:
timer.timeout.disconnect(_on_interaction_finished)

5
scripts/interaction.gd Normal file
View File

@@ -0,0 +1,5 @@
extends Resource
class_name Interaction
@export var name: String
@export var image: AtlasTexture

View File

@@ -0,0 +1,24 @@
extends Node2D
class_name InteractionWheel
var interactions: Array[Interaction]
@onready var interaction_icons: Array[Node] = $Interactions.get_children()
@onready var cursor: Sprite2D = $Cursor
func initialize(interaction_location: Vector2i, interactions: Array[Interaction]) -> void:
position = Grid.grid_to_world_center(interaction_location)
self.interactions = interactions
func _ready() -> void:
for i in range(interactions.size()):
interaction_icons[i].texture = interactions[i].image
interaction_icons[i].show()
func _process(delta: float) -> void:
var selection_direction = Input.get_vector("view_left", "view_right", "view_up", "view_down")
if selection_direction:
cursor.rotation = selection_direction.angle()
cursor.show()
if Input.is_action_just_pressed("select"):
pass

View File

@@ -5,16 +5,21 @@ class_name Player
var last_direction = 0
var interaction_location: Vector2i
var _interaction_options: InteractionWheel
@onready var animation_player: AnimationPlayer = $AnimationPlayer
@onready var interaction_timer: Timer = $InteractionTimer
const INTERACTION_WHEEL = preload("res://scene/interaction_wheel.tscn")
func _physics_process(delta: float) -> void:
var input_direction := Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var input_direction := Input.get_vector("move_left", "move_right", "move_up", "move_down")
velocity = input_direction * SPEED / delta
move_and_slide()
if input_direction:
if _interaction_options:
_interaction_options.queue_free()
_interaction_options = null
animation_player.current_animation = "walk"
animation_player.play()
last_direction = input_direction.angle() + 3 * PI / 2
@@ -25,9 +30,12 @@ func _physics_process(delta: float) -> void:
animation_player.stop()
func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_accept"):
Grid.get_location_data(interaction_location).interact(interaction_timer)
print("interaction started")
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)
add_sibling(_interaction_options)
func _finished_interaction(results: Dictionary) -> void:
print("interaction finished: %s" % results)