init
This commit is contained in:
commit
18efc36800
161 changed files with 5008 additions and 0 deletions
188
scripts/game_manager.gd
Normal file
188
scripts/game_manager.gd
Normal file
|
@ -0,0 +1,188 @@
|
|||
extends Node
|
||||
class_name GameManager
|
||||
|
||||
@onready var grace_period: Timer = $GracePeriod
|
||||
@onready var event_timer: Timer = $EventTimer
|
||||
@onready var vfx = $VFX
|
||||
@onready var res_ev01 = load("res://events/event_01.tscn")
|
||||
@onready var res_ev02 = load("res://events/event_02.tscn")
|
||||
@onready var res_ev03 = load("res://events/event_03.tscn")
|
||||
@onready var res_ev04 = load("res://events/event_04.tscn")
|
||||
@onready var res_ev05 = load("res://events/event_05.tscn")
|
||||
@onready var res_ev06 = load("res://events/event_06.tscn")
|
||||
@onready var res_ev07 = load("res://events/event_07.tscn")
|
||||
@onready var res_ev08 = load("res://events/event_08.tscn")
|
||||
@onready var res_ev09 = load("res://events/event_09.tscn")
|
||||
@onready var res_ev10 = load("res://events/event_10.tscn")
|
||||
@onready var res_ev11 = load("res://events/event_11.tscn")
|
||||
@export var spinner_deadzone: float = 15 # Bad placeholder value, PLEASE TEST & FINETUNE!
|
||||
@export var text_typer: TextTyper
|
||||
|
||||
@export var dinamo: AudioStreamPlayer
|
||||
|
||||
var current_event: Node = null
|
||||
var event_running: bool = false
|
||||
var spinner_mechanic: bool = true
|
||||
var dead_spinner: bool = false
|
||||
var no_energy: bool = false
|
||||
var spinner_speed: float = 0
|
||||
var time_since_last_motion: float = 0
|
||||
|
||||
signal event_complete
|
||||
signal event_fail
|
||||
signal lights_out
|
||||
signal lights_in
|
||||
signal left_engine_on
|
||||
signal left_engine_off
|
||||
signal right_engine_on
|
||||
signal right_engine_off
|
||||
|
||||
func _ready():
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _process(delta):
|
||||
time_since_last_motion += delta
|
||||
if (abs(spinner_speed) > 0 and time_since_last_motion >= .2):
|
||||
spinner_speed = 0
|
||||
#print(spinner_speed)
|
||||
if event_running:
|
||||
event_process()
|
||||
verify_event()
|
||||
if (abs(spinner_speed) < spinner_deadzone and !dead_spinner):
|
||||
grace_period.start()
|
||||
if dinamo:
|
||||
dinamo.volume_db = -80
|
||||
dead_spinner = true
|
||||
if (abs(spinner_speed) >= spinner_deadzone and dead_spinner):
|
||||
grace_period.stop()
|
||||
dead_spinner = false
|
||||
if dinamo:
|
||||
dinamo.volume_db = -10
|
||||
if (no_energy):
|
||||
lights_in.emit()
|
||||
no_energy = false
|
||||
feedbacks()
|
||||
# DEBUG STUFF - REMOVE FOR RELEASE
|
||||
if Input.is_action_just_pressed("DEBUG_Lock_Cursor"):
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
if Input.is_action_just_pressed("DEBUG_Unlock_Cursor"):
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
spinner_speed = event.get_relative().x
|
||||
#print(spinner_speed)
|
||||
time_since_last_motion = 0
|
||||
|
||||
func feedbacks():
|
||||
if Input.is_action_just_pressed("LJ_UP") or Input.is_action_just_pressed("LJ_DOWN") \
|
||||
or Input.is_action_just_pressed("LJ_LEFT") or Input.is_action_just_pressed("LJ_RIGHT"):
|
||||
left_engine_on.emit()
|
||||
print("left engine on")
|
||||
if Input.is_action_just_pressed("RJ_UP") or Input.is_action_just_pressed("RJ_DOWN") \
|
||||
or Input.is_action_just_pressed("RJ_LEFT") or Input.is_action_just_pressed("RJ_RIGHT"):
|
||||
right_engine_on.emit()
|
||||
print("right engine on")
|
||||
if Input.is_action_just_released("LJ_UP") or Input.is_action_just_released("LJ_DOWN") \
|
||||
or Input.is_action_just_released("LJ_LEFT") or Input.is_action_just_released("LJ_RIGHT"):
|
||||
left_engine_off.emit()
|
||||
print("left engine off")
|
||||
if Input.is_action_just_released("RJ_UP") or Input.is_action_just_released("RJ_DOWN") \
|
||||
or Input.is_action_just_released("RJ_LEFT") or Input.is_action_just_released("RJ_RIGHT"):
|
||||
right_engine_off.emit()
|
||||
print("right engine off")
|
||||
|
||||
# Change the current event to "n_event".
|
||||
func insert_event(n_event: Node):
|
||||
current_event = n_event
|
||||
event_timer.wait_time = current_event.time
|
||||
event_running = true
|
||||
event_timer.start()
|
||||
print("time: " + str(event_timer.time_left))
|
||||
print(n_event.hold)
|
||||
print(n_event.press)
|
||||
print(n_event.shake)
|
||||
|
||||
if text_typer:
|
||||
text_typer.animate_text_in(n_event.dialogue)
|
||||
|
||||
func check_if_held():
|
||||
if current_event.hold.is_empty():
|
||||
return true
|
||||
var hold_ok_target = current_event.hold_ok.size()
|
||||
var hold_ok_current = 0
|
||||
for check in current_event.hold_ok:
|
||||
if check == true:
|
||||
hold_ok_current += 1
|
||||
if hold_ok_current == hold_ok_target:
|
||||
return true
|
||||
else:
|
||||
return false
|
||||
|
||||
func verify_event():
|
||||
# Goals and progress.
|
||||
var press_ok_target = current_event.press_ok.size()
|
||||
var hold_ok_target = current_event.hold_ok.size()
|
||||
var shake_ok_target = current_event.shake_ok.size()
|
||||
var press_ok_current = 0
|
||||
var hold_ok_current = 0
|
||||
var shake_ok_current = 0
|
||||
# Verify arrays only if they're used.
|
||||
if !current_event.press_ok.is_empty():
|
||||
for check in current_event.press_ok:
|
||||
if check == true:
|
||||
press_ok_current += 1
|
||||
if !current_event.hold_ok.is_empty():
|
||||
for check in current_event.hold_ok:
|
||||
if check == true:
|
||||
hold_ok_current += 1
|
||||
if !current_event.shake_ok.is_empty():
|
||||
for check in current_event.shake_ok:
|
||||
if check <= 0:
|
||||
shake_ok_current += 1
|
||||
|
||||
if press_ok_current == press_ok_target and hold_ok_current == hold_ok_target\
|
||||
and shake_ok_current == shake_ok_target:
|
||||
print("Success!")
|
||||
event_complete.emit()
|
||||
event_timer.stop()
|
||||
vfx.stop()
|
||||
vfx.play("RESET")
|
||||
event_running = false
|
||||
|
||||
func event_process():
|
||||
if !current_event.press.is_empty() and check_if_held():
|
||||
var i = 0
|
||||
for action in current_event.press:
|
||||
if Input.is_action_just_pressed(action):
|
||||
print(action + " was pressed")
|
||||
current_event.press_ok[i] = true
|
||||
i += 1
|
||||
if !current_event.hold.is_empty():
|
||||
var i = 0
|
||||
for action in current_event.hold:
|
||||
if Input.is_action_pressed(action):
|
||||
current_event.hold_ok[i] = true
|
||||
else:
|
||||
current_event.hold_ok[i] = false
|
||||
i += 1
|
||||
if !current_event.shake.is_empty() and check_if_held():
|
||||
for action in current_event.shake:
|
||||
if Input.is_action_just_pressed(action):
|
||||
current_event.shake_ok[0] -= 1
|
||||
if !current_event.shake_b.is_empty() and check_if_held():
|
||||
for action in current_event.shake_b:
|
||||
if Input.is_action_just_pressed(action):
|
||||
current_event.shake_ok[1] -= 1
|
||||
|
||||
func _on_grace_period_timeout():
|
||||
print("Lights out!")
|
||||
lights_out.emit()
|
||||
no_energy = true
|
||||
|
||||
func _on_event_timer_timeout():
|
||||
print("Failure!")
|
||||
event_fail.emit()
|
||||
vfx.stop()
|
||||
vfx.play("RESET")
|
||||
event_running = false
|
Loading…
Add table
Add a link
Reference in a new issue