92 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
extends Control
 | 
						|
 | 
						|
var currentStage: String
 | 
						|
var playing = false
 | 
						|
var initted = 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",
 | 
						|
	"Road Stage",
 | 
						|
	"Rocker Stage",
 | 
						|
	"Staten Island 1-Stage"
 | 
						|
]
 | 
						|
 | 
						|
func _ready() -> void:
 | 
						|
	if (GlobalVariables.title_dynamic == 1): init()
 | 
						|
 | 
						|
func init():
 | 
						|
	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
 | 
						|
	initted = 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
 |