2024-01-20 12:17:43 +00:00
|
|
|
class_name EndingManager extends Node
|
|
|
|
|
2024-04-05 10:52:30 +01:00
|
|
|
@export var save : SaveFileManager
|
2024-01-20 12:17:43 +00:00
|
|
|
@export var roundManager : RoundManager
|
|
|
|
@export var pp : WorldEnvironment
|
|
|
|
@export var animator_cam : AnimationPlayer
|
|
|
|
@export var animator_backdrop : AnimationPlayer
|
|
|
|
@export var cam : CameraManager
|
|
|
|
@export var blockout : Array[Node3D]
|
|
|
|
@export var viewblocker : ColorRect
|
|
|
|
@export var animator_viewblocker : AnimationPlayer
|
|
|
|
@export var animator_streetlights : AnimationPlayer
|
|
|
|
@export var music_ending : AudioStreamPlayer2D
|
|
|
|
@export var dia : DialogueEnding
|
|
|
|
@export var label_congrats : Label
|
|
|
|
@export var label_array : Array[Label]
|
|
|
|
@export var uiparent : Control
|
|
|
|
@export var animator_congrats : AnimationPlayer
|
|
|
|
@export var animator_cash : AnimationPlayer
|
|
|
|
@export var fireArray : Array[TextFire]
|
|
|
|
@export var speaker_load : AudioStreamPlayer2D
|
|
|
|
@export var speaker_ambience : AudioStreamPlayer2D
|
|
|
|
@export var cntrl_ambience : SpeakerController
|
|
|
|
@export var cntrl_endingmusic : SpeakerController
|
|
|
|
@export var animator_anykey : AnimationPlayer
|
|
|
|
@export var animator_pan : AnimationPlayer
|
2024-04-05 10:52:30 +01:00
|
|
|
@export var exitm : ExitManager
|
|
|
|
@export var ach : Achievement
|
|
|
|
@export var unlocker : Unlocker
|
|
|
|
@export var board : Board
|
2024-01-20 12:17:43 +00:00
|
|
|
var waitingForInput = false
|
|
|
|
|
2024-04-05 10:52:30 +01:00
|
|
|
#func _input(event):
|
|
|
|
# if event is InputEventKey and event.pressed:
|
|
|
|
# if (waitingForInput):
|
|
|
|
# ExitGame()
|
|
|
|
# waitingForInput = false
|
|
|
|
|
2024-04-10 19:19:04 +01:00
|
|
|
func _unhandled_input(event):
|
2024-04-05 10:52:30 +01:00
|
|
|
if (event.is_pressed()):
|
2024-01-20 12:17:43 +00:00
|
|
|
if (waitingForInput):
|
|
|
|
ExitGame()
|
|
|
|
waitingForInput = false
|
|
|
|
|
|
|
|
func BeginEnding():
|
2024-04-05 10:52:30 +01:00
|
|
|
exitm.exitAllowed = false
|
2024-01-20 12:17:43 +00:00
|
|
|
cam.moving = false
|
|
|
|
animator_pan.play("pan to brief")
|
|
|
|
music_ending.play()
|
|
|
|
AmbienceFade()
|
|
|
|
await get_tree().create_timer(10.67, false).timeout
|
|
|
|
viewblocker.visible = true
|
|
|
|
animator_viewblocker.play("snap")
|
|
|
|
animator_pan.stop()
|
|
|
|
SetupEnding()
|
|
|
|
FinalScore()
|
|
|
|
for l in label_array: l.visible = false
|
|
|
|
label_congrats.visible = false
|
|
|
|
await get_tree().create_timer(1.2, false).timeout
|
|
|
|
animator_viewblocker.play("fade out")
|
2024-04-05 10:52:30 +01:00
|
|
|
await get_tree().create_timer(3, false).timeout
|
|
|
|
ach.UnlockAchievement("ach1")
|
|
|
|
if (roundManager.endless):
|
|
|
|
if (!roundManager.doubled): ach.UnlockAchievement("ach5")
|
|
|
|
if (roundManager.doubled): ach.UnlockAchievement("ach6")
|
|
|
|
if (roundManager.endscore > 1000000): ach.UnlockAchievement("ach7")
|
|
|
|
await get_tree().create_timer(3, false).timeout
|
2024-01-20 12:17:43 +00:00
|
|
|
#SHOW UI
|
|
|
|
label_congrats.visible = true
|
|
|
|
animator_congrats.play("wobble it")
|
|
|
|
animator_cash.play("wobble it")
|
|
|
|
dia.ShowText_Forever(glob_text_congratulations)
|
|
|
|
await get_tree().create_timer(2, false).timeout
|
|
|
|
for i in fireArray:
|
|
|
|
speaker_load.pitch_scale = randf_range(.95, 1)
|
|
|
|
speaker_load.play()
|
|
|
|
await get_tree().create_timer(.15, false).timeout
|
|
|
|
await get_tree().create_timer(.5, false).timeout
|
|
|
|
for i in range(fireArray.size()):
|
|
|
|
if (i == 5):
|
|
|
|
await get_tree().create_timer(.4, false).timeout
|
|
|
|
fireArray[i].changed = true
|
|
|
|
fireArray[i].speaker.pitch_scale = .15
|
|
|
|
fireArray[i].Fire()
|
|
|
|
await get_tree().create_timer(.33, false).timeout
|
|
|
|
await get_tree().create_timer(3, false).timeout
|
|
|
|
GetInput()
|
|
|
|
|
|
|
|
func GetInput():
|
|
|
|
animator_anykey.play("flicker")
|
|
|
|
await get_tree().create_timer(.8, false).timeout
|
|
|
|
waitingForInput = true
|
|
|
|
|
|
|
|
func ExitGame():
|
|
|
|
animator_viewblocker.play("fade in")
|
|
|
|
cntrl_endingmusic.FadeOut()
|
|
|
|
cntrl_ambience.fadeDuration = 3
|
|
|
|
cntrl_ambience.FadeOut()
|
|
|
|
isActive = false
|
|
|
|
await get_tree().create_timer(4, false).timeout
|
2024-04-05 10:52:30 +01:00
|
|
|
var unlocked = FileAccess.file_exists(unlocker.savepath)
|
|
|
|
if (unlocked):
|
2024-04-10 19:19:04 +01:00
|
|
|
print("changing scene to: menu")
|
2024-04-05 10:52:30 +01:00
|
|
|
get_tree().change_scene_to_file("res://scenes/menu.tscn")
|
|
|
|
return
|
|
|
|
else:
|
|
|
|
unlocker.UnlockRoutine()
|
2024-01-20 12:17:43 +00:00
|
|
|
|
|
|
|
var isActive = true
|
|
|
|
func AmbienceFade():
|
|
|
|
await get_tree().create_timer(55, false).timeout
|
|
|
|
if (isActive):
|
|
|
|
cntrl_ambience.SnapVolume(false)
|
|
|
|
speaker_ambience.play()
|
|
|
|
cntrl_ambience.FadeIn()
|
|
|
|
|
|
|
|
func SetupEnding():
|
|
|
|
await get_tree().create_timer(.1, false).timeout
|
|
|
|
uiparent.visible = true
|
|
|
|
for b in blockout: b.visible = true
|
|
|
|
pp.environment.adjustment_brightness = 5.68
|
|
|
|
pp.environment.adjustment_contrast = 1.3
|
|
|
|
pp.environment.adjustment_saturation = .26
|
|
|
|
cam.moving = false
|
|
|
|
cam.cam.fov = 60
|
|
|
|
animator_streetlights.play("looping")
|
|
|
|
animator_backdrop.play("loop exterior")
|
|
|
|
animator_cam.play("camera loop car")
|
|
|
|
|
2024-01-28 11:58:35 +00:00
|
|
|
var endless_overwriting = false
|
|
|
|
var endless_roundsbeat = 0
|
|
|
|
var endless_score = 0
|
2024-01-20 12:17:43 +00:00
|
|
|
var glob_text_congratulations
|
2024-04-05 10:52:30 +01:00
|
|
|
var cash_gl = 0
|
2024-01-20 12:17:43 +00:00
|
|
|
func FinalScore():
|
|
|
|
var playername = roundManager.playerData.playername
|
|
|
|
var shots_fired = roundManager.playerData.stat_shotsFired
|
|
|
|
var shells_ejected = roundManager.playerData.stat_shellsEjected
|
|
|
|
var doors_kicked = roundManager.playerData.stat_doorsKicked
|
|
|
|
var cigarettes_smoked = roundManager.playerData.stat_cigSmoked
|
|
|
|
var ml_of_beer_drank = roundManager.playerData.stat_beerDrank
|
|
|
|
var max_cash = 70000
|
|
|
|
|
|
|
|
var cancer_bills = cigarettes_smoked * 220
|
|
|
|
var new_leg_bones_price = doors_kicked * 1000
|
|
|
|
var DUI_fine = ml_of_beer_drank * 1.5
|
|
|
|
var total_cash = max_cash - cancer_bills - DUI_fine
|
|
|
|
if (doors_kicked > 2): total_cash -= new_leg_bones_price
|
|
|
|
if (total_cash < 0): total_cash = 0
|
|
|
|
|
2024-01-28 11:58:35 +00:00
|
|
|
if (endless_overwriting): total_cash = endless_score
|
2024-04-05 10:52:30 +01:00
|
|
|
cash_gl = total_cash
|
|
|
|
|
2024-10-28 16:42:34 +00:00
|
|
|
var dots = "................................................................"
|
2024-04-05 10:52:30 +01:00
|
|
|
var text_congratulations = tr("CONGRATULATIONS") % [playername]
|
2024-10-28 16:42:34 +00:00
|
|
|
var text_shotsFired = tr("SHOTS FIRED") + " " + dots; label_array[0].get_child(2).text = str(shots_fired)
|
2024-10-31 16:49:01 +00:00
|
|
|
if (endless_overwriting): text_shotsFired = tr("ROUNDS BEAT") + " " + dots; label_array[0].get_child(2).text = str(endless_roundsbeat)
|
|
|
|
var text_shellsEjected = tr("SHELLS EJECTED") + " " + dots; label_array[1].get_child(2).text = str(shells_ejected)
|
|
|
|
var text_doorsKicked = tr("DOORS KICKED") + " " + dots; label_array[2].get_child(2).text = str(doors_kicked)
|
|
|
|
var text_cigSmoked = tr("CIGS SMOKED") + " " + dots; label_array[3].get_child(2).text = str(cigarettes_smoked)
|
|
|
|
var text_beerDrank = tr("ML DRANK") + " " + dots; label_array[4].get_child(2).text = str(ml_of_beer_drank)
|
2024-04-05 10:52:30 +01:00
|
|
|
var text_totalcash = tr("TOTAL CASH") + " " + str(total_cash) + " $"
|
2024-01-20 12:17:43 +00:00
|
|
|
|
2024-04-05 10:52:30 +01:00
|
|
|
#if (endless_overwriting): text_shotsFired = "rounds beat ........ " + str(endless_roundsbeat)
|
2024-01-20 12:17:43 +00:00
|
|
|
|
|
|
|
glob_text_congratulations = text_congratulations
|
|
|
|
|
|
|
|
label_array[0].text = text_shotsFired
|
|
|
|
label_array[1].text = text_shellsEjected
|
|
|
|
label_array[2].text = text_doorsKicked
|
|
|
|
label_array[3].text = text_cigSmoked
|
|
|
|
label_array[4].text = text_beerDrank
|
|
|
|
label_array[5].text = text_totalcash
|
2024-04-05 10:52:30 +01:00
|
|
|
IncrementGlobalStats()
|
2024-04-13 15:32:57 +01:00
|
|
|
if endless_overwriting && GlobalVariables.using_steam: board.UploadScore(roundManager.double_or_nothing_rounds_beat, roundManager.double_or_nothing_score, roundManager.double_or_nothing_initial_score)
|
2024-04-05 10:52:30 +01:00
|
|
|
|
|
|
|
var playerdata = {}
|
|
|
|
|
|
|
|
var statPREV_shots_fired = 0
|
|
|
|
var statPREV_shells_ejected = 0
|
|
|
|
var statPREV_doors_kicked = 0
|
|
|
|
var statPREV_cigs_smoked = 0
|
|
|
|
var statPREV_rounds_beat = 0
|
|
|
|
var statPREV_ml_drank = 0
|
|
|
|
var statPREV_total_cash = 0
|
|
|
|
|
|
|
|
var statSAVE_shots_fired
|
|
|
|
var statSAVE_shells_ejected
|
|
|
|
var statSAVE_doors_kicked
|
|
|
|
var statSAVE_cigs_smoked
|
|
|
|
var statSAVE_rounds_beat
|
|
|
|
var statSAVE_ml_drank
|
|
|
|
var statSAVE_total_cash
|
|
|
|
func IncrementGlobalStats():
|
|
|
|
LoadPlayerData()
|
|
|
|
statSAVE_shots_fired = statPREV_shots_fired + roundManager.playerData.stat_shotsFired
|
|
|
|
statSAVE_shells_ejected = statPREV_shells_ejected + roundManager.playerData.stat_shellsEjected
|
|
|
|
statSAVE_doors_kicked = statPREV_doors_kicked + roundManager.playerData.stat_doorsKicked
|
|
|
|
statSAVE_cigs_smoked = statPREV_doors_kicked + roundManager.playerData.stat_cigSmoked
|
|
|
|
statSAVE_rounds_beat = statPREV_rounds_beat + endless_roundsbeat
|
|
|
|
statSAVE_ml_drank = statPREV_ml_drank + roundManager.playerData.stat_beerDrank
|
|
|
|
statSAVE_total_cash = statPREV_total_cash + cash_gl
|
|
|
|
SavePlayerData()
|
|
|
|
|
|
|
|
func SavePlayerData():
|
|
|
|
playerdata = {
|
|
|
|
"shots_fired": statSAVE_shots_fired,
|
|
|
|
"shells_ejected": statSAVE_shells_ejected,
|
|
|
|
"doors_kicked": statSAVE_doors_kicked,
|
|
|
|
"cigs_smoked": statSAVE_cigs_smoked,
|
|
|
|
"rounds_beat": statSAVE_rounds_beat,
|
|
|
|
"ml_drank": statSAVE_ml_drank,
|
|
|
|
"total_cash": statSAVE_total_cash
|
|
|
|
}
|
|
|
|
var file = FileAccess.open(save.savePath_stats, FileAccess.WRITE)
|
|
|
|
file.store_var(playerdata)
|
|
|
|
file.close()
|
|
|
|
|
|
|
|
var temp_data
|
|
|
|
func LoadPlayerData():
|
|
|
|
if (FileAccess.file_exists(save.savePath_stats)):
|
|
|
|
var file = FileAccess.open(save.savePath_stats, FileAccess.READ)
|
|
|
|
temp_data = file.get_var()
|
|
|
|
statPREV_shots_fired = temp_data.shots_fired
|
|
|
|
statPREV_shells_ejected = temp_data.shells_ejected
|
|
|
|
statPREV_doors_kicked = temp_data.doors_kicked
|
|
|
|
statPREV_cigs_smoked = temp_data.cigs_smoked
|
|
|
|
statPREV_rounds_beat = temp_data.rounds_beat
|
|
|
|
statPREV_total_cash = temp_data.total_cash
|
|
|
|
statPREV_ml_drank = temp_data.ml_drank
|
|
|
|
file.close()
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|