85 lines
3.3 KiB
GDScript
85 lines
3.3 KiB
GDScript
extends Control
|
|
|
|
var currentStage: String
|
|
var playing = false
|
|
var index = 0
|
|
var cam_index = 1
|
|
var loaded_frames = []
|
|
var in_flows = []
|
|
var out_flows = []
|
|
var prev_frame_held = []
|
|
var animatables_handles = []
|
|
|
|
var rotationStages = [
|
|
"Balcony Stage",
|
|
"C-Stage",
|
|
"Prototype Road Stage",
|
|
"Mini Unit 1-Stage",
|
|
"1-Stage w 2-Stage Props",
|
|
"1-Stage",
|
|
"Turntable 1-Stage",
|
|
"2-Stage",
|
|
"Cyberamic 3-Stage",
|
|
]
|
|
|
|
func _ready() -> void:
|
|
if (GlobalVariables.title_dynamic == 1):
|
|
currentStage = rotationStages[randi() % rotationStages.size()]
|
|
$SubViewport.add_child(load(Stages.stages_info[currentStage]["scene"]).instantiate())
|
|
for curtain in Stages.stages_info[currentStage]["curtains"]:
|
|
for curtain_movement in Stages.stages_info[currentStage]["curtains"][curtain]:
|
|
get_node(Stages.stages_info[currentStage]["scene_ref_base"] + curtain)._movement_in(curtain_movement + " Up", 100000)
|
|
|
|
var cosmetics_count = 0
|
|
for cosmetic_subtable in Stages.stages_info[currentStage]["cosmetics"]:
|
|
for cosmetic in cosmetic_subtable:
|
|
var cosmetic_adjustment = load("res://Scenes/GUI/Controls/CosmeticAdjustment.tscn").instantiate()
|
|
cosmetic_adjustment.vis_name = cosmetic
|
|
cosmetic_adjustment.options = cosmetic_subtable[cosmetic]
|
|
cosmetic_adjustment.scene_handle = "../../" + Stages.stages_info[currentStage]["scene_ref_base"]
|
|
cosmetic_adjustment.drop_index = Stages.stages_info[currentStage]["cosmetic_defaults"][cosmetics_count]
|
|
cosmetics_count += 1
|
|
$SuperSecretInvisibleZone.add_child(cosmetic_adjustment)
|
|
|
|
for bit_number in Stages.stages_info[currentStage]["bit_mapping"]:
|
|
var bot = Stages.stages_info[currentStage]["bit_mapping"][bit_number]["bot"]
|
|
var in_flow = Stages.stages_info[currentStage]["bit_mapping"][bit_number]["flow_in"]
|
|
var out_flow = Stages.stages_info[currentStage]["bit_mapping"][bit_number]["flow_out"]
|
|
|
|
animatables_handles.push_back(get_node(Stages.stages_info[currentStage]["scene_ref_base"] + bot))
|
|
in_flows.push_back(in_flow)
|
|
out_flows.push_back(out_flow)
|
|
prev_frame_held.push_back(false)
|
|
|
|
for frame_string in RandomMovements.Cybers:
|
|
if (frame_string == ""): continue
|
|
var check_frame_split = frame_string.split()
|
|
check_frame_split.reverse()
|
|
var unpacked_frame = []
|
|
for i in Stages.stages_info[currentStage]["bit_mapping"]:
|
|
if ((check_frame_split[(i - 1) / 4].hex_to_int() & int(pow(2, ((i - 1) % 4)))) == int(pow(2, ((i - 1) % 4)))):
|
|
unpacked_frame.push_back(true)
|
|
else: unpacked_frame.push_back(false)
|
|
loaded_frames.push_back(unpacked_frame)
|
|
playing = true
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
if (playing):
|
|
if (index >= loaded_frames.size()):
|
|
index = 0
|
|
return
|
|
var j = 0
|
|
for i in Stages.stages_info[currentStage]["bit_mapping"]:
|
|
if (loaded_frames[index][j]):
|
|
if (!prev_frame_held[j]):
|
|
animatables_handles[j]._movement_in(Stages.stages_info[currentStage]["bit_mapping"][i]["movement"], in_flows[j])
|
|
prev_frame_held[j] = true
|
|
else:
|
|
if (prev_frame_held[j]):
|
|
animatables_handles[j]._movement_out(Stages.stages_info[currentStage]["bit_mapping"][i]["movement"], in_flows[j])
|
|
prev_frame_held[j] = false
|
|
j+=1
|
|
index += 1
|
|
if (index % 1800 == 0):
|
|
cam_index += 1
|
|
get_node(Stages.stages_info[currentStage]["scene_ref_base"] + "Angle " + str((cam_index % Stages.stages_info[currentStage]["camera_count"])+1)).current = true
|