2024-01-20 12:17:43 +00:00
|
|
|
class_name ItemInteraction extends Node
|
|
|
|
|
2024-04-05 10:52:30 +01:00
|
|
|
@export var medicine : Medicine
|
2024-01-20 12:17:43 +00:00
|
|
|
@export var roundManager : RoundManager
|
|
|
|
@export var dealerIntelligence : DealerIntelligence
|
|
|
|
@export var cursor : CursorManager
|
|
|
|
@export var perm : PermissionManager
|
|
|
|
@export var itemManager : ItemManager
|
|
|
|
@export var lerpDuration : float
|
|
|
|
@export var pos_hand : Vector3
|
|
|
|
@export var rot_hand : Vector3
|
2024-04-05 10:52:30 +01:00
|
|
|
@export var pos_hand_stealing : Vector3
|
|
|
|
@export var rot_hand_stealing : Vector3
|
|
|
|
var pos_hand_main : Vector3
|
|
|
|
var rot_hand_main : Vector3
|
2024-01-20 12:17:43 +00:00
|
|
|
@export var animator_dealerHands : AnimationPlayer
|
|
|
|
@export var animator_playerHands : AnimationPlayer
|
|
|
|
@export var camera : CameraManager
|
|
|
|
@export var shellEject_player : ShellEjectManager
|
|
|
|
@export var speaker_pickup : AudioStreamPlayer2D
|
|
|
|
@export var speaker_breakcuffs : AudioStreamPlayer2D
|
2024-04-05 10:52:30 +01:00
|
|
|
@export var speaker_interaction : AudioStreamPlayer2D
|
|
|
|
@export var sound_use_burnerphone : AudioStream
|
|
|
|
@export var sound_use_inverter : AudioStream
|
|
|
|
@export var sound_use_medicine : AudioStream
|
|
|
|
@export var sound_use_adrenaline : AudioStream
|
|
|
|
@export var amounts : Amounts
|
|
|
|
@export var items: ItemManager
|
|
|
|
@export var hands : HandManager
|
2024-01-20 12:17:43 +00:00
|
|
|
|
|
|
|
var temp_itemParent
|
|
|
|
var pos_current
|
|
|
|
var pos_next
|
|
|
|
var rot_current
|
|
|
|
var rot_next
|
|
|
|
var temp_interaction
|
|
|
|
var temp_indicator
|
|
|
|
var elapsed = 0
|
|
|
|
var moving = false
|
|
|
|
|
2024-04-05 10:52:30 +01:00
|
|
|
func _ready():
|
|
|
|
pos_hand_main = pos_hand
|
|
|
|
rot_hand_main = rot_hand
|
|
|
|
|
2024-01-20 12:17:43 +00:00
|
|
|
func _process(delta):
|
|
|
|
LerpMovement()
|
|
|
|
|
2024-04-05 10:52:30 +01:00
|
|
|
var stealing = false
|
|
|
|
var stealing_fs = false
|
2024-01-20 12:17:43 +00:00
|
|
|
func PickupItemFromTable(itemParent : Node3D, passedItemName : String):
|
2024-04-05 10:52:30 +01:00
|
|
|
if (stealing): items.Counter(false)
|
2024-01-20 12:17:43 +00:00
|
|
|
#SET INTERACTION PERMISSIONS, HIDE CURSOR
|
|
|
|
perm.SetIndicators(false)
|
|
|
|
perm.SetInteractionPermissions(false)
|
|
|
|
perm.RevertDescriptionUI()
|
|
|
|
cursor.SetCursor(false, false)
|
2024-04-05 10:52:30 +01:00
|
|
|
roundManager.ClearDeskUI(true)
|
2024-01-20 12:17:43 +00:00
|
|
|
#GET VARIABLES
|
|
|
|
temp_itemParent = itemParent
|
|
|
|
temp_indicator = itemParent.get_child(0)
|
|
|
|
temp_interaction = itemParent.get_child(1)
|
2024-04-05 10:52:30 +01:00
|
|
|
#STEAL
|
|
|
|
if (stealing && stealing_fs):
|
|
|
|
hands.RemoveItem_Remote(temp_itemParent)
|
|
|
|
items.RevertItemSteal()
|
2024-01-20 12:17:43 +00:00
|
|
|
#PLAY PICKUP SOUND
|
|
|
|
speaker_pickup.stream = temp_indicator.sound_pickup
|
|
|
|
speaker_pickup.pitch_scale = randf_range(.93, 1.0)
|
|
|
|
speaker_pickup.play()
|
|
|
|
#INTERACTION PERMISSIONS
|
|
|
|
#perm.SetIndicators(false)
|
|
|
|
#cursor.SetCursor(false, false)
|
|
|
|
#perm.SetInteractionPermissions(false)
|
|
|
|
temp_indicator.lerpEnabled = false
|
|
|
|
temp_indicator.interactionAllowed = false
|
|
|
|
temp_indicator.SnapToMax()
|
|
|
|
temp_interaction.interactionAllowed = false
|
2024-04-05 10:52:30 +01:00
|
|
|
var temp_name = temp_interaction.itemName
|
2024-01-20 12:17:43 +00:00
|
|
|
#LERP
|
|
|
|
pos_current = temp_itemParent.transform.origin
|
|
|
|
rot_current = temp_itemParent.rotation_degrees
|
|
|
|
pos_next = pos_hand
|
|
|
|
rot_next = rot_hand
|
|
|
|
elapsed = 0
|
|
|
|
moving = true
|
|
|
|
await get_tree().create_timer(lerpDuration -.1, false).timeout
|
|
|
|
moving = false
|
2024-04-05 10:52:30 +01:00
|
|
|
if (!stealing): RemovePlayerItemFromGrid(temp_itemParent)
|
2024-01-20 12:17:43 +00:00
|
|
|
temp_itemParent.queue_free() #check where player grid index is given, and remove item from player item array, unoccupy given grid
|
2024-04-05 10:52:30 +01:00
|
|
|
if (stealing):
|
|
|
|
camera.BeginLerp("home")
|
|
|
|
stealing_fs = false
|
|
|
|
await get_tree().create_timer(.4, false).timeout
|
|
|
|
pos_hand = pos_hand_main
|
|
|
|
rot_hand = rot_hand_main
|
|
|
|
var amountArray : Array[AmountResource] = amounts.array_amounts
|
|
|
|
for res in amountArray:
|
|
|
|
if (res.itemName == temp_name):
|
|
|
|
res.amount_dealer -= 1
|
|
|
|
break
|
2024-01-20 12:17:43 +00:00
|
|
|
InteractWith(passedItemName)
|
2024-04-05 10:52:30 +01:00
|
|
|
stealing = false
|
2024-01-20 12:17:43 +00:00
|
|
|
|
|
|
|
func InteractWith(itemName : String):
|
|
|
|
#INTERACTION
|
2024-04-05 10:52:30 +01:00
|
|
|
var amountArray : Array[AmountResource] = amounts.array_amounts
|
|
|
|
for res in amountArray:
|
|
|
|
if (res.itemName == itemName):
|
|
|
|
res.amount_player -= 1
|
|
|
|
break
|
|
|
|
|
|
|
|
var isdup = false
|
|
|
|
for it in roundManager.playerCurrentTurnItemArray:
|
|
|
|
if (it == itemName): isdup = true; break
|
|
|
|
if (!isdup): roundManager.playerCurrentTurnItemArray.append(itemName)
|
2024-01-20 12:17:43 +00:00
|
|
|
match (itemName):
|
|
|
|
"handcuffs":
|
|
|
|
animator_dealerHands.play("dealer get handcuffed")
|
|
|
|
await get_tree().create_timer(1, false).timeout
|
|
|
|
camera.BeginLerp("enemy")
|
|
|
|
await get_tree().create_timer(1.3, false).timeout
|
|
|
|
camera.BeginLerp("dealer handcuffs")
|
|
|
|
roundManager.dealerCuffed = true
|
|
|
|
dealerIntelligence.dealerAboutToBreakFree = false
|
|
|
|
await get_tree().create_timer(1.3, false).timeout
|
|
|
|
camera.BeginLerp("home")
|
|
|
|
await get_tree().create_timer(.6, false).timeout
|
|
|
|
EnablePermissions()
|
|
|
|
"beer":
|
|
|
|
roundManager.playerData.stat_beerDrank += 330
|
|
|
|
var isFinalShell = false
|
|
|
|
if (roundManager.shellSpawner.sequenceArray.size() == 1): isFinalShell = true
|
|
|
|
animator_playerHands.play("player use beer")
|
|
|
|
await get_tree().create_timer(1.4, false).timeout
|
|
|
|
shellEject_player.FadeOutShell()
|
|
|
|
await get_tree().create_timer(4.2, false).timeout
|
|
|
|
#check if ejected last shell
|
|
|
|
if (!isFinalShell): EnablePermissions()
|
|
|
|
else:
|
|
|
|
roundManager.StartRound(true)
|
|
|
|
"magnifying glass":
|
|
|
|
animator_playerHands.play("player use magnifier")
|
|
|
|
var length = animator_playerHands.get_animation("player use magnifier").get_length()
|
|
|
|
await get_tree().create_timer(length + .2, false).timeout
|
|
|
|
EnablePermissions()
|
|
|
|
"cigarettes":
|
|
|
|
roundManager.playerData.stat_cigSmoked += 1
|
|
|
|
animator_playerHands.play("player use cigarettes")
|
|
|
|
await get_tree().create_timer(5, false).timeout
|
|
|
|
itemManager.numberOfCigs_player -= 1
|
|
|
|
EnablePermissions()
|
|
|
|
"handsaw":
|
|
|
|
animator_playerHands.play("player use handsaw")
|
|
|
|
roundManager.barrelSawedOff = true
|
|
|
|
roundManager.currentShotgunDamage = 2
|
|
|
|
await get_tree().create_timer(4.28 + .2, false).timeout
|
|
|
|
EnablePermissions()
|
2024-04-05 10:52:30 +01:00
|
|
|
"expired medicine":
|
|
|
|
PlaySound(sound_use_medicine)
|
|
|
|
animator_playerHands.play("player use expired pills")
|
|
|
|
medicine.UseMedicine()
|
|
|
|
#await get_tree().create_timer(4.28 +.2 + 4.3, false).timeout
|
|
|
|
#EnablePermissions()
|
|
|
|
"inverter":
|
|
|
|
PlaySound(sound_use_inverter)
|
|
|
|
animator_playerHands.play("player use inverter")
|
|
|
|
if (roundManager.shellSpawner.sequenceArray[0] == "live"): roundManager.shellSpawner.sequenceArray[0] = "blank"
|
|
|
|
else: roundManager.shellSpawner.sequenceArray[0] = "live"
|
|
|
|
await get_tree().create_timer(3.2, false).timeout
|
|
|
|
EnablePermissions()
|
|
|
|
"burner phone":
|
|
|
|
PlaySound(sound_use_burnerphone)
|
|
|
|
animator_playerHands.play("player use burner phone")
|
|
|
|
await get_tree().create_timer(7.9, false).timeout
|
|
|
|
EnablePermissions()
|
|
|
|
"adrenaline":
|
|
|
|
PlaySound(sound_use_adrenaline)
|
|
|
|
animator_playerHands.play("player use adrenaline")
|
|
|
|
await get_tree().create_timer(5.3 + .2, false).timeout
|
|
|
|
items.SetupItemSteal()
|
|
|
|
#EnablePermissions()
|
|
|
|
CheckAchievement_koni()
|
|
|
|
CheckAchievement_full()
|
|
|
|
|
|
|
|
@export var ach : Achievement
|
|
|
|
func CheckAchievement_koni():
|
|
|
|
if ("cigarettes" in roundManager.playerCurrentTurnItemArray and "beer" in roundManager.playerCurrentTurnItemArray and "expired medicine" in roundManager.playerCurrentTurnItemArray): ach.UnlockAchievement("ach9")
|
|
|
|
|
|
|
|
func CheckAchievement_full():
|
|
|
|
var all = ["handsaw", "magnifying glass", "beer", "cigarettes", "handcuffs", "expired medicine", "burner phone", "adrenaline", "inverter"]
|
|
|
|
var pl = roundManager.playerCurrentTurnItemArray
|
|
|
|
if (all.size() == pl.size()): ach.UnlockAchievement("ach12")
|
|
|
|
|
|
|
|
@export var anim_pp : AnimationPlayer
|
|
|
|
@export var filter : FilterController
|
|
|
|
func AdrenalineHit():
|
|
|
|
anim_pp.play("adrenaline brightness")
|
|
|
|
filter.BeginPan(filter.lowPassDefaultValue, filter.lowPassMaxValue)
|
|
|
|
await get_tree().create_timer(6, false).timeout
|
|
|
|
filter.BeginPan(filter.effect_lowPass.cutoff_hz, filter.lowPassDefaultValue)
|
|
|
|
|
|
|
|
func PlaySound(clip : AudioStream):
|
|
|
|
speaker_interaction.stream = clip
|
|
|
|
speaker_interaction.play()
|
2024-01-20 12:17:43 +00:00
|
|
|
|
|
|
|
func EnablePermissions():
|
|
|
|
perm.SetStackInvalidIndicators()
|
|
|
|
perm.SetIndicators(true)
|
|
|
|
perm.SetInteractionPermissions(true)
|
|
|
|
perm.RevertDescriptionUI()
|
|
|
|
cursor.SetCursor(true, true)
|
2024-04-05 10:52:30 +01:00
|
|
|
roundManager.SetupDeskUI()
|
|
|
|
|
|
|
|
func DisableShotgun():
|
|
|
|
perm.DisableShotgun()
|
|
|
|
|
|
|
|
func DisablePermissions():
|
|
|
|
perm.SetIndicators(false)
|
|
|
|
perm.SetInteractionPermissions(false)
|
|
|
|
perm.RevertDescriptionUI()
|
|
|
|
cursor.SetCursor(false, false)
|
|
|
|
roundManager.ClearDeskUI(true)
|
2024-01-20 12:17:43 +00:00
|
|
|
|
|
|
|
func PlaySound_BreakHandcuffs():
|
|
|
|
speaker_breakcuffs.play()
|
|
|
|
|
|
|
|
func RemovePlayerItemFromGrid(parent : Node3D):
|
|
|
|
var indic = parent.get_child(0)
|
|
|
|
var inter = parent.get_child(1)
|
|
|
|
itemManager.items_dynamicIndicatorArray.erase(indic)
|
|
|
|
itemManager.items_dynamicInteractionArray.erase(inter)
|
|
|
|
itemManager.gridOccupiedArray[inter.itemGridIndex] = false
|
|
|
|
itemManager.numberOfOccupiedGrids -= 1
|
|
|
|
|
|
|
|
func LerpMovement():
|
|
|
|
if (moving):
|
|
|
|
elapsed += get_process_delta_time()
|
|
|
|
var c = clampf(elapsed / lerpDuration, 0.0, 1.0)
|
|
|
|
#c = ease(c, 0.1)
|
|
|
|
temp_itemParent.transform.origin = lerp(pos_current, pos_next, c)
|
|
|
|
temp_itemParent.rotation_degrees = lerp(rot_current, rot_next, c)
|