-
Notifications
You must be signed in to change notification settings - Fork 1
/
ItemInteraction.gd
241 lines (224 loc) · 8.3 KB
/
ItemInteraction.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
class_name ItemInteraction extends Node
@export var medicine : Medicine
@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
@export var pos_hand_stealing : Vector3
@export var rot_hand_stealing : Vector3
var pos_hand_main : Vector3
var rot_hand_main : Vector3
@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
@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
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
func _ready():
pos_hand_main = pos_hand
rot_hand_main = rot_hand
func _process(delta):
LerpMovement()
var stealing = false
var stealing_fs = false
func PickupItemFromTable(itemParent : Node3D, passedItemName : String):
if (stealing): items.Counter(false)
#SET INTERACTION PERMISSIONS, HIDE CURSOR
perm.SetIndicators(false)
perm.SetInteractionPermissions(false)
perm.RevertDescriptionUI()
cursor.SetCursor(false, false)
roundManager.ClearDeskUI(true)
#GET VARIABLES
temp_itemParent = itemParent
temp_indicator = itemParent.get_child(0)
temp_interaction = itemParent.get_child(1)
#STEAL
if (stealing && stealing_fs):
hands.RemoveItem_Remote(temp_itemParent)
items.RevertItemSteal()
#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
var temp_name = temp_interaction.itemName
#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
if (!stealing): RemovePlayerItemFromGrid(temp_itemParent)
temp_itemParent.queue_free() #check where player grid index is given, and remove item from player item array, unoccupy given grid
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
InteractWith(passedItemName)
stealing = false
func InteractWith(itemName : String):
#INTERACTION
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)
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()
"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()
func EnablePermissions():
perm.SetStackInvalidIndicators()
perm.SetIndicators(true)
perm.SetInteractionPermissions(true)
perm.RevertDescriptionUI()
cursor.SetCursor(true, true)
roundManager.SetupDeskUI()
func DisableShotgun():
perm.DisableShotgun()
func DisablePermissions():
perm.SetIndicators(false)
perm.SetInteractionPermissions(false)
perm.RevertDescriptionUI()
cursor.SetCursor(false, false)
roundManager.ClearDeskUI(true)
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)