diff --git a/addons/input-system/InputReader.gd b/addons/input-system/InputReader.gd index ffab4ad..8c47f35 100644 --- a/addons/input-system/InputReader.gd +++ b/addons/input-system/InputReader.gd @@ -35,11 +35,10 @@ func _register_action(event: InputEvent, action: String): if event.is_action_pressed(action): if not inputs.has(action): inputs.append(action) - emit_signal("just_pressed", event) + emit_signal("just_pressed", event) if event.is_action_released(action): - if inputs.has(action): - inputs.erase(action) - emit_signal("just_released", event) + inputs.erase(action) + emit_signal("just_released", event) func _get_actions_for_event(event: InputEvent) -> Array: diff --git a/addons/input-system/InputType.gd b/addons/input-system/InputType.gd index 2ed34ac..73758b6 100644 --- a/addons/input-system/InputType.gd +++ b/addons/input-system/InputType.gd @@ -82,8 +82,13 @@ static func to_text(type: int) -> String: if index != -1: return Key.keys()[index] - var ev = to_event(type) + var ev = to_event(type) as InputEventKey if ev: +# if ev.unicode: +# var char = String.chr(ev.unicode) +# if char == " ": +# return "Space" +# return char return ev.as_text() return "" @@ -91,7 +96,15 @@ static func to_text(type: int) -> String: static func to_event(type: int) -> InputEvent: if type <= 0: var key = InputEventKey.new() - key.keycode = -type + var code = -type + if code >= KEY_SPECIAL: + key.keycode = code + else: + if code >= 97 and code <= 122: # lower case a-z + code -= 32 # make it upper case to match keycode + key.unicode = code + key.keycode = code + key.pressed = true return key if type >= Key.JOYSTICK_L_UP and type <= Key.JOYSTICK_R_LEFT: @@ -120,7 +133,10 @@ static func to_event(type: int) -> InputEvent: static func to_type(event: InputEvent) -> int: if event is InputEventKey: - return -event.keycode + if event.unicode: # ASCII should only return unicodes ? + return -event.unicode + + return -event.keycode # Special Keys like Enter, Tab should only have keycode ? if event is InputEventJoypadMotion and event.axis_value != 0: for key in JOY_MOTION_MAP: diff --git a/addons/menu-system/RemapButton.gd b/addons/menu-system/RemapButton.gd index fa5b3ab..cb1015c 100644 --- a/addons/menu-system/RemapButton.gd +++ b/addons/menu-system/RemapButton.gd @@ -23,9 +23,7 @@ func get_input() -> InputEvent: func remap_input(ev: InputEvent) -> void: - var existing = get_input() - if existing: - InputMap.action_erase_event(action, existing) + InputMap.action_erase_events(action) InputMap.action_add_event(action, ev) _update() diff --git a/addons/scene-manager/SceneManager.gd b/addons/scene-manager/SceneManager.gd index 2b78367..4adec3e 100644 --- a/addons/scene-manager/SceneManager.gd +++ b/addons/scene-manager/SceneManager.gd @@ -30,10 +30,11 @@ const TRANSITION_MAP = { Transition.RADIAL: "radial.png", } -const DEFAULT_SPEED = 1 +const DEFAULT_SPEED = 1.5 @export var disable_inputs = true +@onready var anim: AnimationPlayer = $AnimationPlayer @onready var rect: ColorRect = $CanvasLayer/ColorRect var transitioning = false @@ -44,7 +45,7 @@ func _input(event): func reload_scene(): - change_scene(get_tree().current_scene.filename) + change_scene(get_tree().current_scene.scene_file_path) func change_scene(scene, transition = null, speed = DEFAULT_SPEED): @@ -53,25 +54,28 @@ func change_scene(scene, transition = null, speed = DEFAULT_SPEED): path = scene.resource_path transitioning = true - await _fade(false, transition, speed) + anim.play("fade_out", -1, speed) + await anim.animation_finished + get_tree().change_scene_to_file(path) - await _fade(true, transition, speed) + anim.play("fade_in", -1, speed) transitioning = false - emit_signal("scene_changed") + await anim.animation_finished + emit_signal("scene_changed") -func _fade(reverse: bool, transition, speed: float): - var eff = Effect.new() - var start = 1.0 if reverse else 0.0 - var end = 0.0 if reverse else 1.0 - eff.setup_props("shader_parameter/dissolve_amount", start, end) - var mat: ShaderMaterial = rect.get_material() - if transition: - mat.set("shader_parameter/dissolve_texture", load(SHADER_DIR + "/" + TRANSITION_MAP[transition])) - mat.set("shader_parameter/fade", transition == null) - eff.obj = mat +# func _fade(reverse: bool, transition, speed: float): +# var eff = Effect.new() +# var start = 1.0 if reverse else 0.0 +# var end = 0.0 if reverse else 1.0 +# eff.setup_props("shader_parameter/dissolve_amount", start, end) +# var mat: ShaderMaterial = rect.get_material() +# if transition: +# mat.set("shader_parameter/dissolve_texture", load(SHADER_DIR + "/" + TRANSITION_MAP[transition])) +# mat.set("shader_parameter/fade", transition == null) +# eff.obj = mat - eff.duration = speed - add_child(eff) - await eff.finished +# eff.duration = speed +# add_child(eff) +# await eff.finished diff --git a/addons/scene-manager/SceneManager.tscn b/addons/scene-manager/SceneManager.tscn index aaa513a..66fa259 100644 --- a/addons/scene-manager/SceneManager.tscn +++ b/addons/scene-manager/SceneManager.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=3 uid="uid://b8dxgonvi2qp2"] +[gd_scene load_steps=8 format=3 uid="uid://b8dxgonvi2qp2"] [ext_resource type="Shader" path="res://addons/scene-manager/Transition.gdshader" id="1"] [ext_resource type="Script" path="res://addons/scene-manager/SceneManager.gd" id="3"] @@ -10,7 +10,60 @@ shader_parameter/fade_color = Color(0, 0, 0, 1) shader_parameter/fade = true shader_parameter/inverted = false +[sub_resource type="Animation" id="Animation_13odc"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/ColorRect:material:shader_parameter/dissolve_amount") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + +[sub_resource type="Animation" id="Animation_5qvpm"] +resource_name = "fade_in" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/ColorRect:material:shader_parameter/dissolve_amount") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [1.0, 0.0] +} + +[sub_resource type="Animation" id="Animation_wwcam"] +resource_name = "fade_out" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/ColorRect:material:shader_parameter/dissolve_amount") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 1.0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_pf8t3"] +_data = { +"RESET": SubResource("Animation_13odc"), +"fade_in": SubResource("Animation_5qvpm"), +"fade_out": SubResource("Animation_wwcam") +} + [node name="SceneManager" type="Node"] +process_mode = 3 script = ExtResource("3") [node name="CanvasLayer" type="CanvasLayer" parent="."] @@ -23,3 +76,8 @@ anchor_right = 1.0 anchor_bottom = 1.0 mouse_filter = 2 color = Color(0, 0, 0, 1) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_pf8t3") +} diff --git a/shared/items/Interactable.gd b/shared/items/Interactable.gd index 15cf28b..832e5b0 100644 --- a/shared/items/Interactable.gd +++ b/shared/items/Interactable.gd @@ -5,19 +5,20 @@ signal interacted const OUTLINE = preload("res://shared/items/sprite_outline.tres") -@export var sprite_path: NodePath -@onready var sprite: Sprite2D = get_node(sprite_path) +@export var sprite: Sprite2D +func _ready(): + sprite.material = OUTLINE func highlight(): - if sprite and not sprite.material: - sprite.material = OUTLINE + var mat = sprite.material as ShaderMaterial + mat.set_shader_parameter("enable", true) func unhighlight(): - if sprite and sprite.material: - sprite.material = null + var mat = sprite.material as ShaderMaterial + mat.set_shader_parameter("enable", false) func interact(): - emit_signal("interacted") + interacted.emit() diff --git a/shared/shaders/outline.gdshader b/shared/shaders/outline.gdshader index 5d3fdd4..02a683f 100644 --- a/shared/shaders/outline.gdshader +++ b/shared/shaders/outline.gdshader @@ -6,8 +6,10 @@ uniform int pattern : hint_range(0, 2) = 0; // diamond, circle, square uniform bool inside = false; uniform bool add_margins = true; // only useful when inside is false +uniform bool enable = true; + void vertex() { - if (add_margins) { + if (enable && add_margins) { VERTEX += (UV * 2.0 - 1.0) * width; } } @@ -41,7 +43,7 @@ bool hasContraryNeighbour(vec2 uv, vec2 texture_pixel_size, sampler2D texture) { void fragment() { vec2 uv = UV; - if (add_margins) { + if (enable && add_margins) { vec2 texture_pixel_size = vec2(1.0) / (vec2(1.0) / TEXTURE_PIXEL_SIZE + vec2(width * 2.0)); uv = (uv - texture_pixel_size * width) * TEXTURE_PIXEL_SIZE / texture_pixel_size; @@ -55,8 +57,10 @@ void fragment() { COLOR = texture(TEXTURE, uv); } - if ((COLOR.a > 0.0) == inside && hasContraryNeighbour(uv, TEXTURE_PIXEL_SIZE, TEXTURE)) { - COLOR.rgb = inside ? mix(COLOR.rgb, color.rgb, color.a) : color.rgb; - COLOR.a += (1.0 - COLOR.a) * color.a; + if (enable) { + if ((COLOR.a > 0.0) == inside && hasContraryNeighbour(uv, TEXTURE_PIXEL_SIZE, TEXTURE)) { + COLOR.rgb = inside ? mix(COLOR.rgb, color.rgb, color.a) : color.rgb; + COLOR.a += (1.0 - COLOR.a) * color.a; + } } } \ No newline at end of file diff --git a/theme/theme.scss b/theme/theme.scss index 417f479..39eb3e5 100644 --- a/theme/theme.scss +++ b/theme/theme.scss @@ -3,6 +3,7 @@ $hover-color: Color(1, 1, 1, 1); body { font-family: url(jackeyfont.ttf); + font-size: 8; } Button {