From fdf31f1b7e181af50de057ba512a03eb3027f7b7 Mon Sep 17 00:00:00 2001 From: Persephone Bubblegum-Holiday Date: Sat, 9 Aug 2025 21:12:40 -0700 Subject: [PATCH] change how curtains work --- Models/Stages/1-Stage/1StageCurtains.glb | Bin 27028 -> 26040 bytes Models/Stages/2-Stage/2StageCurtains.glb | Bin 27924 -> 26768 bytes Scripts/Configs/FreeRoamMaps.gd | 4 +- Scripts/Configs/Stages.gd | 4 +- Scripts/InGameMenu.gd | 3 +- Scripts/OneWayController.gd | 96 +++++++++++++++++++++-- 6 files changed, 94 insertions(+), 13 deletions(-) diff --git a/Models/Stages/1-Stage/1StageCurtains.glb b/Models/Stages/1-Stage/1StageCurtains.glb index 3233a1af2b9342aa41cccf350315cf961903ca7b..4de6ca3b3395f182d8500bd39ef005495e46b444 100644 GIT binary patch delta 69 zcmV-L0J{H_(*d~40S;$uR7L^-006jU003+Wu?_C5x=bY=7i)*)ADtSVPtAh}G)K;8~ zNYw%n85}Z9U4}adoN+=2GlajGj<#aSVG20FH z!qp3{@Ks|2{8D0ui*4Q_}4q-yp z;i?)JEKH8VniVTdEe80hS`CwB9$x&hUF-jUOoB_W=y$->kQH{`y$<*LhQh9VD#QFb JPzp1I{0Hr-obUhu diff --git a/Models/Stages/2-Stage/2StageCurtains.glb b/Models/Stages/2-Stage/2StageCurtains.glb index fb2ac958480113172de664d767c7d7f177116477..e03d6c2a5d6d6a053f26f9dc73895eae6f97558e 100644 GIT binary patch delta 90 zcmbPoi*dq5M!xi%5H}_U28Ib43=D7hH}dH*PPS*voqUr?6-Ya7c43a-+=VwzeZ;^D4o<2mlRv9hm?C delta 793 zcmbPmk#Wi`M!xi%5H}_U1_qH_28Jnu8~OAYnH53{CZA(;oLtMOGg*vLja9)VzdR2p zV#{bTxr#9aNj?x+ZZi*4H0NYKE&-r2c`mt0+$@`;xSLrfui@8WF)}kVnS6&|mfP6a z(yTVNRzV>pdNY$iUxYT$YKHVQHU}Wp0K^QuUI@1HH&zFrPy-M%e9d8&hA_ycE8c>Dv-wqg1TXS?3`0B1L3 zzJas%?tBhspF8si#GZUOT~Km z?57r9Aa+axkYF&kv4u-y`NOY_Oe&8t&XEQ8jg0mO=xnK*kli}+^INRYy m0i4}nrwL-)f*sbNciRT8p{NqUc6(qA7r*ex3eE;HKx_ao7Nd&* diff --git a/Scripts/Configs/FreeRoamMaps.gd b/Scripts/Configs/FreeRoamMaps.gd index 377bba8..deb4347 100644 --- a/Scripts/Configs/FreeRoamMaps.gd +++ b/Scripts/Configs/FreeRoamMaps.gd @@ -5,7 +5,7 @@ var Generic1Stage = { "scene": "res://Scenes/FreeRoam/Generic/Generic1Stage.tscn", "stage": Stages.Cyber1Stage, "curtains": { - "Curtain": [ "Up" ] + "Curtain": [ "1-Stage" ] } } @@ -14,7 +14,7 @@ var Generic2Stage = { "scene": "res://Scenes/FreeRoam/Generic/Generic2Stage.tscn", "stage": Stages.Cyber2Stage, "curtains": { - "Curtains": [ "CEC Up", "Main Up" ] + "Curtains": [ "CEC", "Main" ] } } diff --git a/Scripts/Configs/Stages.gd b/Scripts/Configs/Stages.gd index 9fd93dd..0f12526 100644 --- a/Scripts/Configs/Stages.gd +++ b/Scripts/Configs/Stages.gd @@ -431,8 +431,8 @@ var Cyber1Stage = { 53: { "bot": "Spots", "movement": "Jasper", "flow_in": "None", "flow_out": "None" }, 54: { "bot": "Spots", "movement": "Pasqually", "flow_in": "None", "flow_out": "None" }, 55: { "bot": "Spots", "movement": "Wink", "flow_in": "None", "flow_out": "None" }, - 61: { "bot": "Curtain", "movement": "Up", "flow_in": 0.2, "flow_out": 0.2 }, - 62: { "bot": "Curtain", "movement": "Down", "flow_in": 0.2, "flow_out": 0.2 }, + 61: { "bot": "Curtain", "movement": "1-Stage Up", "flow_in": 0.2, "flow_out": 0.2 }, + 62: { "bot": "Curtain", "movement": "1-Stage Down", "flow_in": 0.2, "flow_out": 0.2 }, 65: { "bot": "Floods", "movement": "CEC Red", "flow_in": "None", "flow_out": "None" }, 66: { "bot": "Floods", "movement": "CEC Amber", "flow_in": "None", "flow_out": "None" }, 67: { "bot": "Floods", "movement": "CEC Blue", "flow_in": "None", "flow_out": "None" }, diff --git a/Scripts/InGameMenu.gd b/Scripts/InGameMenu.gd index 456d217..bcf28e2 100644 --- a/Scripts/InGameMenu.gd +++ b/Scripts/InGameMenu.gd @@ -231,8 +231,7 @@ func _input(event: InputEvent) -> void: if event.is_action_pressed("freeroam_open_curtains"): for curtain in FreeRoamMaps.MapIndex[get_node("../").current_map]["curtains"]: for curtain_movement in FreeRoamMaps.MapIndex[get_node("../").current_map]["curtains"][curtain]: - get_node("../../" + curtain + "/AnimationPlayer").speed_scale = 0.2 - get_node("../../" + curtain + "/AnimationPlayer").play(curtain_movement) + get_node("../../" + curtain)._movement_in(curtain_movement + " Up", 0.2) if (transport_enabled): if event.is_action_pressed("freeroam_transport_play_pause"): if (playing): _on_pause_button_pressed() diff --git a/Scripts/OneWayController.gd b/Scripts/OneWayController.gd index da74789..ebcf517 100644 --- a/Scripts/OneWayController.gd +++ b/Scripts/OneWayController.gd @@ -1,17 +1,99 @@ extends Node3D -var animation_player +var animation_player : AnimationPlayer +var animation_tree : AnimationTree +var blend_tree : AnimationNodeBlendTree -var last_anim_name = "" +var movement_states : Dictionary func _ready(): animation_player = $AnimationPlayer + + animation_tree = AnimationTree.new() + animation_tree.anim_player = animation_player.get_path() + add_child(animation_tree) + + animation_tree.tree_root = AnimationNodeBlendTree.new() + animation_tree.active = true + blend_tree = animation_tree.tree_root as AnimationNodeBlendTree + + animation_player.speed_scale = 0 + + var animations = animation_player.get_animation_list() + + for animation in animations: + movement_states[animation] = [false, 0.0, 0.0, 0.0] + + var prev_name = "Anim_" + animations[0] + var old_time_name = "Time_" + animations[0] + var old_seek_name = "Seek_" + animations[0] + + var prev_anim_node := AnimationNodeAnimation.new() + prev_anim_node.animation = animations[0] + blend_tree.add_node(prev_name, prev_anim_node) + + var old_time_node := AnimationNodeTimeScale.new() + blend_tree.add_node(old_time_name,old_time_node) + + var _old_seek_node := AnimationNodeTimeSeek.new() + blend_tree.add_node(old_seek_name,_old_seek_node) + + blend_tree.connect_node(old_time_name,0,prev_name) + blend_tree.connect_node(old_seek_name,0,old_time_name) + prev_name = old_seek_name + + for i in range(1, animations.size()): + var anim_name = "Anim_" + animations[i] + var add_name = "Add_" + animations[i] + var time_name = "Time_" + animations[i] + var seek_name = "Seek_" + animations[i] -func _movement_in(movement, rate): - if (movement != last_anim_name): - animation_player.speed_scale = rate - animation_player.play(movement) - last_anim_name = movement + var new_anim_node := AnimationNodeAnimation.new() + new_anim_node.animation = animations[i] + blend_tree.add_node(anim_name, new_anim_node) + + var time_node := AnimationNodeTimeScale.new() + blend_tree.add_node(time_name,time_node) + + var seek_node := AnimationNodeTimeSeek.new() + blend_tree.add_node(seek_name,seek_node) + + var add_node := AnimationNodeAdd2.new() + blend_tree.add_node(add_name, add_node) + + blend_tree.connect_node(time_name, 0, anim_name) + blend_tree.connect_node(seek_name, 0, time_name) + blend_tree.connect_node(add_name, 0, prev_name) + blend_tree.connect_node(add_name, 1, seek_name) + prev_name = add_name + + blend_tree.connect_node("output", 0, prev_name) + + for i in range(0, animations.size()): + animation_tree.set("parameters/Add_" + str(animations[i]) + "/add_amount", 1.0) + animation_tree.set("parameters/Seek_" + str(animations[i]) + "/seek_request", 0) + animation_tree.set("parameters/Time_" + str(animations[i]) + "/scale", 0) + +func _physics_process(delta: float) -> void: + for key in movement_states: + var anim_path = "parameters/Seek_" + key + "/seek_request" + var state = movement_states[key] + if (state[0]): + state[1] = clamp(float(state[1]) + (delta * state[2]), 0, 1) + else: + state[1] = clamp(float(state[1]) - (delta * state[3]), 0, 1) + animation_tree.set(anim_path, state[1]) + +func _movement_in(movement: String, rate): + if (movement.ends_with(" Up")): + movement_states[movement.trim_suffix(" Up")][0] = true + movement_states[movement.trim_suffix(" Up")][2] = rate + elif (movement.ends_with(" Down")): + movement_states[movement.trim_suffix(" Down")][0] = false + movement_states[movement.trim_suffix(" Down")][3] = rate + else: + movement_states[movement][0] = true + movement_states[movement][2] = rate func _movement_out(_movement, _rate): pass # lol pranked