More work on pawn select sounds and controls.
This commit is contained in:
@@ -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)
|
||||
|
||||
7
scripts/cs_trap_display.gd
Normal file
7
scripts/cs_trap_display.gd
Normal 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)
|
||||
1
scripts/cs_trap_display.gd.uid
Normal file
1
scripts/cs_trap_display.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://qwyhu0gexeah
|
||||
20
scripts/pawn_display.gd
Normal file
20
scripts/pawn_display.gd
Normal 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
|
||||
1
scripts/pawn_display.gd.uid
Normal file
1
scripts/pawn_display.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://blljmwvft1g8m
|
||||
6
scripts/pawn_selector.gd
Normal file
6
scripts/pawn_selector.gd
Normal file
@@ -0,0 +1,6 @@
|
||||
extends TextureRect
|
||||
|
||||
@onready var anim_player : AnimationPlayer = $AnimationPlayer
|
||||
|
||||
func play_animation(anim : String) -> void:
|
||||
anim_player.play(anim)
|
||||
1
scripts/pawn_selector.gd.uid
Normal file
1
scripts/pawn_selector.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cu7ho7656m6hp
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user