More work on pawn select sounds and controls.

This commit is contained in:
2026-01-02 03:25:41 -05:00
parent b4910013c0
commit 9fe376e27e
21 changed files with 351 additions and 17 deletions

View File

@@ -1,6 +1,6 @@
extends Control
var pawns = [
var pawns : Array[PawnData] = [
preload("res://data/pawns/van_reily.tres"),
preload("res://data/pawns/lou_riche.tres"),
preload("res://data/pawns/tico.tres"),
@@ -8,3 +8,54 @@ var pawns = [
preload("res://data/pawns/abdoll_relin.tres"),
preload("res://data/pawns/tenrou_ugetsu.tres")
]
var selector_wait : float = 0
var selection : int = 0
var selected : int = -1
@onready var selector = %Selector
@onready var selector_start : Control = %SelectorStart
@onready var p1_pawn_display : PawnDisplay = %P1PawnDisplay
@onready var switch_sound : AudioStreamPlayer = %SwitchSound
@onready var select_sound : AudioStreamPlayer = %SelectSound
func _ready() -> void:
#Set up each pawn on bottom
#Highlight P1 pawn as 0
change_display(1, 0)
pass
func _process(delta : float) -> void:
if selected != -1:
return
if Input.is_action_just_pressed("ui_accept"):
selected = selection
selector.play_animation("selected")
select_sound.play()
if selector_wait > 0:
selector_wait -= delta
return
var input_vector = Input.get_vector("west","east","north","south")
var move_dir : Vector2 = Vector2.ZERO
if input_vector.x < 0:
move_dir.x -= 1
if input_vector.x > 0:
move_dir.x += 1
if move_dir.x != 0:
selection = wrapi(selection + sign(move_dir.x),0, len(pawns))
change_display(1, selection)
selector.position = selector_start.position + Vector2(175 * selection, 0)
switch_sound.play()
selector_wait = 0.25
func change_display(player : int, selection: int) -> void:
var pd : PawnDisplay
if player == 1:
pd = p1_pawn_display
pd.set_pawn_name(pawns[selection].name)
pd.set_traps(pawns[selection].starting_traps)

View File

@@ -0,0 +1,7 @@
extends TextureRect
@onready var qty_label : Label = $Label
func setup(type : Trap.Type, qty : int) -> void:
texture = Trap.trap_icons[type]
qty_label.text = str(qty)

View File

@@ -0,0 +1 @@
uid://qwyhu0gexeah

20
scripts/pawn_display.gd Normal file
View File

@@ -0,0 +1,20 @@
class_name PawnDisplay extends Panel
@onready var pawn_name : Label = %PawnName
@onready var trap_container : HBoxContainer = %TrapContainer
var traps : Array = []
func _ready() -> void:
for child in trap_container.get_children():
traps.append(child)
func set_traps(trap_list : Array[TrapSet]) -> void:
var tcount = 0
if len(trap_list) != 3:
return
for trap in traps:
trap.setup(trap_list[tcount].type, trap_list[tcount].qty)
tcount+=1
func set_pawn_name(name : String) -> void:
pawn_name.text = name

View File

@@ -0,0 +1 @@
uid://blljmwvft1g8m

6
scripts/pawn_selector.gd Normal file
View File

@@ -0,0 +1,6 @@
extends TextureRect
@onready var anim_player : AnimationPlayer = $AnimationPlayer
func play_animation(anim : String) -> void:
anim_player.play(anim)

View File

@@ -0,0 +1 @@
uid://cu7ho7656m6hp

View File

@@ -19,6 +19,8 @@ const disarm_trap_modal = preload("res://templates/disarm_trap_modal.tscn")
@onready var trap_sound : AudioStreamPlayer3D = $TrapSound
@onready var detonate_sound : AudioStreamPlayer3D = $DetonateSound
@onready var detect_sound : AudioStreamPlayer3D = $DetectSound
@onready var fling_sound : AudioStreamPlayer3D = $FlingSound
@onready var crash_sound : AudioStreamPlayer3D = $CrashSound
@onready var reload_sound : AudioStreamPlayer3D = $PawnBody/ReloadSound
@onready var detect_icon : Sprite3D = $DetectIcon
@@ -467,11 +469,14 @@ func fling(direction : Vector3, speed : float) -> void:
state = State.FLUNG
fling_direction = direction
fling_speed = speed
fling_sound.play()
func knockdown(direction : Vector3) -> void:
state = State.KNOCKDOWN
input_locked = true
body.look_at(Vector3(0,1,0), direction)
fling_sound.stop()
crash_sound.play()
var knockdown_tween = create_tween()
knockdown_tween.tween_interval(1.5)
knockdown_tween.tween_property(self, "state", State.NORMAL, 0)

View File

@@ -23,6 +23,10 @@ func _ready() -> void:
]
add_child(player)
generate_trap(Trap.Type.FORCE_PANEL, Vector3(-1, 0, 0), Vector3i(5,0,2))
generate_trap(Trap.Type.FORCE_PANEL, Vector3(0, 0, -1), Vector3i(-3,0,2))
generate_trap(Trap.Type.MINE, Vector3(0, 0, 0), Vector3i(-3,0,-4))
generate_trap(Trap.Type.BOMB, Vector3(0, 0, 0), Vector3i(-2,0,-4))
generate_trap(Trap.Type.BOMB, Vector3(0, 0, 0), Vector3i(-4,0,-4))
player.setup(traps)
func is_square_detected(crd) -> bool:

View File

@@ -30,6 +30,7 @@ const bomb_explosion_template = preload("res://templates/explosion.tscn")
const mine_explosion_template = preload("res://templates/explosion.tscn")
const switch_explosion_template = preload("res://templates/explosion.tscn")
const gas_emitter_template = preload("res://templates/gas_emitter.tscn")
const force_activate_sound = preload("res://audio/sounds/TomWinandySFX_UI_ScifiTech_Start_06.wav")
@onready var range_area : Area3D = %RangeArea
@onready var range_shape : BoxShape3D = %RangeShape.shape
@@ -107,7 +108,7 @@ func _ready() -> void:
Type.FORCE_PANEL:
var r : float = atan2(direction.z, -direction.x) + PI/2
force_strip.rotate_y(r)
force_strip.visible = true
force_strip.visible = owns_trap
func _process(delta: float) -> void:
just_revealed = false
@@ -119,6 +120,7 @@ func activate() -> void:
var explode : bool = false
match(type):
Type.FORCE_PANEL:
Game.oneshot(force_activate_sound)
for body in get_overlapping_bodies():
body.fling(direction, 5.0)
Type.MINE: