buckshotroulette-decomp/HandManager.gd

247 lines
7.7 KiB
GDScript

class_name HandManager extends Node
@export var dealerAI : DealerIntelligence
@export var itemManager : ItemManager
@export var animator_hands : AnimationPlayer
@export var animator_dealerHeadLook : AnimationPlayer
@export var handArray_L : Array[Node3D]
@export var handArray_R : Array[Node3D]
@export var gridOffsetArray : Array[Vector3] #ITEM'S ACTIVE GRID INDEX STORED IN PICKUP INDICATOR: dealerGridIndex
@export var inter : ItemInteraction
@export var cam : CameraManager
@export var handParent_L : Node3D
@export var handParent_R : Node3D
@export var hand_defaultL : Node3D
@export var hand_defaultR : Node3D
@export var hand_cigarettepack : Node3D #L
@export var hand_beer : Node3D #L
@export var hand_medicine : Node3D #L
@export var hand_inverter : Node3D #L
@export var hand_adrenaline : Node3D #L
@export var hand_handcuffs : Node3D #R
@export var hand_handsaw : Node3D #R
@export var hand_magnifier : Node3D #R
@export var hand_burnerphone : Node3D #R
@export var lerpDuration : float
@export var handRot_left : Vector3 #hand rotation when grabing from left grids
@export var handRot_right : Vector3 #same shit
@export var parentOriginal_posL : Vector3
@export var parentOriginal_rotL : Vector3
@export var parentOriginal_posR : Vector3
@export var parentOriginal_rotR : Vector3
@export var amounts : Amounts
var moving = false
var lerping_L = false
var lerping_R = false
var pos_current
var pos_next
var rot_current
var rot_next
var elapsed = 0
var orig_pos
var orig_rot
var activeHandParent
var activeItemToGrab
func _process(delta):
LerpHandMovement()
var stealing = false
func PickupItemFromTable(itemName : String):
dealerAI.Speaker_HandCrack()
var activeIndex
var activeInstance
var whichHandToGrabWith
var whichGridSide
var matchIndex
activeItemToGrab = itemName
for i in range(itemManager.itemArray_instances_dealer.size()):
if (itemName == itemManager.itemArray_instances_dealer[i].get_child(1).itemName):
activeInstance = itemManager.itemArray_instances_dealer[i]
matchIndex = i
break
activeIndex = activeInstance.get_child(0).dealerGridIndex
ToggleHandVisible("BOTH", false)
hand_defaultL.visible = true
hand_defaultR.visible = true
if (itemName == "beer" or itemName == "cigarettes" or itemName == "expired medicine" or itemName == "inverter" or itemName == "adrenaline"): whichHandToGrabWith = "left"
else: whichHandToGrabWith = "right"
whichGridSide = activeInstance.get_child(0).whichSide
animator_hands.play("RESET")
BeginHandLerp(whichHandToGrabWith, activeIndex, whichGridSide)
if (whichGridSide == "right"): animator_dealerHeadLook.play("dealer look right")
else: animator_dealerHeadLook.play("dealer look left")
if (stealing):
if (whichGridSide == "right"): cam.BeginLerp("player item grid left")
else: cam.BeginLerp("player item grid right")
var amountArray : Array[AmountResource] = amounts.array_amounts
for res in amountArray:
if res.itemName == itemName: res.amount_player -= 1
break
await get_tree().create_timer(lerpDuration -.4, false).timeout
if (whichHandToGrabWith == "right"): hand_defaultR.visible = false
else: hand_defaultL.visible = false
dealerAI.Speaker_HandCrack()
match (itemName):
"handsaw":
hand_handsaw.visible = true
"magnifying glass":
hand_magnifier.visible = true
"handcuffs":
hand_handcuffs.visible = true
"cigarettes":
hand_cigarettepack.visible = true
itemManager.numberOfCigs_dealer -= 1
"beer":
hand_beer.visible = true
"expired medicine":
hand_medicine.visible = true
"inverter":
hand_inverter.visible = true
"burner phone":
hand_burnerphone.visible = true
"adrenaline":
hand_adrenaline.visible = true
itemManager.itemArray_instances_dealer.remove_at(matchIndex)
var tempindicator = activeInstance.get_child(0)
var gridname = tempindicator.dealerGridName
if (!stealing): itemManager.gridParentArray_enemy_available.append(gridname)
if (stealing): inter.RemovePlayerItemFromGrid(activeInstance)
activeInstance.queue_free()
await get_tree().create_timer(.2, false).timeout
ReturnHand()
if (stealing):
cam.BeginLerp("enemy")
if (whichGridSide == "right"): animator_dealerHeadLook.play("dealer look forward from right")
else: animator_dealerHeadLook.play("dealer look forward from left")
await get_tree().create_timer(lerpDuration + .01, false).timeout
HandFailsafe()
var animationName = "dealer use " + itemName
PlaySound(itemName)
animator_hands.play("RESET")
animator_hands.play(animationName)
var length = animator_hands.get_animation(animationName).get_length()
moving = false
await get_tree().create_timer(length, false).timeout
stealing = false
pass
@export var speaker_interaction : AudioStreamPlayer2D
@export var sound_adrenaline : AudioStream
@export var sound_medicine : AudioStream
@export var sound_burnerphone : AudioStream
@export var sound_inverter : AudioStream
func PlaySound(itemName : String):
match itemName:
"adrenaline":
speaker_interaction.stream = sound_adrenaline
speaker_interaction.play()
"expired medicine":
speaker_interaction.stream = sound_medicine
speaker_interaction.play()
"burner phone":
speaker_interaction.stream = sound_burnerphone
speaker_interaction.play()
"inverter":
speaker_interaction.stream = sound_inverter
speaker_interaction.play()
func RemoveItem_Remote(activeInstance : Node3D):
var activeIndex
var whichHandToGrabWith
var whichGridSide
var matchIndex
itemManager.itemArray_dealer.erase(activeInstance.get_child(1).itemName.to_lower())
itemManager.numberOfItemsGrabbed_enemy -= 1
activeIndex = activeInstance.get_child(0).dealerGridIndex
whichGridSide = activeInstance.get_child(0).whichSide
itemManager.itemArray_instances_dealer.erase(activeInstance)
var tempindicator = activeInstance.get_child(0)
var gridname = tempindicator.dealerGridName
itemManager.gridParentArray_enemy_available.append(gridname)
pass
func ToggleHandVisible(selectedHand : String, state : bool):
if (selectedHand == "L" or "BOTH"):
for i in range(handArray_L.size()):
if (state): handArray_L[i].visible = true
else: handArray_L[i].visible = false
if (selectedHand == "R" or "BOTH"):
for i in range(handArray_R.size()):
if (state): handArray_R[i].visible = true
else: handArray_R[i].visible = false
func BeginHandLerp(whichHand : String, gridIndex : int, whichSide : String):
if (whichHand == "right"): activeHandParent = handParent_R
else: activeHandParent = handParent_L
pos_current = activeHandParent.transform.origin
rot_current = activeHandParent.rotation_degrees
orig_pos = pos_current
orig_rot = rot_current
pos_next = gridOffsetArray[gridIndex]
lerping_L = false
lerping_R = false
if(whichSide == "right"): rot_next = handRot_right
else: rot_next = handRot_left
if(whichHand == "right"): lerping_R = true
else: lerping_L = true
elapsed = 0
moving = true
func ReturnHand():
pos_current = activeHandParent.transform.origin
rot_current = activeHandParent.rotation_degrees
pos_next = orig_pos
rot_next = orig_rot
elapsed = 0
moving = true
func HandFailsafe():
handParent_L.transform.origin = parentOriginal_posL
handParent_L.rotation_degrees = parentOriginal_rotL
handParent_R.transform.origin = parentOriginal_posR
handParent_R.rotation_degrees = parentOriginal_rotR
func LerpHandMovement():
if (moving):
elapsed += get_process_delta_time()
var c = clampf(elapsed / lerpDuration, 0.0, 1.0)
c = ease(c, 0.2)
if (lerping_L):
var pos = lerp(pos_current, pos_next, c)
var rot = lerp(rot_current, rot_next, c)
handParent_L.transform.origin = pos
handParent_L.rotation_degrees = rot
if (lerping_R):
var pos = lerp(pos_current, pos_next, c)
var rot = lerp(rot_current, rot_next, c)
handParent_R.transform.origin = pos
handParent_R.rotation_degrees = rot
pass