UI work, placing traps, removing traps, disarming traps, new sound fx.
This commit is contained in:
103
scripts/disarm_trap_modal.gd
Normal file
103
scripts/disarm_trap_modal.gd
Normal file
@@ -0,0 +1,103 @@
|
||||
class_name DisarmTrapModal extends Control
|
||||
|
||||
|
||||
const action_value : Dictionary[String, int] = {
|
||||
"detonate" : 0,
|
||||
"lay trap" : 1,
|
||||
"detect" : 2,
|
||||
"attack" : 3
|
||||
}
|
||||
|
||||
const icon_textures : Array = [
|
||||
{
|
||||
"normal" : preload("res://visuals/images/icons/switch button.png"),
|
||||
"pressed" : preload("res://visuals/images/icons/lit switch button.png")
|
||||
},
|
||||
{
|
||||
"normal" : preload("res://visuals/images/icons/trap button.png"),
|
||||
"pressed" : preload("res://visuals/images/icons/lit trap button.png")
|
||||
},
|
||||
{
|
||||
"normal" : preload("res://visuals/images/icons/detect button.png"),
|
||||
"pressed" : preload("res://visuals/images/icons/lit detect button.png")
|
||||
},
|
||||
{
|
||||
"normal" : preload("res://visuals/images/icons/ranged attack button.png"),
|
||||
"pressed" : preload("res://visuals/images/icons/lit ranged attack button.png")
|
||||
},
|
||||
]
|
||||
|
||||
const disarm_icon_template = preload("res://templates/disarm_icon.tscn")
|
||||
const success_sound = preload("res://audio/sounds/menu select.wav")
|
||||
const fail_sound = preload("res://audio/sounds/134688__otbtechno__bike-bell.wav")
|
||||
const progress_sound = preload("res://audio/sounds/BUTTON Generic Metal Medium High Mechanics 02.wav")
|
||||
|
||||
@onready var confirmation_dialog : ConfirmationDialog = %ConfirmationDialog
|
||||
@onready var disarm_window : PanelContainer = %DisarmWindow
|
||||
@onready var disarm_button_container : HBoxContainer = %DisarmContainer
|
||||
@onready var timer : Timer = %Timer
|
||||
@onready var timer_label : Label = %TimerLabel
|
||||
|
||||
|
||||
var square : Vector3i
|
||||
var disarm_icons : Array[TextureButton]
|
||||
var disarm_buttons : Array[int]
|
||||
var progress : int
|
||||
var disarming : bool
|
||||
|
||||
var difficulty : int = 1
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
timer_label.text = "%02d.3" % timer.time_left
|
||||
|
||||
func start_disarming() -> void:
|
||||
disarming = true
|
||||
progress = 0
|
||||
disarm_icons = []
|
||||
disarm_buttons = []
|
||||
for i in range(difficulty):
|
||||
var btn = randi_range(0,3)
|
||||
var icon : TextureButton = disarm_icon_template.instantiate()
|
||||
icon.texture_normal = icon_textures[btn].normal
|
||||
icon.texture_pressed = icon_textures[btn].pressed
|
||||
disarm_buttons.append(btn)
|
||||
disarm_icons.append(icon)
|
||||
disarm_button_container.add_child(icon)
|
||||
confirmation_dialog.visible = false
|
||||
disarm_window.visible = true
|
||||
timer.start(3 + (2 * len(disarm_buttons) * randf_range(.75, 1.25) ))
|
||||
|
||||
func try_advance(btn : int) -> void:
|
||||
|
||||
if btn == disarm_buttons[progress]:
|
||||
disarm_icons[progress].set_pressed_no_signal(true)
|
||||
progress += 1
|
||||
if progress >= len(disarm_buttons):
|
||||
Game.player.close_modal()
|
||||
Game.oneshot(success_sound)
|
||||
Game.level.disarm_trap(square)
|
||||
else:
|
||||
Game.oneshot(progress_sound)
|
||||
else:
|
||||
Game.player.close_modal()
|
||||
Game.oneshot(fail_sound)
|
||||
Game.level.activate_trap(square)
|
||||
|
||||
|
||||
func button_pressed(event : InputEventAction) -> void:
|
||||
if disarming:
|
||||
try_advance(action_value[event.action])
|
||||
else:
|
||||
match(event.action):
|
||||
"detonate":
|
||||
start_disarming()
|
||||
"attack":
|
||||
Game.player.close_modal()
|
||||
_: return
|
||||
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
Game.player.close_modal()
|
||||
Game.oneshot(fail_sound)
|
||||
Game.level.activate_trap(square)
|
||||
Reference in New Issue
Block a user