Compare commits
3 Commits
a12e4e4c0b
...
8cf677677f
| Author | SHA1 | Date | |
|---|---|---|---|
| 8cf677677f | |||
| 499928b096 | |||
| 72fc3e7e39 |
@ -75,7 +75,14 @@ region = Rect2( 100, 20, 7, 8 )
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id=10]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id=11]
|
||||
[sub_resource type="StyleBoxFlat" id=96]
|
||||
bg_color = Color( 0.423529, 0.898039, 0.756863, 0.4 )
|
||||
border_width_left = 31
|
||||
border_width_top = 1
|
||||
border_width_right = 22
|
||||
border_width_bottom = 1
|
||||
border_color = Color( 0.0901961, 0.14902, 0.270588, 0.345098 )
|
||||
border_blend = true
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id=12]
|
||||
|
||||
@ -329,9 +336,7 @@ margin_right = 2.0
|
||||
margin_top = 2.0
|
||||
margin_bottom = 2.0
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id=52]
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id=53]
|
||||
[sub_resource type="StyleBoxTexture" id=97]
|
||||
texture = ExtResource( 2 )
|
||||
region_rect = Rect2( 17, 97, 14, 14 )
|
||||
margin_left = 2.0
|
||||
@ -347,6 +352,14 @@ margin_right = 2.0
|
||||
margin_top = 2.0
|
||||
margin_bottom = 2.0
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id=53]
|
||||
texture = ExtResource( 2 )
|
||||
region_rect = Rect2( 17, 97, 14, 14 )
|
||||
margin_left = 2.0
|
||||
margin_right = 2.0
|
||||
margin_top = 2.0
|
||||
margin_bottom = 2.0
|
||||
|
||||
[sub_resource type="StyleBoxTexture" id=55]
|
||||
content_margin_left = 15.0
|
||||
content_margin_right = 16.0
|
||||
@ -655,7 +668,7 @@ CheckBox/icons/radio_checked = SubResource( 7 )
|
||||
CheckBox/icons/radio_unchecked = SubResource( 8 )
|
||||
CheckBox/icons/unchecked = SubResource( 9 )
|
||||
CheckBox/styles/disabled = SubResource( 10 )
|
||||
CheckBox/styles/focus = SubResource( 11 )
|
||||
CheckBox/styles/focus = SubResource( 96 )
|
||||
CheckBox/styles/hover = SubResource( 12 )
|
||||
CheckBox/styles/hover_pressed = SubResource( 13 )
|
||||
CheckBox/styles/normal = SubResource( 14 )
|
||||
@ -741,8 +754,9 @@ MenuButton/styles/focus = SubResource( 46 )
|
||||
MenuButton/styles/hover = SubResource( 47 )
|
||||
MenuButton/styles/normal = SubResource( 48 )
|
||||
MenuButton/styles/pressed = SubResource( 49 )
|
||||
OptionButton/colors/font_color = Color( 0.88, 0.88, 0.88, 1 )
|
||||
OptionButton/colors/font_color = Color( 1, 1, 1, 1 )
|
||||
OptionButton/colors/font_color_disabled = Color( 0.9, 0.9, 0.9, 0.2 )
|
||||
OptionButton/colors/font_color_focus = Color( 0.376471, 0.909804, 0.768627, 1 )
|
||||
OptionButton/colors/font_color_hover = Color( 0.376471, 0.909804, 0.768627, 1 )
|
||||
OptionButton/colors/font_color_pressed = Color( 1, 1, 1, 1 )
|
||||
OptionButton/constants/arrow_margin = 2
|
||||
@ -750,8 +764,8 @@ OptionButton/constants/hseparation = 2
|
||||
OptionButton/fonts/font = ExtResource( 3 )
|
||||
OptionButton/icons/arrow = SubResource( 50 )
|
||||
OptionButton/styles/disabled = SubResource( 51 )
|
||||
OptionButton/styles/focus = SubResource( 52 )
|
||||
OptionButton/styles/hover = SubResource( 53 )
|
||||
OptionButton/styles/focus = SubResource( 97 )
|
||||
OptionButton/styles/hover = SubResource( 97 )
|
||||
OptionButton/styles/normal = SubResource( 54 )
|
||||
OptionButton/styles/pressed = SubResource( 53 )
|
||||
Panel/styles/panel = SubResource( 55 )
|
||||
|
||||
@ -59,11 +59,6 @@ _global_script_classes=[ {
|
||||
"language": "GDScript",
|
||||
"path": "res://addons/controller_icons/objects/TextureRect.gd"
|
||||
}, {
|
||||
"base": "SceneTree",
|
||||
"class": "CreateIcon",
|
||||
"language": "GDScript",
|
||||
"path": "res://Neuer Ordner/CreateIcon.gd"
|
||||
}, {
|
||||
"base": "Actor",
|
||||
"class": "Enemy",
|
||||
"language": "GDScript",
|
||||
@ -89,11 +84,6 @@ _global_script_classes=[ {
|
||||
"language": "GDScript",
|
||||
"path": "res://src/RayCasters/RayCaster.gd"
|
||||
}, {
|
||||
"base": "Reference",
|
||||
"class": "ReplaceIcon",
|
||||
"language": "GDScript",
|
||||
"path": "res://Neuer Ordner/ReplaceIcon.gd"
|
||||
}, {
|
||||
"base": "Button",
|
||||
"class": "SoundButton",
|
||||
"language": "GDScript",
|
||||
@ -115,13 +105,11 @@ _global_script_class_icons={
|
||||
"ControllerSprite": "",
|
||||
"ControllerSprite3D": "",
|
||||
"ControllerTextureRect": "",
|
||||
"CreateIcon": "",
|
||||
"Enemy": "",
|
||||
"GlobalStateResource": "",
|
||||
"LevelTemplate": "",
|
||||
"RayCastDebugLines": "",
|
||||
"RayCaster": "",
|
||||
"ReplaceIcon": "",
|
||||
"SoundButton": "",
|
||||
"StateMachine": ""
|
||||
}
|
||||
@ -251,34 +239,34 @@ ui_end={
|
||||
}
|
||||
up={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
duck={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":-1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":0,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
duck={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":0,"axis":1,"axis_value":1.0,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
jump={
|
||||
@ -340,7 +328,6 @@ quality/intended_usage/framebuffer_allocation.mobile=0
|
||||
threads/thread_model=2
|
||||
2d/options/use_software_skinning=false
|
||||
gles3/shaders/shader_compilation_mode=2
|
||||
gles3/shaders/shader_compilation_mode.web=2
|
||||
2d/options/culling_mode=0
|
||||
quality/depth/hdr=false
|
||||
environment/default_environment="res://default_env.tres"
|
||||
|
||||
@ -19,6 +19,7 @@ export var vision_distance := 6.0
|
||||
export var vision_angle := 180.0
|
||||
export var attack_jump_range := 6.0
|
||||
export var aggressive_to_player := false
|
||||
export var jump_into_narrow_pit := false
|
||||
export var loose_target_seconds := 3.0
|
||||
# Jump distance in blocks
|
||||
export var default_jump_distance := 4.0
|
||||
@ -344,6 +345,8 @@ func jump():
|
||||
# TODO fix that you could call jump from jumping on top
|
||||
# and let it fail if the top is dangerous for jump height or not safe
|
||||
v = consider_jumping_on_top()
|
||||
if v == zero_vector && jump_into_narrow_pit:
|
||||
v = consider_jump_landing_space(v, jump_into_narrow_pit)
|
||||
if v == zero_vector && can_reverse_facing_direction():
|
||||
reverse_facing_direction()
|
||||
|
||||
@ -398,7 +401,7 @@ func consider_jump_headspace(v: Vector2, recursive_check_count = 0, max_checks =
|
||||
# Check the block in jump distance for danger or height
|
||||
# If danger check neighboring blocks: if still danger, then jump closer (or jump over)
|
||||
# If height move to distance which allows 1 block high jump
|
||||
func consider_jump_landing_space(v: Vector2) -> Vector2:
|
||||
func consider_jump_landing_space(v: Vector2, jump_into_narrow_pit = false) -> Vector2:
|
||||
var jump_distance = calculate_jump_distance(v)
|
||||
var jump_height = calculate_jump_height(v)
|
||||
var collider = check_feeler(Vector2(jump_distance * get_facing_direction(), -jump_height / 2))
|
||||
@ -417,7 +420,7 @@ func consider_jump_landing_space(v: Vector2) -> Vector2:
|
||||
v = correct_jump_direction(v)
|
||||
collider = check_feeler(Vector2(jump_distance * get_facing_direction(), -jump_height / 2))
|
||||
if (
|
||||
(!is_jump_path_safe(v, global_position) || collider != null)
|
||||
(!is_jump_path_safe(v, global_position) || (collider != null && !jump_into_narrow_pit))
|
||||
&& can_reverse_facing_direction()
|
||||
):
|
||||
# Can be printed when frog would jump into a wall too
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=50 format=2]
|
||||
[gd_scene load_steps=52 format=2]
|
||||
|
||||
[ext_resource path="res://assets/enemy/froshler.png" type="Texture" id=1]
|
||||
[ext_resource path="res://src/Actors/Friendlies/WhatAreFrog.gd" type="Script" id=2]
|
||||
@ -8,6 +8,38 @@
|
||||
[ext_resource path="res://assets/enemy/leash-hook.png" type="Texture" id=6]
|
||||
[ext_resource path="res://src/Utilities/SceneAudio.tscn" type="PackedScene" id=7]
|
||||
|
||||
[sub_resource type="Shader" id=61]
|
||||
code = "shader_type canvas_item;
|
||||
uniform float wavelength = 10.0;
|
||||
uniform float wavespeed = 1.0;
|
||||
uniform float alpha = 0.25;
|
||||
uniform float displacement = 0.0;
|
||||
uniform float displacement_speed = 1.0;
|
||||
|
||||
uniform sampler2D noise_texture;
|
||||
uniform sampler2D noise_displacement_texture;
|
||||
uniform sampler2D gradiant;
|
||||
|
||||
void vertex()
|
||||
{
|
||||
vec3 perlin = texture(noise_displacement_texture, UV + (TIME * displacement_speed)).rgb;
|
||||
VERTEX = VERTEX + (perlin * displacement);
|
||||
}
|
||||
|
||||
|
||||
void fragment()
|
||||
{
|
||||
vec3 perlin = texture(noise_texture, UV).rgb;
|
||||
float ndotp = dot(VIEW, perlin) * wavelength;
|
||||
float waves = (1.0 + sin(ndotp + TIME * wavespeed)) / 2.0;
|
||||
vec4 color = texture(gradiant, vec2(waves, 0.5));
|
||||
ALBEDO = color.rgb;
|
||||
ALPHA = min(color.a, alpha);
|
||||
}"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=62]
|
||||
shader = SubResource( 61 )
|
||||
|
||||
[sub_resource type="Animation" id=5]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
@ -479,6 +511,7 @@ texture = ExtResource( 6 )
|
||||
|
||||
[node name="FrogSprite" type="Sprite" parent="."]
|
||||
unique_name_in_owner = true
|
||||
material = SubResource( 62 )
|
||||
position = Vector2( 0, -7 )
|
||||
texture = ExtResource( 1 )
|
||||
hframes = 2
|
||||
|
||||
@ -1146,6 +1146,9 @@ initial_wait_time = 2.0
|
||||
[node name="Button" parent="Tutorials/RightTut" index="0"]
|
||||
material = SubResource( 13 )
|
||||
|
||||
[node name="Label" parent="Tutorials/RightTut/TextureRect" index="0"]
|
||||
autowrap = false
|
||||
|
||||
[node name="AnimationPlayer" parent="Tutorials/RightTut" index="4"]
|
||||
anims/RESET = SubResource( 9 )
|
||||
anims/cease_4_exist = SubResource( 10 )
|
||||
@ -1326,7 +1329,7 @@ position = Vector2( -70, 1 )
|
||||
scale = Vector2( 0.878906, 0.936025 )
|
||||
|
||||
[node name="BlobbySprite" parent="Blobby" index="5"]
|
||||
frame = 7
|
||||
frame = 8
|
||||
|
||||
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
|
||||
parameters/playback = SubResource( 33 )
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -41,12 +41,12 @@ resource_name = "LowPassFilter"
|
||||
cutoff_hz = 3000.0
|
||||
|
||||
[resource]
|
||||
bus/0/volume_db = -6.93575
|
||||
bus/0/volume_db = inf_neg
|
||||
bus/1/name = "Music"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = -6.0206
|
||||
bus/1/volume_db = 0.0
|
||||
bus/1/send = "Master"
|
||||
bus/1/effect/0/effect = SubResource( 1 )
|
||||
bus/1/effect/0/enabled = false
|
||||
@ -68,7 +68,7 @@ bus/3/name = "UI"
|
||||
bus/3/solo = false
|
||||
bus/3/mute = false
|
||||
bus/3/bypass_fx = false
|
||||
bus/3/volume_db = -6.0206
|
||||
bus/3/volume_db = 0.0
|
||||
bus/3/send = "Master"
|
||||
bus/3/effect/0/effect = SubResource( 6 )
|
||||
bus/3/effect/0/enabled = true
|
||||
|
||||
@ -1,32 +1,32 @@
|
||||
extends StateMachine
|
||||
|
||||
func _ready() -> void:
|
||||
add_state("robbing")
|
||||
state = states.robbing
|
||||
set_state(states.robbing)
|
||||
for state in states:
|
||||
if state_matching_method_exists(state):
|
||||
continue
|
||||
else:
|
||||
printerr("StateMachine -> State: " + state + " has no matching method in parent.")
|
||||
push_error("StateMachine -> State: " + state + " has no matching method in parent.")
|
||||
# _animation_logic()
|
||||
|
||||
add_state("robbing")
|
||||
state = states.robbing
|
||||
set_state(states.robbing)
|
||||
for state in states:
|
||||
if state_matching_method_exists(state):
|
||||
continue
|
||||
else:
|
||||
printerr("StateMachine -> State: " + state + " has no matching method in parent.")
|
||||
push_error("StateMachine -> State: " + state + " has no matching method in parent.")
|
||||
# _animation_logic()
|
||||
|
||||
|
||||
# Game logic consequences of state
|
||||
func _state_logic(delta):
|
||||
#var state_action_ref = funcref(parent, self.state)
|
||||
#parent.velocity = state_action_ref.call_func()
|
||||
parent.execute_movement(delta)
|
||||
#var state_action_ref = funcref(parent, self.state)
|
||||
#parent.velocity = state_action_ref.call_func()
|
||||
parent.execute_movement(delta)
|
||||
|
||||
|
||||
func _get_transition(_delta):
|
||||
return null
|
||||
return null
|
||||
|
||||
|
||||
func _enter_state(_new_state, _previous_state):
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
func _exit_state(_previous_state, _new_state):
|
||||
pass
|
||||
pass
|
||||
|
||||
2
src/ThirdParty/Demo/IridescenceBall.tscn
vendored
2
src/ThirdParty/Demo/IridescenceBall.tscn
vendored
@ -12,7 +12,7 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3 )
|
||||
far = 150.0
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
transform = Transform( 1.0, -0.00767937, 0, 0.00767937, 1.0, 0, 0, 0, 1, 0, 0, 0 )
|
||||
transform = Transform( 1, -0.00767937, 0, 0.00767937, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||
mesh = SubResource( 1 )
|
||||
material/0 = ExtResource( 2 )
|
||||
script = ExtResource( 1 )
|
||||
|
||||
@ -7,28 +7,28 @@ var focus_player
|
||||
var press_player
|
||||
|
||||
func _ready() -> void:
|
||||
focus_player = AudioStreamPlayer.new()
|
||||
focus_player.bus = "UI"
|
||||
var asrp = AudioStreamRandomPitch.new()
|
||||
asrp.audio_stream = GlobalState.sound_library[focus_sound]
|
||||
focus_player.stream = asrp
|
||||
#focus_player.volume_db = 5
|
||||
add_child(focus_player)
|
||||
connect("focus_exited", self, "focus_play")
|
||||
focus_player = AudioStreamPlayer.new()
|
||||
focus_player.bus = "UI"
|
||||
var asrp = AudioStreamRandomPitch.new()
|
||||
asrp.audio_stream = GlobalState.sound_library[focus_sound]
|
||||
focus_player.stream = asrp
|
||||
#focus_player.volume_db = 5
|
||||
add_child(focus_player)
|
||||
connect("focus_exited", self, "focus_play")
|
||||
|
||||
press_player = AudioStreamPlayer.new()
|
||||
press_player.bus = "UI"
|
||||
var asrp2 = AudioStreamRandomPitch.new()
|
||||
asrp2.audio_stream = GlobalState.sound_library[press_sound]
|
||||
press_player.stream = asrp2
|
||||
#press_player.volume_db = 5
|
||||
add_child(press_player)
|
||||
connect("button_down", self, "press_play")
|
||||
press_player = AudioStreamPlayer.new()
|
||||
press_player.bus = "UI"
|
||||
var asrp2 = AudioStreamRandomPitch.new()
|
||||
asrp2.audio_stream = GlobalState.sound_library[press_sound]
|
||||
press_player.stream = asrp2
|
||||
#press_player.volume_db = 5
|
||||
add_child(press_player)
|
||||
connect("button_down", self, "press_play")
|
||||
|
||||
func focus_play():
|
||||
if visible:
|
||||
focus_player.play()
|
||||
if visible:
|
||||
focus_player.play()
|
||||
|
||||
func press_play():
|
||||
if visible:
|
||||
press_player.play()
|
||||
if visible:
|
||||
press_player.play()
|
||||
|
||||
@ -26,7 +26,17 @@ func rebuild(input_profile):
|
||||
_action_list.clear()
|
||||
var first = true
|
||||
var prev_line
|
||||
for input_action in input_profile.keys():
|
||||
for order_action in $InputMapper.profile_order:
|
||||
|
||||
var input_action := ""
|
||||
|
||||
for action in input_profile.keys():
|
||||
if action == order_action:
|
||||
input_action = action
|
||||
|
||||
if input_action == "":
|
||||
continue
|
||||
|
||||
if(input_action.ends_with("_old") || input_action.begins_with(("ui_"))):
|
||||
continue
|
||||
var line = _action_list.add_input_line(input_action, input_profile[input_action])
|
||||
@ -55,7 +65,62 @@ func _on_InputLine_change_button_pressed(action_name, line):
|
||||
var event = yield($"%KeySelectMenu", "key_selected")
|
||||
if event == null:
|
||||
return
|
||||
if($InputMapper.change_action_key(action_name, event, old_event)):
|
||||
|
||||
#Check if events are basically the same
|
||||
#TODO Problem with different physical locations of the same key
|
||||
if "scancode" in old_event && "scancode" in event:
|
||||
if event.scancode == old_event.scancode:
|
||||
return
|
||||
elif event == old_event:
|
||||
return
|
||||
|
||||
var action_with_same_event: String = check_doubled_event(event)
|
||||
|
||||
# Routine to swap buttons
|
||||
# TODO put into function
|
||||
if action_with_same_event != "":
|
||||
# Check doubled reads from the InputMap and alternative actions are only virtual
|
||||
if action_with_same_event == action_name:
|
||||
action_with_same_event = "alt " + action_name
|
||||
$"%SwapKeysMenu".open(action_name, action_with_same_event, old_event, event)
|
||||
var swap = yield($"SwapKeysMenu", "selection_made")
|
||||
if swap:
|
||||
swap_buttons(action_name, action_with_same_event, old_event, event)
|
||||
print("bakayaroo!")
|
||||
return
|
||||
|
||||
if $InputMapper.change_action_key(action_name, event, old_event):
|
||||
changes_made = true
|
||||
changes_saved = false
|
||||
line.update_key(event)
|
||||
|
||||
func check_doubled_event(event: InputEvent) -> String:
|
||||
for action in $InputMapper.get_selected_profile().keys():
|
||||
if action.begins_with("ui_") || action.ends_with("_old"):
|
||||
continue
|
||||
var assigned_event: InputEvent = $InputMapper.get_selected_profile()[action]
|
||||
if "scancode" in assigned_event && "scancode" in event:
|
||||
if event.scancode == assigned_event.scancode:
|
||||
return action
|
||||
else:
|
||||
if event == assigned_event:
|
||||
return action
|
||||
return ""
|
||||
|
||||
func swap_buttons(action1, action2, old_event, new_event) -> void:
|
||||
var input_line1 = $"%ActionKeyList".get_input_line(action1)
|
||||
var input_line2 = $"%ActionKeyList".get_input_line(action2)
|
||||
if $InputMapper.change_action_key(action1, new_event, old_event):
|
||||
changes_made = true
|
||||
changes_saved = false
|
||||
input_line1.update_key(new_event)
|
||||
else:
|
||||
return
|
||||
|
||||
# Avoid erasing the just assigned "old" event from the input map,
|
||||
# when swapping alternative button assignments in place
|
||||
if action1.trim_prefix("alt ") == action2.trim_prefix("alt "):
|
||||
new_event = old_event
|
||||
|
||||
if $InputMapper.change_action_key(action2, old_event, new_event):
|
||||
input_line2.update_key(old_event)
|
||||
|
||||
@ -4,65 +4,68 @@ extends Control
|
||||
onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalManager")
|
||||
onready var level_state := get_tree().root.get_child(4).get_node("%LevelState")
|
||||
onready var current_scene := get_tree().get_current_scene()
|
||||
onready var pause_overlay: = get_node("PauseOverlay")
|
||||
onready var pause_overlay := get_node("PauseOverlay")
|
||||
onready var pause_title: Label = get_node("PauseOverlay/Title")
|
||||
|
||||
var paused := false setget set_paused
|
||||
var block_ui_cancel = false
|
||||
|
||||
|
||||
func _ready():
|
||||
#signal_manager.connect("player_died", self, "_on_GlobalState_player_died")
|
||||
$ControlsMenu.visible = false
|
||||
$ControlsMenu.set_process_input(false)
|
||||
$AudioMenu.set_process_input(false)
|
||||
signal_manager.connect("game_paused", self, "set_paused")
|
||||
pass
|
||||
#signal_manager.connect("player_died", self, "_on_GlobalState_player_died")
|
||||
$ControlsMenu.visible = false
|
||||
$ControlsMenu.set_process_input(false)
|
||||
$AudioMenu.set_process_input(false)
|
||||
signal_manager.connect("game_paused", self, "set_paused")
|
||||
pass
|
||||
|
||||
|
||||
func open_audio_menu():
|
||||
block_ui_cancel = true
|
||||
pause_overlay.visible = false
|
||||
$AudioMenu.visible = true
|
||||
$AudioMenu.set_process_input(true)
|
||||
$"%MasterSlider".grab_focus()
|
||||
block_ui_cancel = true
|
||||
pause_overlay.visible = false
|
||||
$AudioMenu.visible = true
|
||||
$AudioMenu.set_process_input(true)
|
||||
$"%MasterSlider".grab_focus()
|
||||
|
||||
|
||||
func close_audio_menu():
|
||||
$AudioMenu.visible = false
|
||||
pause_overlay.visible = true
|
||||
$AudioMenu.set_process_input(false)
|
||||
$"%Continue".grab_focus()
|
||||
get_tree().set_input_as_handled()
|
||||
$AudioMenu.visible = false
|
||||
pause_overlay.visible = true
|
||||
$AudioMenu.set_process_input(false)
|
||||
$"%Continue".grab_focus()
|
||||
get_tree().set_input_as_handled()
|
||||
|
||||
|
||||
func _on_GlobalState_player_died() -> void:
|
||||
self.paused = true
|
||||
pause_title.text = "You lost"
|
||||
self.paused = true
|
||||
pause_title.text = "You lost"
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if !event.is_action("pause"):
|
||||
return
|
||||
if block_ui_cancel || $"%ControlsMenu".visible:
|
||||
block_ui_cancel = false
|
||||
get_tree().set_input_as_handled()
|
||||
return
|
||||
#not oder ! schaltet einen boolean um
|
||||
#Ist self hier notwendig?
|
||||
|
||||
self.paused = not paused
|
||||
block_ui_cancel = true
|
||||
if !event.is_action("pause"):
|
||||
return
|
||||
if block_ui_cancel || $"%ControlsMenu".visible:
|
||||
block_ui_cancel = false
|
||||
get_tree().set_input_as_handled()
|
||||
return
|
||||
#not oder ! schaltet einen boolean um
|
||||
#Ist self hier notwendig?
|
||||
|
||||
self.paused = not paused
|
||||
block_ui_cancel = true
|
||||
|
||||
|
||||
func set_paused(value: bool) -> void:
|
||||
paused = value
|
||||
get_tree().paused = value
|
||||
pause_overlay.visible = value
|
||||
if value == true:
|
||||
$"%Continue".grab_focus()
|
||||
paused = value
|
||||
get_tree().paused = value
|
||||
pause_overlay.visible = value
|
||||
if value == true:
|
||||
$"%Continue".grab_focus()
|
||||
|
||||
|
||||
func _on_Controls_button_up() -> void:
|
||||
$ControlsMenu.visible = true
|
||||
$ControlsMenu.set_process_input(true)
|
||||
block_ui_cancel = true
|
||||
pause_overlay.visible = false
|
||||
$"%ProfilesMenu".grab_focus()
|
||||
$ControlsMenu.visible = true
|
||||
$ControlsMenu.set_process_input(true)
|
||||
block_ui_cancel = true
|
||||
pause_overlay.visible = false
|
||||
$"%ProfilesMenu".grab_focus()
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=39 format=2]
|
||||
[gd_scene load_steps=44 format=2]
|
||||
|
||||
[ext_resource path="res://assets/meta/ui_theme.tres" type="Theme" id=1]
|
||||
[ext_resource path="res://assets/ui/sci-fi-godot-theme/sci-fi-theme.tres" type="Theme" id=2]
|
||||
@ -19,11 +19,14 @@
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/ProfilesMenu.gd" type="Script" id=17]
|
||||
[ext_resource path="res://assets/ui/fonts/Kenney Thick.ttf" type="DynamicFontData" id=18]
|
||||
[ext_resource path="res://assets/ui/fonts/kenny_thick.tres" type="DynamicFont" id=19]
|
||||
[ext_resource path="res://addons/controller_icons/objects/Button.gd" type="Script" id=20]
|
||||
[ext_resource path="res://assets/ui/Screenshot 2023-05-23 160521.png" type="Texture" id=21]
|
||||
[ext_resource path="res://assets/meta/montserrat_extrabold.otf" type="DynamicFontData" id=22]
|
||||
[ext_resource path="res://src/UserInterface/Buttons/AudibleButton.gd" type="Script" id=23]
|
||||
[ext_resource path="res://assets/music/Shopping For The Future (LOOP).wav" type="AudioStream" id=24]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/SwapKeysMenu.gd" type="Script" id=25]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/AudioMenu.gd" type="Script" id=26]
|
||||
[ext_resource path="res://addons/controller_icons/assets/key/arrow_down.png" type="Texture" id=27]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/AudioSlider.gd" type="Script" id=28]
|
||||
[ext_resource path="res://src/UserInterface/Buttons/MenuNavigationButton.gd" type="Script" id=29]
|
||||
|
||||
@ -71,6 +74,14 @@ shader_param/transparency = 0.778
|
||||
size = 20
|
||||
font_data = ExtResource( 22 )
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=18]
|
||||
shader = ExtResource( 7 )
|
||||
shader_param/transparency = 0.778
|
||||
|
||||
[sub_resource type="DynamicFont" id=19]
|
||||
size = 8
|
||||
font_data = ExtResource( 18 )
|
||||
|
||||
[sub_resource type="DynamicFont" id=16]
|
||||
size = 42
|
||||
font_data = ExtResource( 22 )
|
||||
@ -448,6 +459,140 @@ custom_fonts/font = ExtResource( 19 )
|
||||
text = "Quit Don't Save"
|
||||
script = ExtResource( 23 )
|
||||
|
||||
[node name="SwapKeysMenu" type="Panel" parent="ControlsMenu"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
material = SubResource( 18 )
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
focus_mode = 2
|
||||
input_pass_on_modal_close_click = false
|
||||
script = ExtResource( 25 )
|
||||
|
||||
[node name="VBoxContainer2" type="VBoxContainer" parent="ControlsMenu/SwapKeysMenu"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -139.0
|
||||
margin_top = -123.0
|
||||
margin_right = 139.0
|
||||
margin_bottom = 123.0
|
||||
focus_mode = 2
|
||||
custom_constants/separation = 30
|
||||
|
||||
[node name="Prompt" type="Label" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2"]
|
||||
margin_right = 278.0
|
||||
margin_bottom = 21.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 0
|
||||
custom_fonts/font = SubResource( 19 )
|
||||
text = "selected button already assigned
|
||||
swap Button actions?"
|
||||
align = 1
|
||||
valign = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2"]
|
||||
margin_top = 51.0
|
||||
margin_right = 278.0
|
||||
margin_bottom = 174.0
|
||||
custom_constants/separation = 20
|
||||
alignment = 1
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/HBoxContainer"]
|
||||
margin_left = 15.0
|
||||
margin_right = 129.0
|
||||
margin_bottom = 123.0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
|
||||
[node name="Action1" type="Label" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 114.0
|
||||
margin_bottom = 9.0
|
||||
text = "Action 1"
|
||||
align = 1
|
||||
|
||||
[node name="ControllerButton1" type="Button" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 13.0
|
||||
margin_right = 114.0
|
||||
margin_bottom = 123.0
|
||||
focus_mode = 0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
shortcut_in_tooltip = false
|
||||
button_mask = 0
|
||||
enabled_focus_mode = 0
|
||||
icon = ExtResource( 27 )
|
||||
icon_align = 1
|
||||
script = ExtResource( 20 )
|
||||
path = "duck"
|
||||
|
||||
[node name="VBoxContainer2" type="VBoxContainer" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/HBoxContainer"]
|
||||
margin_left = 149.0
|
||||
margin_right = 263.0
|
||||
margin_bottom = 123.0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
|
||||
[node name="Action2" type="Label" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer2"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 114.0
|
||||
margin_bottom = 9.0
|
||||
text = "Action 2"
|
||||
align = 1
|
||||
|
||||
[node name="ControllerButton2" type="Button" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer2"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 13.0
|
||||
margin_right = 114.0
|
||||
margin_bottom = 123.0
|
||||
focus_mode = 0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
shortcut_in_tooltip = false
|
||||
button_mask = 0
|
||||
enabled_focus_mode = 0
|
||||
icon = ExtResource( 27 )
|
||||
icon_align = 1
|
||||
script = ExtResource( 20 )
|
||||
path = "duck"
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2"]
|
||||
margin_top = 204.0
|
||||
margin_right = 278.0
|
||||
margin_bottom = 246.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
focus_mode = 2
|
||||
mouse_filter = 0
|
||||
input_pass_on_modal_close_click = false
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 0
|
||||
alignment = 1
|
||||
|
||||
[node name="Yes" type="Button" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 278.0
|
||||
margin_bottom = 19.0
|
||||
focus_neighbour_top = NodePath("../No")
|
||||
focus_neighbour_bottom = NodePath("../No")
|
||||
text = "Yes"
|
||||
script = ExtResource( 23 )
|
||||
|
||||
[node name="No" type="Button" parent="ControlsMenu/SwapKeysMenu/VBoxContainer2/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 23.0
|
||||
margin_right = 278.0
|
||||
margin_bottom = 42.0
|
||||
focus_neighbour_top = NodePath("../Yes")
|
||||
focus_neighbour_bottom = NodePath("../Yes")
|
||||
text = "NO"
|
||||
script = ExtResource( 23 )
|
||||
|
||||
[node name="AudioMenu" type="Control" parent="."]
|
||||
visible = false
|
||||
anchor_right = 1.0
|
||||
@ -789,6 +934,8 @@ volume_db = -10.0
|
||||
[connection signal="button_up" from="ControlsMenu/ReallyQuitMenu/VBoxContainer/SaveNQuit" to="ControlsMenu/ReallyQuitMenu/VBoxContainer/SaveNQuit" method="_on_button_up"]
|
||||
[connection signal="button_up" from="ControlsMenu/ReallyQuitMenu/VBoxContainer/ContinueEdit" to="ControlsMenu/ReallyQuitMenu" method="close"]
|
||||
[connection signal="button_up" from="ControlsMenu/ReallyQuitMenu/VBoxContainer/QuitDontSave" to="ControlsMenu" method="close"]
|
||||
[connection signal="pressed" from="ControlsMenu/SwapKeysMenu/VBoxContainer2/VBoxContainer/Yes" to="ControlsMenu/SwapKeysMenu" method="swap"]
|
||||
[connection signal="pressed" from="ControlsMenu/SwapKeysMenu/VBoxContainer2/VBoxContainer/No" to="ControlsMenu/SwapKeysMenu" method="do_not_swap"]
|
||||
[connection signal="button_up" from="AudioMenu/Panel/Back" to="." method="close_audio_menu"]
|
||||
[connection signal="button_up" from="AudioMenu/Panel/Back" to="AudioMenu" method="save"]
|
||||
[connection signal="button_up" from="PauseOverlay/Panel/VBoxContainer/Continue" to="PauseOverlay/Panel/VBoxContainer/Continue" method="_on_button_up"]
|
||||
|
||||
@ -7,6 +7,12 @@ func clear():
|
||||
for child in get_children():
|
||||
child.free()
|
||||
|
||||
func get_input_line(action_name) -> Control:
|
||||
for child in get_children():
|
||||
if child.action == action_name:
|
||||
return child
|
||||
return null
|
||||
|
||||
func add_input_line(action_name, event) -> Control:
|
||||
var line = InputLine.instance()
|
||||
add_child(line)
|
||||
|
||||
@ -6,13 +6,15 @@ onready var changes_saved := false
|
||||
|
||||
var block_ui_cancel = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
$InputMapper.connect('profile_changed', self, 'rebuild')
|
||||
$InputMapper.connect("profile_changed", self, "rebuild")
|
||||
$InputMapper.initialize_profiles()
|
||||
$ProfilesMenu.initialize($InputMapper)
|
||||
$ProfilesMenu.grab_focus()
|
||||
$InputMapper.change_profile($ProfilesMenu.selected)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
# TODO Static quit button esc
|
||||
if !event.is_action("ui_cancel") || !visible:
|
||||
@ -22,15 +24,23 @@ func _input(event: InputEvent) -> void:
|
||||
get_tree().set_input_as_handled()
|
||||
return
|
||||
$"%Back"._on_button_up()
|
||||
|
||||
|
||||
|
||||
func rebuild(input_profile) -> void:
|
||||
_action_list.clear()
|
||||
var first = true
|
||||
var prev_line
|
||||
for input_action in input_profile.keys():
|
||||
if(input_action.ends_with("_old") || input_action.begins_with(("ui_"))):
|
||||
for order_action in $InputMapper.profile_order:
|
||||
|
||||
var input_action := ""
|
||||
|
||||
for action in input_profile.keys():
|
||||
if action == order_action:
|
||||
input_action = action
|
||||
|
||||
if input_action == "":
|
||||
continue
|
||||
|
||||
var line = _action_list.add_input_line(input_action, input_profile[input_action])
|
||||
# child(2) is the actual button inside the inputline
|
||||
if first:
|
||||
@ -45,7 +55,13 @@ func rebuild(input_profile) -> void:
|
||||
line.get_child(2).focus_neighbour_left = $"%Back".get_path()
|
||||
line.get_child(2).focus_neighbour_right = $"%Save".get_path()
|
||||
prev_line = line.get_child(2)
|
||||
line.connect('change_button_pressed', self, '_on_InputLine_change_button_pressed', [input_action, line])
|
||||
line.connect(
|
||||
"change_button_pressed",
|
||||
self,
|
||||
"_on_InputLine_change_button_pressed",
|
||||
[input_action, line]
|
||||
)
|
||||
|
||||
|
||||
func _on_InputLine_change_button_pressed(action_name, line):
|
||||
var old_event = $InputMapper.get_selected_profile()[action_name]
|
||||
@ -53,7 +69,62 @@ func _on_InputLine_change_button_pressed(action_name, line):
|
||||
var event = yield($"%KeySelectMenu", "key_selected")
|
||||
if event == null:
|
||||
return
|
||||
if($InputMapper.change_action_key(action_name, event, old_event)):
|
||||
|
||||
#Check if events are basically the same
|
||||
#TODO Problem with different physical locations of the same key
|
||||
if "scancode" in old_event && "scancode" in event:
|
||||
if event.scancode == old_event.scancode:
|
||||
return
|
||||
elif event == old_event:
|
||||
return
|
||||
|
||||
var action_with_same_event: String = check_doubled_event(event)
|
||||
|
||||
# Routine to swap buttons
|
||||
# TODO put into function
|
||||
if action_with_same_event != "":
|
||||
# Check doubled reads from the InputMap and alternative actions are only virtual
|
||||
if action_with_same_event == action_name:
|
||||
action_with_same_event = "alt " + action_name
|
||||
$"%SwapKeysMenu".open(action_name, action_with_same_event, old_event, event)
|
||||
var swap = yield($"SwapKeysMenu", "selection_made")
|
||||
if swap:
|
||||
swap_buttons(action_name, action_with_same_event, old_event, event)
|
||||
print("bakayaroo!")
|
||||
return
|
||||
|
||||
if $InputMapper.change_action_key(action_name, event, old_event):
|
||||
changes_made = true
|
||||
changes_saved = false
|
||||
line.update_key(event)
|
||||
|
||||
func check_doubled_event(event: InputEvent) -> String:
|
||||
for action in $InputMapper.get_selected_profile().keys():
|
||||
if action.begins_with("ui_") || action.ends_with("_old"):
|
||||
continue
|
||||
var assigned_event: InputEvent = $InputMapper.get_selected_profile()[action]
|
||||
if "scancode" in assigned_event && "scancode" in event:
|
||||
if event.scancode == assigned_event.scancode:
|
||||
return action
|
||||
else:
|
||||
if event == assigned_event:
|
||||
return action
|
||||
return ""
|
||||
|
||||
func swap_buttons(action1, action2, old_event, new_event) -> void:
|
||||
var input_line1 = $"%ActionKeyList".get_input_line(action1)
|
||||
var input_line2 = $"%ActionKeyList".get_input_line(action2)
|
||||
if $InputMapper.change_action_key(action1, new_event, old_event):
|
||||
changes_made = true
|
||||
changes_saved = false
|
||||
input_line1.update_key(new_event)
|
||||
else:
|
||||
return
|
||||
|
||||
# Avoid erasing the just assigned "old" event from the input map,
|
||||
# when swapping alternative button assignments in place
|
||||
if action1.trim_prefix("alt ") == action2.trim_prefix("alt "):
|
||||
new_event = old_event
|
||||
|
||||
if $InputMapper.change_action_key(action2, old_event, new_event):
|
||||
input_line2.update_key(old_event)
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=28 format=2]
|
||||
[gd_scene load_steps=31 format=2]
|
||||
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/SaveButton.gd" type="Script" id=1]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/SavedCheckBackButton.gd" type="Script" id=2]
|
||||
@ -10,6 +10,7 @@
|
||||
[ext_resource path="res://src/UserInterface/Buttons/AudibleButton.gd" type="Script" id=8]
|
||||
[ext_resource path="res://assets/environment/background/Spaceship-Wall-Menu.png" type="Texture" id=9]
|
||||
[ext_resource path="res://assets/environment/background/starry-space.png" type="Texture" id=10]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/SwapKeysMenu.gd" type="Script" id=11]
|
||||
[ext_resource path="res://assets/ui/Screenshot 2023-05-23 160521.png" type="Texture" id=12]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/ProfilesMenu.gd" type="Script" id=13]
|
||||
[ext_resource path="res://src/UserInterface/Screens/MainMenu/ControlsMenu/ActionKeyList.gd" type="Script" id=14]
|
||||
@ -21,6 +22,8 @@
|
||||
[ext_resource path="res://assets/ui/sci-fi-godot-theme/sci-fi-theme.tres" type="Theme" id=20]
|
||||
[ext_resource path="res://assets/ui/fonts/Kenney Thick.ttf" type="DynamicFontData" id=21]
|
||||
[ext_resource path="res://assets/ui/fonts/kenny_thick.tres" type="DynamicFont" id=22]
|
||||
[ext_resource path="res://addons/controller_icons/objects/Button.gd" type="Script" id=23]
|
||||
[ext_resource path="res://addons/controller_icons/assets/key/arrow_down.png" type="Texture" id=24]
|
||||
|
||||
[sub_resource type="DynamicFont" id=1]
|
||||
size = 42
|
||||
@ -255,6 +258,8 @@ follow_focus = true
|
||||
|
||||
[node name="ActionKeyList" type="VBoxContainer" parent="Panel/KeymapViewer/ScrollContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 600.0
|
||||
margin_bottom = 189.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
script = ExtResource( 14 )
|
||||
@ -421,6 +426,140 @@ text = "Quit Don't Save"
|
||||
script = ExtResource( 19 )
|
||||
next_screen_path = "res://src/UserInterface/Screens/MainMenu/MainScreen.tscn"
|
||||
|
||||
[node name="SwapKeysMenu" type="Panel" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
material = SubResource( 8 )
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
focus_mode = 2
|
||||
input_pass_on_modal_close_click = false
|
||||
script = ExtResource( 11 )
|
||||
|
||||
[node name="VBoxContainer2" type="VBoxContainer" parent="SwapKeysMenu"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -139.0
|
||||
margin_top = -123.0
|
||||
margin_right = 139.0
|
||||
margin_bottom = 123.0
|
||||
focus_mode = 2
|
||||
custom_constants/separation = 30
|
||||
|
||||
[node name="Prompt" type="Label" parent="SwapKeysMenu/VBoxContainer2"]
|
||||
margin_right = 278.0
|
||||
margin_bottom = 21.0
|
||||
grow_horizontal = 2
|
||||
mouse_filter = 0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 0
|
||||
custom_fonts/font = SubResource( 10 )
|
||||
text = "selected button already assigned
|
||||
swap Button actions?"
|
||||
align = 1
|
||||
valign = 1
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="SwapKeysMenu/VBoxContainer2"]
|
||||
margin_top = 51.0
|
||||
margin_right = 278.0
|
||||
margin_bottom = 174.0
|
||||
custom_constants/separation = 20
|
||||
alignment = 1
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="SwapKeysMenu/VBoxContainer2/HBoxContainer"]
|
||||
margin_left = 15.0
|
||||
margin_right = 129.0
|
||||
margin_bottom = 123.0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
|
||||
[node name="Action1" type="Label" parent="SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 114.0
|
||||
margin_bottom = 9.0
|
||||
text = "Action 1"
|
||||
align = 1
|
||||
|
||||
[node name="ControllerButton1" type="Button" parent="SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 13.0
|
||||
margin_right = 114.0
|
||||
margin_bottom = 123.0
|
||||
focus_mode = 0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
shortcut_in_tooltip = false
|
||||
button_mask = 0
|
||||
enabled_focus_mode = 0
|
||||
icon = ExtResource( 24 )
|
||||
icon_align = 1
|
||||
script = ExtResource( 23 )
|
||||
path = "duck"
|
||||
|
||||
[node name="VBoxContainer2" type="VBoxContainer" parent="SwapKeysMenu/VBoxContainer2/HBoxContainer"]
|
||||
margin_left = 149.0
|
||||
margin_right = 263.0
|
||||
margin_bottom = 123.0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
|
||||
[node name="Action2" type="Label" parent="SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer2"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 114.0
|
||||
margin_bottom = 9.0
|
||||
text = "Action 2"
|
||||
align = 1
|
||||
|
||||
[node name="ControllerButton2" type="Button" parent="SwapKeysMenu/VBoxContainer2/HBoxContainer/VBoxContainer2"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 13.0
|
||||
margin_right = 114.0
|
||||
margin_bottom = 123.0
|
||||
focus_mode = 0
|
||||
size_flags_horizontal = 0
|
||||
size_flags_vertical = 0
|
||||
shortcut_in_tooltip = false
|
||||
button_mask = 0
|
||||
enabled_focus_mode = 0
|
||||
icon = ExtResource( 24 )
|
||||
icon_align = 1
|
||||
script = ExtResource( 23 )
|
||||
path = "duck"
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="SwapKeysMenu/VBoxContainer2"]
|
||||
margin_top = 204.0
|
||||
margin_right = 278.0
|
||||
margin_bottom = 246.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
focus_mode = 2
|
||||
mouse_filter = 0
|
||||
input_pass_on_modal_close_click = false
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 0
|
||||
alignment = 1
|
||||
|
||||
[node name="Yes" type="Button" parent="SwapKeysMenu/VBoxContainer2/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_right = 278.0
|
||||
margin_bottom = 19.0
|
||||
focus_neighbour_top = NodePath("../No")
|
||||
focus_neighbour_bottom = NodePath("../No")
|
||||
text = "Yes"
|
||||
script = ExtResource( 8 )
|
||||
|
||||
[node name="No" type="Button" parent="SwapKeysMenu/VBoxContainer2/VBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
margin_top = 23.0
|
||||
margin_right = 278.0
|
||||
margin_bottom = 42.0
|
||||
focus_neighbour_top = NodePath("../Yes")
|
||||
focus_neighbour_bottom = NodePath("../Yes")
|
||||
text = "NO"
|
||||
script = ExtResource( 8 )
|
||||
|
||||
[connection signal="button_up" from="Panel/Back" to="Panel/Back" method="_on_button_up"]
|
||||
[connection signal="button_up" from="Panel/Reset" to="Panel/Reset" method="_on_button_up"]
|
||||
[connection signal="button_up" from="Panel/Save" to="Panel/Save" method="_on_button_up"]
|
||||
@ -429,3 +568,5 @@ next_screen_path = "res://src/UserInterface/Screens/MainMenu/MainScreen.tscn"
|
||||
[connection signal="button_up" from="ReallyQuitMenu/VBoxContainer/SaveNQuit" to="ReallyQuitMenu/VBoxContainer/SaveNQuit" method="_on_button_up"]
|
||||
[connection signal="button_up" from="ReallyQuitMenu/VBoxContainer/ContinueEdit" to="ReallyQuitMenu" method="close"]
|
||||
[connection signal="button_up" from="ReallyQuitMenu/VBoxContainer/QuitDontSave" to="ReallyQuitMenu/VBoxContainer/QuitDontSave" method="_on_button_up"]
|
||||
[connection signal="pressed" from="SwapKeysMenu/VBoxContainer2/VBoxContainer/Yes" to="SwapKeysMenu" method="swap"]
|
||||
[connection signal="pressed" from="SwapKeysMenu/VBoxContainer2/VBoxContainer/No" to="SwapKeysMenu" method="do_not_swap"]
|
||||
|
||||
@ -5,8 +5,10 @@ signal change_button_pressed
|
||||
export var button_size: Vector2 = Vector2(30, 30)
|
||||
export var interactable: bool = false
|
||||
|
||||
onready var action = ""
|
||||
|
||||
func initialize(action_name, event):
|
||||
action = action_name
|
||||
$Action.text = action_name.capitalize()
|
||||
$Key.add_child(create_controller_button(event))
|
||||
|
||||
|
||||
@ -5,63 +5,89 @@ signal profile_changed(new_profile)
|
||||
var current_profile_id = 0
|
||||
|
||||
var profiles = {
|
||||
0: 'keyboard',
|
||||
1: 'controller'
|
||||
0: 'keyboard',
|
||||
1: 'controller'
|
||||
}
|
||||
|
||||
var profile_order = ["move_left", "alt move_left", "move_right", "alt move_right", "jump", "run", "duck",
|
||||
"alt duck", "up", "alt up", "interact", "pause"]
|
||||
|
||||
var keyboard = {}
|
||||
var controller = {}
|
||||
|
||||
func change_profile(id):
|
||||
current_profile_id = id
|
||||
var profile = get(profiles[id])
|
||||
|
||||
for action_name in profile.keys():
|
||||
change_action_key(action_name, profile[action_name])
|
||||
emit_signal('profile_changed', profile)
|
||||
return profile
|
||||
func change_profile(id: int) -> Dictionary:
|
||||
current_profile_id = id
|
||||
var profile = get(profiles[id])
|
||||
|
||||
for action_name in profile.keys():
|
||||
change_action_key(action_name, profile[action_name])
|
||||
|
||||
emit_signal('profile_changed', profile)
|
||||
return profile
|
||||
|
||||
func commit_to_changes():
|
||||
for profile_name in profiles.values():
|
||||
var profile = get(profile_name)
|
||||
for action_name in profile.keys():
|
||||
if(action_name.ends_with("_old")):
|
||||
continue
|
||||
erase_old_action_event(action_name)
|
||||
profile[action_name + "_old"] = profile[action_name]
|
||||
InputMap.action_add_event(action_name, profile[action_name])
|
||||
func commit_to_changes() -> void:
|
||||
for profile_name in profiles.values():
|
||||
var profile = get(profile_name)
|
||||
for action_name in profile.keys():
|
||||
if(action_name.ends_with("_old")):
|
||||
continue
|
||||
erase_old_action_event(action_name)
|
||||
profile[action_name + "_old"] = profile[action_name]
|
||||
var a_name = action_name
|
||||
# Assign the alternative event to the same action as the regular event
|
||||
if(action_name.begins_with("alt")):
|
||||
action_name = action_name.trim_prefix("alt ")
|
||||
InputMap.action_add_event(action_name, profile[a_name])
|
||||
|
||||
func change_action_key(action_name, event, old_event = null) -> bool:
|
||||
if(old_event != null):
|
||||
if(event.as_text().match("*Joy*") != old_event.as_text().match("*Joy*")):
|
||||
return false
|
||||
get_selected_profile()[action_name+"_old"] = old_event
|
||||
get_selected_profile()[action_name] = event
|
||||
return true
|
||||
if(old_event != null):
|
||||
if(event.as_text().match("*Joy*") != old_event.as_text().match("*Joy*")):
|
||||
return false
|
||||
get_selected_profile()[action_name+"_old"] = old_event
|
||||
get_selected_profile()[action_name] = event
|
||||
return true
|
||||
|
||||
func erase_old_action_event(action_name):
|
||||
if(get_selected_profile().has(action_name+"_old")):
|
||||
var old_event = get_selected_profile()[action_name+"_old"]
|
||||
var event = get_selected_profile()[action_name]
|
||||
if(old_event != event):
|
||||
InputMap.action_erase_event(action_name, old_event)
|
||||
func erase_old_action_event(action_name: String) -> void:
|
||||
if(get_selected_profile().has(action_name+"_old")):
|
||||
var old_event = get_selected_profile()[action_name+"_old"]
|
||||
var event = get_selected_profile()[action_name]
|
||||
if(old_event != event):
|
||||
if(action_name.begins_with("alt")):
|
||||
action_name = action_name.trim_prefix("alt ")
|
||||
InputMap.action_erase_event(action_name, old_event)
|
||||
|
||||
func initialize_profiles() -> void:
|
||||
var actions: Array = InputMap.get_actions()
|
||||
actions.sort()
|
||||
for action in actions:
|
||||
var input_events = InputMap.get_action_list(action)
|
||||
for event in input_events:
|
||||
if event.as_text().match("*JoypadButton*"):
|
||||
controller[action] = event
|
||||
controller[action+"_old"] = event
|
||||
elif !event.as_text().match("*Joy*"):
|
||||
keyboard[action] = event
|
||||
keyboard[action+"_old"] = event
|
||||
change_profile(current_profile_id)
|
||||
var actions: Array = InputMap.get_actions()
|
||||
actions.sort()
|
||||
for action in actions:
|
||||
var input_events: Array = InputMap.get_action_list(action)
|
||||
var controller_events: Array = []
|
||||
var keyboard_events: Array = []
|
||||
|
||||
for input_event in input_events:
|
||||
if input_event.as_text().match("*Joypad*"):
|
||||
controller_events.append(input_event)
|
||||
if !input_event.as_text().match("*Joy*"):
|
||||
keyboard_events.append(input_event)
|
||||
|
||||
if controller_events.size() > 0:
|
||||
controller[action] = controller_events[0]
|
||||
controller[action+"_old"] = controller_events[0]
|
||||
if controller_events.size() > 1:
|
||||
controller["alt " + action] = controller_events[1]
|
||||
controller["alt " + action +"_old"] = controller_events[1]
|
||||
|
||||
if keyboard_events.size() > 0:
|
||||
keyboard[action] = keyboard_events[0]
|
||||
keyboard[action + "_old"] = keyboard_events[0]
|
||||
if keyboard_events.size() > 1:
|
||||
keyboard["alt " + action] = keyboard_events[1]
|
||||
keyboard["alt " + action + "_old"] = keyboard_events[1]
|
||||
|
||||
change_profile(current_profile_id)
|
||||
|
||||
func get_selected_profile():
|
||||
return get(profiles[current_profile_id])
|
||||
return get(profiles[current_profile_id])
|
||||
|
||||
func _on_ProfilesMenu_item_selected(ID):
|
||||
change_profile(ID)
|
||||
change_profile(ID)
|
||||
|
||||
@ -17,8 +17,8 @@ func _input(event: InputEvent) -> void:
|
||||
event = null
|
||||
accept_event()
|
||||
get_tree().set_input_as_handled()
|
||||
emit_signal("key_selected", event)
|
||||
close()
|
||||
emit_signal("key_selected", event)
|
||||
|
||||
func open():
|
||||
show()
|
||||
|
||||
@ -3,22 +3,22 @@ extends Panel
|
||||
var prev_focus
|
||||
|
||||
func open():
|
||||
visible = true
|
||||
prev_focus = get_focus_owner()
|
||||
mitigate_ui_navigation_spill_over(true)
|
||||
$"%SaveNQuit".grab_focus()
|
||||
visible = true
|
||||
prev_focus = get_focus_owner()
|
||||
mitigate_ui_navigation_spill_over(true)
|
||||
$"%SaveNQuit".grab_focus()
|
||||
|
||||
func mitigate_ui_navigation_spill_over(var value: bool):
|
||||
var mode = Control.FOCUS_NONE if value else Control.FOCUS_ALL
|
||||
$"%ProfilesMenu".focus_mode = mode
|
||||
$"%Back".focus_mode = mode
|
||||
$"%Reset".focus_mode = mode
|
||||
$"%Save".focus_mode = mode
|
||||
for line in $"%ActionKeyList".get_children():
|
||||
line.get_node("ChangeButton").focus_mode = mode
|
||||
var mode = Control.FOCUS_NONE if value else Control.FOCUS_ALL
|
||||
$"%ProfilesMenu".focus_mode = mode
|
||||
$"%Back".focus_mode = mode
|
||||
$"%Reset".focus_mode = mode
|
||||
$"%Save".focus_mode = mode
|
||||
for line in $"%ActionKeyList".get_children():
|
||||
line.get_node("ChangeButton").focus_mode = mode
|
||||
|
||||
func close():
|
||||
visible = false
|
||||
mitigate_ui_navigation_spill_over(false)
|
||||
self.release_focus()
|
||||
prev_focus.grab_focus()
|
||||
visible = false
|
||||
mitigate_ui_navigation_spill_over(false)
|
||||
self.release_focus()
|
||||
prev_focus.grab_focus()
|
||||
|
||||
@ -3,6 +3,6 @@ extends AudibleButton
|
||||
onready var mapper := $"%InputMapper"
|
||||
|
||||
func _on_button_up() -> void:
|
||||
InputMap.load_from_globals()
|
||||
mapper.initialize_profiles()
|
||||
SaveManager.save_default()
|
||||
InputMap.load_from_globals()
|
||||
mapper.initialize_profiles()
|
||||
SaveManager.save_default()
|
||||
|
||||
@ -4,7 +4,7 @@ onready var mapper := $"%InputMapper"
|
||||
onready var controllsMenu := $"../.."
|
||||
|
||||
func _on_button_up() -> void:
|
||||
mapper.commit_to_changes()
|
||||
SaveManager.save_default()
|
||||
controllsMenu.changes_saved = true
|
||||
controllsMenu.changes_made = false
|
||||
mapper.commit_to_changes()
|
||||
SaveManager.save_default()
|
||||
controllsMenu.changes_saved = true
|
||||
controllsMenu.changes_made = false
|
||||
|
||||
@ -0,0 +1,53 @@
|
||||
extends Panel
|
||||
|
||||
signal selection_made(result)
|
||||
|
||||
var prev_focus
|
||||
|
||||
var selected_action
|
||||
var action_with_same_event
|
||||
var new_event_for_selected_action
|
||||
var old_event_for_selected_action
|
||||
|
||||
func open(selected_action: String, action_with_same_event: String,
|
||||
old_event_for_selected_action: InputEvent, new_event_for_selected_action: InputEvent) -> void:
|
||||
prev_focus = get_focus_owner()
|
||||
self.selected_action = selected_action
|
||||
self.action_with_same_event = action_with_same_event
|
||||
self.new_event_for_selected_action = new_event_for_selected_action
|
||||
self.old_event_for_selected_action = old_event_for_selected_action
|
||||
|
||||
$"%Action1".text = selected_action
|
||||
var event_path1 = ControllerIcons._convert_event_to_path(old_event_for_selected_action)
|
||||
$"%ControllerButton1".path = event_path1
|
||||
|
||||
$"%Action2".text = action_with_same_event
|
||||
var event_path2 = ControllerIcons._convert_event_to_path(new_event_for_selected_action)
|
||||
$"%ControllerButton2".path = event_path2
|
||||
|
||||
visible = true
|
||||
mitigate_ui_navigation_spill_over(true)
|
||||
$"%Yes".grab_focus()
|
||||
|
||||
func mitigate_ui_navigation_spill_over(var value: bool):
|
||||
var mode = Control.FOCUS_NONE if value else Control.FOCUS_ALL
|
||||
var inverse_mode = Control.FOCUS_ALL if value else Control.FOCUS_NONE
|
||||
$"%No".focus_mode = inverse_mode
|
||||
$"%Yes".focus_mode = inverse_mode
|
||||
for line in $"%ActionKeyList".get_children():
|
||||
line.get_node("ChangeButton").focus_mode = mode
|
||||
|
||||
func close() -> void:
|
||||
visible = false
|
||||
mitigate_ui_navigation_spill_over(false)
|
||||
prev_focus.set_focus_mode(Control.FOCUS_ALL)
|
||||
prev_focus.grab_focus()
|
||||
|
||||
func swap() -> void:
|
||||
close()
|
||||
emit_signal("selection_made", true)
|
||||
|
||||
func do_not_swap() -> void:
|
||||
close()
|
||||
emit_signal("selection_made", false)
|
||||
|
||||
@ -11,8 +11,8 @@ func initialize_with_progress(levelFullName: String) -> void:
|
||||
|
||||
var level_time : float = GlobalState.get_level_time(levelFullName)
|
||||
if(GlobalState.get_level_completed(levelFullName)):
|
||||
$LevelTime.visible = true
|
||||
$LevelTime.text = "Time " + str(round(level_time*1000)/1000) + " sec"
|
||||
$"%LevelTime".visible = true
|
||||
$"%LevelTime".text = "Time " + str(round(level_time*1000)/1000) + " sec"
|
||||
|
||||
|
||||
func register_froggy(var count : int = 0, var freed: bool = false) -> void:
|
||||
|
||||
@ -45,9 +45,9 @@ script = ExtResource( 4 )
|
||||
[node name="FreedFroggy1" type="TextureRect" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
margin_top = 28.0
|
||||
margin_right = 119.0
|
||||
margin_bottom = 47.0
|
||||
margin_top = 21.0
|
||||
margin_right = 126.0
|
||||
margin_bottom = 40.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
focus_mode = 2
|
||||
@ -163,10 +163,12 @@ size_flags_vertical = 3
|
||||
texture = ExtResource( 2 )
|
||||
|
||||
[node name="LevelTime" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
margin_top = 21.0
|
||||
margin_right = 126.0
|
||||
margin_bottom = 32.0
|
||||
focus_mode = 2
|
||||
custom_colors/font_color = Color( 0.717647, 0.717647, 0.717647, 1 )
|
||||
custom_fonts/font = SubResource( 13 )
|
||||
text = "Time: 10 sec"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user