change how curtains work
This commit is contained in:
parent
8e347e59e9
commit
fdf31f1b7e
6 changed files with 94 additions and 13 deletions
Binary file not shown.
Binary file not shown.
|
@ -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" ]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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" },
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue