diff --git a/.gitattributes b/.gitattributes index fe3a315a..e03d0588 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,19 +1,16 @@ # Normalize EOL for all files that Git considers text files. * text=auto eol=lf -.blend filter=lfs diff=lfs merge=lfs -text -.png filter=lfs diff=lfs merge=lfs -text -.jpg filter=lfs diff=lfs merge=lfs -text -.glb filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.glb filter=lfs diff=lfs merge=lfs -text *.wav filter=lfs diff=lfs merge=lfs -text *.mp3 filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.exr filter=lfs diff=lfs merge=lfs -text *.ogg filter=lfs diff=lfs merge=lfs -text -*.blend filter=lfs diff=lfs merge=lfs -text -*.blend1 filter=lfs diff=lfs merge=lfs -text -*.png filter=lfs diff=lfs merge=lfs -text -*.aup3 filter=lfs diff=lfs merge=lfs -text *.jpg filter=lfs diff=lfs merge=lfs -text +*.blend1 filter=lfs diff=lfs merge=lfs -text +*.aup3 filter=lfs diff=lfs merge=lfs -text *.jpeg filter=lfs diff=lfs merge=lfs -text *.tga filter=lfs diff=lfs merge=lfs -text *.ico filter=lfs diff=lfs merge=lfs -text @@ -22,7 +19,6 @@ *.aseprite filter=lfs diff=lfs merge=lfs -text *.xcf filter=lfs diff=lfs merge=lfs -text *.pdf filter=lfs diff=lfs merge=lfs -text -*.glb filter=lfs diff=lfs merge=lfs -text *.flac filter=lfs diff=lfs merge=lfs -text *.ttf filter=lfs diff=lfs merge=lfs -text *.bin filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 841fecec..3f5af292 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ src/.godot/ *.blend1 result +src/addons/godot-jolt \ No newline at end of file diff --git a/design/buttons.svg b/design/buttons.svg new file mode 100644 index 00000000..08369864 --- /dev/null +++ b/design/buttons.svg @@ -0,0 +1,255 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/design/contributions.md b/design/contributions.md index 14cd5d43..bd7b10ab 100644 --- a/design/contributions.md +++ b/design/contributions.md @@ -36,7 +36,7 @@ + [MegaGlest](https://megaglest.org/), GPL + [Splash Screen Neo](https://inkscape.org/de/~MuhamadAliAkbar/%E2%98%85splash-screen-neon) by [Muhamad Ali Akbar](https://inkscape.org/de/~MuhamadAliAkbar/), CC-BY-SA + [Oh My Git](https://ohmygit.org/) by [bleeptrack](https://bleeptrack.de/) and [blinry](https://morr.cc/), Blue Oak Model License - + [Ghostwriter]() by kde**** + + [Ghostwriter]() by kde ## Music - [Foundations I by Azure Studios](https://azurestudios.bandcamp.com/album/foundations-i-24bit), CC-BY 3.0 diff --git a/design/fairy_lights.blend b/design/fairy_lights.blend new file mode 100644 index 00000000..5752dd3f --- /dev/null +++ b/design/fairy_lights.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c881fcd0d24a9082f1907821b21c4d73e485a48a83f88c6aeed452fe0f7b4478 +size 1154684 diff --git a/design/interface-elements.svg b/design/interface-elements.svg index 9f906865..ad88e175 100644 --- a/design/interface-elements.svg +++ b/design/interface-elements.svg @@ -8,7 +8,7 @@ version="1.1" id="svg5" xml:space="preserve" - inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" + inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)" sodipodi:docname="interface-elements.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -24,11 +24,11 @@ inkscape:deskcolor="#505050" inkscape:document-units="px" showgrid="false" - inkscape:zoom="0.64693624" - inkscape:cx="1021.739" - inkscape:cy="499.2764" + inkscape:zoom="0.457453" + inkscape:cx="214.22966" + inkscape:cy="1458.0733" inkscape:window-width="3840" - inkscape:window-height="2095" + inkscape:window-height="2096" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" @@ -37,7 +37,9 @@ y="0" width="270.93332" height="270.93332" - id="page2413" /> + sodipodi:nodetypes="cssscscc" /> diff --git a/design/landshark_plushie.blend b/design/landshark_plushie.blend new file mode 100644 index 00000000..189d08b5 --- /dev/null +++ b/design/landshark_plushie.blend @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:274d537e2b2ce9c4b592a79c11ab1c2a3abf87ad5822b218e10b167b12964565 +size 16040619 diff --git a/design/star.blend b/design/star.blend index 8177974f..23c9b8e8 100644 --- a/design/star.blend +++ b/design/star.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13952d8888b8bc41db7192934864417175857ca10885077927e7eb4ad0722880 -size 1377601 +oid sha256:1e175ca10f16b7dceea864240cf65b0a591576377e95c15409cbdd492442a968 +size 1561733 diff --git a/design/youth-construction.blend b/design/youth-construction.blend index e29dd2ac..c6de9c75 100644 --- a/design/youth-construction.blend +++ b/design/youth-construction.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ba43248db25f8f893f4c6a27d034bfafca1ef1c54019ae458b712a477ac7122 -size 204553656 +oid sha256:1df3c4365550328a69c2ed3aa34232e7635c3fb6cd596802f732a2b45afea6b8 +size 198287196 diff --git a/src/addons/LineRenderer/line_plugin.gd b/src/addons/LineRenderer/line_plugin.gd new file mode 100644 index 00000000..5dbab1b5 --- /dev/null +++ b/src/addons/LineRenderer/line_plugin.gd @@ -0,0 +1,11 @@ +@tool +extends EditorPlugin + +func _enter_tree(): + # Initialization of the plugin goes here. + add_custom_type("LineRenderer3D", "MeshInstance3D", preload("line_renderer.gd"), preload("line_render_icon.svg")) + + +func _exit_tree(): + # Clean-up of the plugin goes here. + remove_custom_type("Line Renderer 3D") diff --git a/src/addons/LineRenderer/line_render_icon.svg b/src/addons/LineRenderer/line_render_icon.svg new file mode 100644 index 00000000..aa4d895b --- /dev/null +++ b/src/addons/LineRenderer/line_render_icon.svg @@ -0,0 +1,127 @@ + + + + diff --git a/src/addons/LineRenderer/line_render_icon.svg.import b/src/addons/LineRenderer/line_render_icon.svg.import new file mode 100644 index 00000000..ffd167a5 --- /dev/null +++ b/src/addons/LineRenderer/line_render_icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drumkfhf8d2tn" +path="res://.godot/imported/line_render_icon.svg-9fabbd2cfeb579cc989ccd151dbe0a0b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/LineRenderer/line_render_icon.svg" +dest_files=["res://.godot/imported/line_render_icon.svg-9fabbd2cfeb579cc989ccd151dbe0a0b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/src/addons/LineRenderer/line_renderer.gd b/src/addons/LineRenderer/line_renderer.gd new file mode 100644 index 00000000..a5ce4f74 --- /dev/null +++ b/src/addons/LineRenderer/line_renderer.gd @@ -0,0 +1,171 @@ +@tool +extends MeshInstance3D +class_name LineRenderer3D + +@export var points: Array[Vector3] = [Vector3(0,0,0),Vector3(0,5,0)]: + set(new_points): points = new_points +@export var start_thickness:float = 0.1: + set(new_start_thickness): start_thickness = new_start_thickness +@export var end_thickness:float = 0.1: + set(new_end_thickness): end_thickness = new_end_thickness +@export var corner_resolution:int = 5: + set(new_corner_resolution): corner_resolution = new_corner_resolution +@export var cap_resolution:int = 5: + set(new_cap_resolution): cap_resolution = new_cap_resolution +@export var draw_caps:bool = true: + set(new_draw_caps): draw_caps = new_draw_caps +@export var draw_crners:bool = true: + set(new_draw_crners): draw_crners = new_draw_crners +@export var use_global_coords:bool = true: + set(new_use_global_coords): use_global_coords = new_use_global_coords +@export var tile_texture:bool = true: + set(new_tile_texture): tile_texture = new_tile_texture + +var camera : Camera3D +var cameraOrigin : Vector3 + +func _enter_tree(): + mesh = ImmediateMesh.new() + +func _ready(): + pass + +func _process(_delta): + if points.size() < 2: + return + + camera = get_viewport().get_camera_3d() + if camera == null: + return + cameraOrigin = to_local(camera.get_global_transform().origin) + + var progressStep:float = 1.0 / points.size(); + var progress:float = 0; + var thickness:float = lerp(start_thickness, end_thickness, progress); + var nextThickness:float = lerp(start_thickness, end_thickness, progress + progressStep); + + var surface:SurfaceTool = SurfaceTool.new() + surface.begin(Mesh.PRIMITIVE_TRIANGLES) + + for i in range(points.size() - 1): + var A:Vector3 = points[i] + var B:Vector3 = points[i+1] + + if use_global_coords: + A = to_local(A) + B = to_local(B) + + var AB:Vector3 = B - A; + var orthogonalABStart:Vector3 = (cameraOrigin - ((A + B) / 2)).cross(AB).normalized() * thickness; + var orthogonalABEnd:Vector3 = (cameraOrigin - ((A + B) / 2)).cross(AB).normalized() * nextThickness; + + var AtoABStart:Vector3 = A + orthogonalABStart + var AfromABStart:Vector3 = A - orthogonalABStart + var BtoABEnd:Vector3 = B + orthogonalABEnd + var BfromABEnd:Vector3 = B - orthogonalABEnd + + if i == 0: + if draw_caps: + cap(surface, A, B, thickness, cap_resolution) + + if tile_texture: + var ABLen = AB.length() + var ABFloor = floor(ABLen) + var ABFrac = ABLen - ABFloor + + surface.set_uv(Vector2(ABFloor, 0)) + surface.add_vertex(AtoABStart) + surface.set_uv(Vector2(-ABFrac, 0)) + surface.add_vertex(BtoABEnd) + surface.set_uv(Vector2(ABFloor, 1)) + surface.add_vertex(AfromABStart) + surface.set_uv(Vector2(-ABFrac, 0)) + surface.add_vertex(BtoABEnd) + surface.set_uv(Vector2(-ABFrac, 1)) + surface.add_vertex(BfromABEnd) + surface.set_uv(Vector2(ABFloor, 1)) + surface.add_vertex(AfromABStart) + else: + surface.set_uv(Vector2(1, 0)) + surface.add_vertex(AtoABStart) + surface.set_uv(Vector2(0, 0)) + surface.add_vertex(BtoABEnd) + surface.set_uv(Vector2(1, 1)) + surface.add_vertex(AfromABStart) + surface.set_uv(Vector2(0, 0)) + surface.add_vertex(BtoABEnd) + surface.set_uv(Vector2(0, 1)) + surface.add_vertex(BfromABEnd) + surface.set_uv(Vector2(1, 1)) + surface.add_vertex(AfromABStart) + + if i == points.size() - 2: + if draw_caps: + cap(surface, B, A, nextThickness, cap_resolution) + else: + if draw_crners: + var C = points[i+2] + if use_global_coords: + C = to_local(C) + + var BC = C - B; + var orthogonalBCStart = (cameraOrigin - ((B + C) / 2)).cross(BC).normalized() * nextThickness; + + var angleDot = AB.dot(orthogonalBCStart) + + if angleDot > 0 and not angleDot == 1: + corner(surface, B, BtoABEnd, B + orthogonalBCStart, corner_resolution) + elif angleDot < 0 and not angleDot == -1: + corner(surface, B, B - orthogonalBCStart, BfromABEnd, corner_resolution) + + progress += progressStep; + thickness = lerp(start_thickness, end_thickness, progress); + nextThickness = lerp(start_thickness, end_thickness, progress + progressStep); + + surface.generate_normals() + surface.generate_tangents() + mesh = surface.commit() + +func cap(surface: SurfaceTool, center:Vector3, pivot:Vector3, thickness:float, cap_resolution:int): + var orthogonal:Vector3 = (cameraOrigin - center).cross(center - pivot).normalized() * thickness; + var axis:Vector3 = (center - cameraOrigin).normalized(); + + var vertex_array:Array = [] + for i in range(cap_resolution + 1): + vertex_array.append(Vector3(0,0,0)) + vertex_array[0] = center + orthogonal; + vertex_array[cap_resolution] = center - orthogonal; + + for i in range(1, cap_resolution): + vertex_array[i] = center + (orthogonal.rotated(axis, lerp(0.0, PI, float(i) / cap_resolution))); + + for i in range(1, cap_resolution + 1): + surface.set_uv(Vector2(0, (i - 1) / cap_resolution)) + surface.add_vertex(vertex_array[i - 1]); + surface.set_uv(Vector2(0, (i - 1) / cap_resolution)) + surface.add_vertex(vertex_array[i]); + surface.set_uv(Vector2(0.5, 0.5)) + surface.add_vertex(center); + +func corner(surface: SurfaceTool, center:Vector3, start:Vector3, end:Vector3, cap_resolution:int): + var vertex_array:Array = [] + for i in range(cap_resolution + 1): + vertex_array.append(Vector3(0,0,0)) + vertex_array[0] = start; + vertex_array[cap_resolution] = end; + + var axis:Vector3 = start.cross(end).normalized() + var offset:Vector3 = start - center + var angle:float = offset.angle_to(end - center) + + for i in range(1, cap_resolution): + vertex_array[i] = center + offset.rotated(axis, lerp(0.0, angle, float(i) / cap_resolution)); + + for i in range(1, cap_resolution + 1): + surface.set_uv(Vector2(0, (i - 1) / cap_resolution)) + surface.add_vertex(vertex_array[i - 1]); + surface.set_uv(Vector2(0, (i - 1) / cap_resolution)) + surface.add_vertex(vertex_array[i]); + surface.set_uv(Vector2(0.5, 0.5)) + surface.add_vertex(center); + diff --git a/src/addons/LineRenderer/plugin.cfg b/src/addons/LineRenderer/plugin.cfg new file mode 100644 index 00000000..14efb9b6 --- /dev/null +++ b/src/addons/LineRenderer/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="LineRenderer" +description="A simple line renderer for Godot 4.0, useful for rendering cylindrical volume such as lasers, trails, etc. Based on the Godot 3.0 version by @dbp8890 at https://github.com/dbp8890/line-renderer ported by @LemiSt24, which is based on the helpful C# implementation by @paulohyy at https://github.com/paulohyy/linerenderer and added some additional features such as UV tiling." +author="betalars" +version="1.0" +script="line_plugin.gd" diff --git a/src/base-environments/intro/luna_intro.tscn b/src/base-environments/intro/luna_intro.tscn new file mode 100644 index 00000000..99bd80e9 --- /dev/null +++ b/src/base-environments/intro/luna_intro.tscn @@ -0,0 +1,5 @@ +[gd_scene load_steps=2 format=3 uid="uid://dt7mtqo43aomc"] + +[ext_resource type="PackedScene" uid="uid://t6opo6kuctpa" path="res://logic-scenes/luna/Luna_frame-of-mind.glb" id="1_gj414"] + +[node name="Luna_frame-of-mind" instance=ExtResource("1_gj414")] diff --git a/src/base-environments/intro_scene/shaders/stars.gdshader b/src/base-environments/intro_scene/shaders/stars.gdshader new file mode 100644 index 00000000..d2b3a336 --- /dev/null +++ b/src/base-environments/intro_scene/shaders/stars.gdshader @@ -0,0 +1,53 @@ +shader_type sky; + +uniform float star_size: hint_range(50.0, 500.0) = 120.0; + +uniform sampler2D star_colors: hint_default_white; +uniform sampler2D sky_gradient: hint_default_black, repeat_disable; +uniform sampler2D nebula_gradient: hint_default_black, repeat_disable; +uniform float nebula_offset; +uniform sampler2D universe_background: hint_default_black; + +// https://github.com/Norrox/GodotShaders/blob/master/Shaders/Voronoi-Worley/Voronoi.shader +vec3 RNGV3(vec3 p) { + vec3 a = fract(vec3(p.x, p.y, p.z) * vec3(111.11,333.33,444.44)); + a += dot(a, a+33.51); + return fract(vec3(a.x*a.y, a.y*a.z, a.z*a.x)); //outputs a random vec2 between 0 and 1 +} + +vec4 voronoy(vec3 loc, float scale){ + loc = loc*scale; + vec4 output = vec4(0., 0., 0., 10.); + for(float y=-1.; y<=1.; y++){ + for(float x=-1.; x<=1.; x++){ + for(float z=-1.; z<=1.; z++){ + vec3 offs = vec3(x,y,z); + vec3 n = RNGV3(floor(loc)+offs)*2.0-1.0; + vec3 p = offs+sin(n) * .5; + float d = length((fract(loc)-0.5)-p); + if(d bool: # Mark area that was hovered over as currently selected func handle_hover(to_handle: Area2D): + if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT): return currently_active_node = to_handle if is_in_dropzone(to_handle) or to_handle is Card: @@ -247,6 +255,8 @@ func insert_area(parent: Control, node: Area2D): if not node in parent.get_children(): node.reparent(parent) + if node is StickyNote: + node.on_board = true node.owner = self if children.size() > 0: @@ -303,6 +313,7 @@ func _input(event): card.attach_sticky_note(sticky_note_container.get_child(current_sticky_note_id).attached_sticky_note) current_context = NAVIGATE focus_stickies = false + if is_board_complete(): emit_signal("board_completed") else: if !focus_stickies and card.has_sticky_note_attached(): currently_active_node = card.remove_sticky_note() diff --git a/src/logic-scenes/board/card.gd b/src/logic-scenes/board/card.gd index 02bad897..79558b42 100644 --- a/src/logic-scenes/board/card.gd +++ b/src/logic-scenes/board/card.gd @@ -11,12 +11,23 @@ var noise: Noise = FastNoiseLite.new() var wiggle_tween var scale_tween +var transfor_arr: Array[Transform2D] = [ + Transform2D(0.9, Vector2(-125, -83)), + Transform2D(-0.3, Vector2(-126, -75)), + Transform2D(-0.3, Vector2(-126, -74)), + Transform2D(-0.3, Vector2(-126, -73)), + Transform2D(0.5, Vector2(-126, -77)) +] + @export var text: String = "" : set(value): text = value if get_children() != [] or Engine.is_editor_hint(): $Label.text = value + var curr_frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation) $BackgroundSprite.frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation) + $Label.rotation = deg_to_rad(transfor_arr[curr_frame].get_rotation()) + $Label.position = transfor_arr[curr_frame].origin if !Engine.is_editor_hint(): wiggle_pos = float(text.hash() % 100) _handle_wiggle(0) @@ -82,6 +93,9 @@ func _ready(): $BackgroundSprite.frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation) $Label.text = self.text + $Label.theme = State.current_main_theme + State.theme_changed.connect(func change_theme(new_theme): $Label.theme = new_theme) + wiggle_pos = float(text.hash() % 100) if not Engine.is_editor_hint(): _handle_wiggle(0) @@ -128,7 +142,7 @@ func _on_mouse_entered(): if not Input.is_action_pressed("mouse_left"): # Do nothing if mouse hovers over sticky_note if has_sticky_note_attached(): - if sticky_note_anchor.get_child(-1).highlighted: + if get_child(-1).highlighted: return highlighted = true if "handle_hover" in owner: @@ -155,7 +169,7 @@ func _move_card(): position += (get_viewport().get_mouse_position() - position) - mouse_offset func has_sticky_note_attached() -> bool: - return get_child(-1) is Card + return get_child(-1) is StickyNote func preview_sticky_note(sticky_note: StickyNote): sticky_note.reparent(self.get_parent()) diff --git a/src/logic-scenes/board/card.tscn b/src/logic-scenes/board/card.tscn index 0add60e3..a4a30dab 100644 --- a/src/logic-scenes/board/card.tscn +++ b/src/logic-scenes/board/card.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=11 format=3 uid="uid://dy5rd437h5hsw"] +[gd_scene load_steps=10 format=3 uid="uid://dy5rd437h5hsw"] [ext_resource type="Script" path="res://logic-scenes/board/card.gd" id="1_emip0"] [ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="2_ioijn"] -[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_rktsa"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_foovg"] radius = 110.0 @@ -72,13 +71,13 @@ anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -127.0 -offset_top = -82.5 -offset_right = 127.0 -offset_bottom = 82.5 +offset_left = -126.0 +offset_top = -77.0 +offset_right = 128.0 +offset_bottom = 88.0 grow_horizontal = 2 grow_vertical = 2 -theme = ExtResource("3_rktsa") +rotation = 0.00872665 theme_type_variation = &"card_text" autowrap_mode = 3 diff --git a/src/logic-scenes/board/physics-board.tscn b/src/logic-scenes/board/physics-board.tscn index 7dd95c70..7aa85174 100644 --- a/src/logic-scenes/board/physics-board.tscn +++ b/src/logic-scenes/board/physics-board.tscn @@ -28,7 +28,7 @@ grow_horizontal = 2 grow_vertical = 2 size_flags_horizontal = 6 size_flags_vertical = 6 -mouse_filter = 1 +mouse_filter = 2 script = ExtResource("3_8v4c4") [node name="HBoxContainer" type="HBoxContainer" parent="."] diff --git a/src/logic-scenes/board/sticky-note.gd b/src/logic-scenes/board/sticky-note.gd index 064d1f70..23d8e980 100644 --- a/src/logic-scenes/board/sticky-note.gd +++ b/src/logic-scenes/board/sticky-note.gd @@ -64,6 +64,8 @@ func _ready() -> void: $Content/Label.text = self.text $Content/BackgroundSprite.frame = text.hash() % $Content/BackgroundSprite.sprite_frames.get_frame_count($Content/BackgroundSprite.animation) + $Content/Label.theme = State.current_main_theme + State.theme_changed.connect(func change_theme(new_theme): $Content/Label.theme = new_theme) func replace_with(sticky_note: StickyNote): self.text = sticky_note.text @@ -130,3 +132,6 @@ func tween_transform_to(target: Transform2D): func reset_drag(): if attached_to != null: attached_to.reclaim_sticky_note() + +func _enter_tree(): + print("enter_tree") diff --git a/src/logic-scenes/board/sticky-note.tscn b/src/logic-scenes/board/sticky-note.tscn index 72d571cf..abdc5936 100644 --- a/src/logic-scenes/board/sticky-note.tscn +++ b/src/logic-scenes/board/sticky-note.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=18 format=3 uid="uid://vkcdj8c3ytbq"] +[gd_scene load_steps=17 format=3 uid="uid://vkcdj8c3ytbq"] [ext_resource type="Script" path="res://logic-scenes/board/sticky-note.gd" id="1_yvh5n"] [ext_resource type="Texture2D" uid="uid://c8ckkjmdegyis" path="res://logic-scenes/board/card-textures/postitsheet.png" id="2_j17jn"] -[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_hu2as"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_ml4q7"] radius = 48.0 @@ -130,7 +129,6 @@ offset_right = 239.0 offset_bottom = 47.0 grow_horizontal = 2 grow_vertical = 2 -theme = ExtResource("3_hu2as") theme_type_variation = &"card_text" vertical_alignment = 1 autowrap_mode = 3 diff --git a/src/logic-scenes/board/void_card.tscn b/src/logic-scenes/board/void_card.tscn index e06fbc16..fd228b1b 100644 --- a/src/logic-scenes/board/void_card.tscn +++ b/src/logic-scenes/board/void_card.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://logic-scenes/board/card.gd" id="1_6ceun"] [ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="2_buevv"] [ext_resource type="Texture2D" uid="uid://kpmk21d8rlso" path="res://logic-scenes/board/particle_textures/star.png" id="3_8wu8j"] -[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_mi4ah"] +[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/easy-handwriting.theme" id="3_mi4ah"] [ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="4_jam8u"] [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_foovg"] diff --git a/src/logic-scenes/card_picker/card_picker.gd b/src/logic-scenes/card_picker/card_picker.gd index 21240b27..5a54eff2 100644 --- a/src/logic-scenes/card_picker/card_picker.gd +++ b/src/logic-scenes/card_picker/card_picker.gd @@ -19,9 +19,9 @@ var has_stage = false: if focus: process_mode = Node.PROCESS_MODE_INHERIT self.show() - self.mouse_filter = Control.MOUSE_FILTER_IGNORE + self.mouse_filter = Control.MOUSE_FILTER_PASS else: - self.mouse_filter = Control.MOUSE_FILTER_STOP + self.mouse_filter = Control.MOUSE_FILTER_IGNORE self.hide() process_mode = Node.PROCESS_MODE_DISABLED has_stage = focus @@ -38,7 +38,7 @@ var selection_state = INI: elif state == DONE: reset() -var anim_players:Array = [] +var anim_players:Array[AnimationPlayer] = [] var curr_selection_id: int = -1: set(new_id): if selection_state == CARDS or selection_state == POSTS: @@ -107,13 +107,25 @@ func _input(event): fill_card_slots(3) selection_state = CARDS - if has_stage and not _input_locked: - if event.is_action_pressed("ui_up") or event.is_action_pressed("ui_left") or event.is_action_pressed("ui_focus_next"): - curr_selection_id -= 1 - elif event.is_action_pressed("ui_down") or event.is_action_pressed("ui_right") or event.is_action_pressed("ui_focus_prev"): - curr_selection_id += 1 - if event.is_action_pressed("ui_accept"): - pick(curr_selection_id) + if has_stage: + if !_input_locked: + if event.is_action_pressed("ui_up") or event.is_action_pressed("ui_left") or event.is_action_pressed("ui_focus_next"): + curr_selection_id -= 1 + elif event.is_action_pressed("ui_down") or event.is_action_pressed("ui_right") or event.is_action_pressed("ui_focus_prev"): + curr_selection_id += 1 + if event.is_action_pressed("ui_accept"): + pick(curr_selection_id) + elif event.is_action_pressed("skip"): + ##fixme: using skip causes a lot of invalid state + return + if selection_state == CARDS_SELECTED: + transition() + show_posts() + elif selection_state == POSTS_SELECTED: + transition() + elif selection_state == TRANSITION: + show_posts() + func pick(id: int): print("PICK") @@ -150,9 +162,9 @@ func pick(id: int): print("Winning ID ", id) elif options[0].text == "": - winning_id = 0 - else: winning_id = 1 + else: + winning_id = 0 output.append(options.pop_at(winning_id)) anim_players.pop_at(winning_id).play("shuffle") @@ -161,7 +173,9 @@ func pick(id: int): anim.play("unshuffle") await yield_to + transition() +func transition(): if selection_state == CARDS_SELECTED: selection_state = TRANSITION options = [] @@ -175,7 +189,7 @@ func pick(id: int): fill_post_slots() await anim_players[0].animation_finished - selection_state = POSTS + show_posts() elif selection_state == POSTS_SELECTED: var out_str:Array[String] = [] for card in output: @@ -185,6 +199,12 @@ func pick(id: int): selection_state = DONE State.leave_stage(self) +func show_posts(): + selection_state = POSTS + for player:AnimationPlayer in anim_players: + player.play("reset") + + func handle_hover(new_highlight): if not _input_locked: curr_selection_id = options.find(new_highlight) @@ -199,7 +219,7 @@ func scene_finished(id: int, repeat): if not repeat: Input.mouse_mode = Input.MOUSE_MODE_VISIBLE fill_card_slots(id) - State.transition_stage_to(self) + State.transition_stage_to(self, true) selection_state = CARDS func play_scene(_id, _repeat): diff --git a/src/logic-scenes/card_picker/card_picker.tscn b/src/logic-scenes/card_picker/card_picker.tscn index 49f2ea7e..264f7f37 100644 --- a/src/logic-scenes/card_picker/card_picker.tscn +++ b/src/logic-scenes/card_picker/card_picker.tscn @@ -1493,6 +1493,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 0 script = ExtResource("1_pjntm") [node name="Control" type="Control" parent="."] diff --git a/src/logic-scenes/collectable/collectable_ui.gd b/src/logic-scenes/collectable/collectable_ui.gd index a7d3ea71..3448d031 100644 --- a/src/logic-scenes/collectable/collectable_ui.gd +++ b/src/logic-scenes/collectable/collectable_ui.gd @@ -104,10 +104,9 @@ func _show_buttons(): func hide(): if visible: - _hide_buttons() var tween = create_tween() tween.tween_property(self, "modulate", Color(0, 0, 0), 0.4) - _hide_buttons() + if not collapsed: _hide_buttons() await tween.finished visible = false if has_stage: State.leave_stage(self) diff --git a/src/logic-scenes/collectable/collectable_ui.tscn b/src/logic-scenes/collectable/collectable_ui.tscn index 69029f10..2aea2f3f 100644 --- a/src/logic-scenes/collectable/collectable_ui.tscn +++ b/src/logic-scenes/collectable/collectable_ui.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=9 format=3 uid="uid://d3pb25xuef2t2"] -[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="1_2apkb"] +[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/easy-handwriting.theme" id="1_2apkb"] [ext_resource type="Script" path="res://logic-scenes/collectable/collectable_ui.gd" id="1_tgjc2"] [ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="3_63j61"] @@ -27,12 +27,14 @@ func show(): if visible == false and not State.reduce_motion: var tmp = text var tween:Tween = create_tween() - tween.tween_property(self, \"custom_minimum_size\", get_minimum_size(), 0.2) - text = \"\" - update_minimum_size() - visible = true - await tween.finished - text = tmp + if is_instance_valid(tween): + tween.tween_property(self, \"custom_minimum_size\", get_minimum_size(), 0.2) + text = \"\" + update_minimum_size() + visible = true + await tween.finished + text = tmp + else: visible = true @@ -102,6 +104,7 @@ script = ExtResource("1_tgjc2") scene = null [node name="Panel" type="PanelContainer" parent="."] +clip_children = 2 layout_mode = 2 [node name="Content" type="VBoxContainer" parent="Panel"] @@ -126,6 +129,7 @@ horizontal_scroll_mode = 0 vertical_scroll_mode = 3 [node name="VBoxContainer" type="VBoxContainer" parent="Panel/Content/Buttons"] +custom_minimum_size = Vector2(350, 0) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -156,18 +160,27 @@ layout_mode = 2 text = "put back" script = SubResource("GDScript_g0qhf") -[node name="StartFrame" type="TextureRect" parent="Panel"] +[node name="Control" type="Control" parent="Panel"] layout_mode = 2 +size_flags_horizontal = 8 +size_flags_vertical = 0 + +[node name="StartFrame" type="TextureRect" parent="Panel/Control"] +layout_mode = 2 +offset_left = -330.0 +offset_top = -8.0 +offset_right = 7.0 +offset_bottom = 284.0 mouse_filter = 2 texture = ExtResource("3_63j61") expand_mode = 2 stretch_mode = 4 [node name="AnimationPlayer" type="AnimationPlayer" parent="."] -autoplay = "invisible" libraries = { "": SubResource("AnimationLibrary_jad23") } +autoplay = "invisible" [connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_yoink_focus"] [connection signal="pressed" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_on_pick_button_pressed"] diff --git a/src/logic-scenes/main menu/Main Menu.gd b/src/logic-scenes/main menu/Main Menu.gd index 6b9e1291..e57b406f 100644 --- a/src/logic-scenes/main menu/Main Menu.gd +++ b/src/logic-scenes/main menu/Main Menu.gd @@ -7,3 +7,7 @@ extends Panel else: has_stage = false State.drop_own_focus(self) + +func _ready(): + theme = State.current_main_theme + State.theme_changed.connect(func change_theme(new_theme): theme = new_theme) diff --git a/src/logic-scenes/player_controller/player_controller.gd b/src/logic-scenes/player_controller/player_controller.gd index 29ce7b38..231e21b7 100644 --- a/src/logic-scenes/player_controller/player_controller.gd +++ b/src/logic-scenes/player_controller/player_controller.gd @@ -1,9 +1,9 @@ extends RigidBody3D var has_stage: bool = false: - set(focused): - if has_stage != focused: - if focused: + set(on_stage): + if has_stage != on_stage: + if on_stage: has_stage = true if is_inside_tree(): camera.make_current() @@ -11,7 +11,7 @@ var has_stage: bool = false: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED var jitter_tween: Tween = create_tween() jitter_tween.tween_property(self, "jitter_strength", 1, 1) - if has_entered: emit_signal("ui_entered") + if has_entered: emit_signal("ui_exited") elif has_stage: camera.current = true jitter_strength = 1 @@ -58,6 +58,16 @@ var on_crouch_cooldown:bool = false @onready var camera:Camera3D = $Yaw/Pitch/Mount/Camera3D @onready var focus_ray: RayCast3D = $Yaw/Pitch/Mount/Camera3D/RayCast3D +var zoomed: + set(zoom): + if zoomed != zoom: + if zoom: + var zoom_tween = create_tween() + zoom_tween.tween_property(camera, "fov", camera.fov*0.5, 0.5) + else: + var zoom_tween = create_tween() + zoom_tween.tween_property(camera, "fov", camera.fov*2, 0.5) + zoomed = zoom signal ui_entered var has_entered:bool = false signal ui_exited @@ -72,23 +82,29 @@ func _on_ini_room(): func _process(_delta): - if focus_ray.get_collider() != null: + if focus_ray.get_collider() != null and not has_entered: emit_signal("ui_entered") has_entered = true focus_ray.get_collider().reveal() - if has_entered and has_stage: - if focus_ray.get_collider() == null: - emit_signal("ui_exited") - has_entered = false - if Input.is_action_just_pressed("ui_accept"): - State.pass_stage_to(focus_ray.get_collider()) + if has_stage: + if has_entered: + if focus_ray.get_collider() == null: + emit_signal("ui_exited") + has_entered = false + if Input.is_action_just_pressed("ui_accept"): + State.pass_stage_to(focus_ray.get_collider()) + else: + if Input.is_action_just_pressed("zoom_in_controller"): + zoomed = true + elif Input.is_action_just_released("zoom_in_controller"): + zoomed = false func _physics_process(delta:float): if has_stage: _handle_movement(delta) _handle_rotation(delta) - if jitter_strength > 0: _handle_jitter(delta) + if jitter_strength > 0 and not State.reduce_motion: _handle_jitter(delta) func _handle_movement(delta:float): var input:Vector2 = Vector2(Input.get_action_strength("player_right") - Input.get_action_strength("player_left"), @@ -138,7 +154,7 @@ func _handle_jitter(delta): noise.get_noise_1d(loc_noise_spot.z) ) * location_jitter * jitter_strength - mount.rotation = Vector3( + if not State.reduce_motion: mount.rotation = Vector3( noise.get_noise_1d(rot_noise_spot.x), noise.get_noise_1d(rot_noise_spot.y), noise.get_noise_1d(rot_noise_spot.z) @@ -155,7 +171,12 @@ func _input(event:InputEvent): _handle_mouse_input(event) get_viewport().set_input_as_handled() if event is InputEventMouseButton and event.pressed: - State.free_focus() + if Input.is_action_just_pressed("zoom_in_mouse"): + zoomed = true + elif Input.is_action_just_pressed("zoom_out_mouse"): + zoomed = false + else: + State.free_focus() get_tree().call_group("interactables", "reveal") #if event.is_action_pressed("ui_accept"): # State.pass_stage_to(focus_ray.get_collider()) diff --git a/src/logic-scenes/startup/button.png b/src/logic-scenes/startup/button.png new file mode 100644 index 00000000..7259b980 --- /dev/null +++ b/src/logic-scenes/startup/button.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c6383038b8092e4c9e8750ff5813830806c76ef86e76290529a6bd17e1de007 +size 13618 diff --git a/src/logic-scenes/startup/button.png.import b/src/logic-scenes/startup/button.png.import new file mode 100644 index 00000000..e0fb4e4d --- /dev/null +++ b/src/logic-scenes/startup/button.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://tk1pmkkdlqt4" +path="res://.godot/imported/button.png-cf3e6ad74faff02c58cd66a11208a29e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://logic-scenes/startup/button.png" +dest_files=["res://.godot/imported/button.png-cf3e6ad74faff02c58cd66a11208a29e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/logic-scenes/startup/button_disabled.png b/src/logic-scenes/startup/button_disabled.png new file mode 100644 index 00000000..cef9bd40 --- /dev/null +++ b/src/logic-scenes/startup/button_disabled.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fab0b4223bd8fbda05c70e7d93c417dee5153e94000d710359790dc71d1499a +size 22239 diff --git a/src/logic-scenes/startup/button_disabled.png.import b/src/logic-scenes/startup/button_disabled.png.import new file mode 100644 index 00000000..48f40502 --- /dev/null +++ b/src/logic-scenes/startup/button_disabled.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blutibrfidlxu" +path="res://.godot/imported/button_disabled.png-922791abd250dbdef92effaf4a291de5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://logic-scenes/startup/button_disabled.png" +dest_files=["res://.godot/imported/button_disabled.png-922791abd250dbdef92effaf4a291de5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/logic-scenes/startup/button_hover.png b/src/logic-scenes/startup/button_hover.png new file mode 100644 index 00000000..e2182281 --- /dev/null +++ b/src/logic-scenes/startup/button_hover.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d71b1634dd0a2bf83f7ede3f112ef6394a8f20b45d2fdfe6580404b147506ea +size 19536 diff --git a/src/logic-scenes/startup/button_hover.png.import b/src/logic-scenes/startup/button_hover.png.import new file mode 100644 index 00000000..d2137ffb --- /dev/null +++ b/src/logic-scenes/startup/button_hover.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://p2q0o6fuiags" +path="res://.godot/imported/button_hover.png-ac4ee99f3a0cb2db921526b95ca05a34.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://logic-scenes/startup/button_hover.png" +dest_files=["res://.godot/imported/button_hover.png-ac4ee99f3a0cb2db921526b95ca05a34.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/logic-scenes/startup/button_pressed.png b/src/logic-scenes/startup/button_pressed.png new file mode 100644 index 00000000..dcf83e1c --- /dev/null +++ b/src/logic-scenes/startup/button_pressed.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54f7d1f4c2bebcc0df5cbe47125dbae6010707c75a592d5a0112ec4100aa4fc1 +size 21073 diff --git a/src/logic-scenes/startup/button_pressed.png.import b/src/logic-scenes/startup/button_pressed.png.import new file mode 100644 index 00000000..7ee024fb --- /dev/null +++ b/src/logic-scenes/startup/button_pressed.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7g31dkdlxlra" +path="res://.godot/imported/button_pressed.png-d34e5d86349de8b5b4041e91e3cdcb65.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://logic-scenes/startup/button_pressed.png" +dest_files=["res://.godot/imported/button_pressed.png-d34e5d86349de8b5b4041e91e3cdcb65.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/logic-scenes/startup/start_frame.png b/src/logic-scenes/startup/start_frame.png new file mode 100644 index 00000000..61ca2ec4 --- /dev/null +++ b/src/logic-scenes/startup/start_frame.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f1ccc37c177f9362c2bcf25ecfba550aa83f77b92c1e7a0a9585138f31e33fb +size 9335 diff --git a/src/logic-scenes/startup/start_frame.png.import b/src/logic-scenes/startup/start_frame.png.import new file mode 100644 index 00000000..e8ba3c21 --- /dev/null +++ b/src/logic-scenes/startup/start_frame.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://y6yghnywp3ek" +path="res://.godot/imported/start_frame.png-e3da868bb60eabb343abc46b5c0d68c9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://logic-scenes/startup/start_frame.png" +dest_files=["res://.godot/imported/start_frame.png-e3da868bb60eabb343abc46b5c0d68c9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/src/logic-scenes/startup/startup.tscn b/src/logic-scenes/startup/startup.tscn index 60263b46..13d57c3f 100644 --- a/src/logic-scenes/startup/startup.tscn +++ b/src/logic-scenes/startup/startup.tscn @@ -1,34 +1,42 @@ -[gd_scene load_steps=10 format=3 uid="uid://gldtxysavetf"] +[gd_scene load_steps=11 format=3 uid="uid://gldtxysavetf"] [ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_8giso"] -[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="1_b01tw"] +[ext_resource type="Theme" uid="uid://dla4kae5kbwdh" path="res://logic-scenes/themes/system.theme" id="1_ot7jp"] [ext_resource type="Script" path="res://logic-scenes/startup/volume_sliders.gd" id="3_q2gbh"] [ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_s5ssh"] +[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="5_7c77g"] [sub_resource type="GDScript" id="GDScript_a78qq"] script/source = "extends Panel @onready var show_navigation_buttons = $\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui\" +func _ready(): + theme = State.current_main_theme + State.theme_changed.connect(func change_theme(new_theme): theme = new_theme) + func starting(): $\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next\".grab_focus() +func _on_reduce_motion_toggled(toggled_on): + State.reduce_motion = toggled_on + # toggle for disable rendering -func _on_disable_rendering_toggled(button_pressed): - State.disable_rendering = button_pressed +func _on_disable_rendering_toggled(toggled_on): + State.disable_rendering = toggled_on # toggle for simplified controls -func _on_simplified_controls_toggled(button_pressed): - State.simplified_navigation = button_pressed # this is how you reach the global state - show_navigation_buttons.disabled = not button_pressed # if simpl. controls was toggled - disabled = false +func _on_simplified_controls_toggled(toggled_on): + State.simplified_navigation = toggled_on # this is how you reach the global state + show_navigation_buttons.disabled = not toggled_on # if simpl. controls was toggled - disabled = false # toggle for show nav buttons -func _on_show_nav_ui_toggled(button_pressed): - State.show_navigation_buttons = button_pressed +func _on_show_nav_ui_toggled(toggled_on): + State.show_navigation_buttons = toggled_on # toggle streaming notes -func _on_streaming_notes_toggled(button_pressed): - State.streaming_content_notes = button_pressed +func _on_streaming_notes_toggled(toggled_on): + State.streaming_content_notes = toggled_on # select font @@ -36,23 +44,22 @@ func _on_streaming_notes_toggled(button_pressed): func _on_font_style_selected(index): match index: 0: - print_debug(\"messy handwriting selected\") - #self.theme.set_font(\"NanumBrushScript.ttf\") return 1: + State.current_main_theme = preload(\"res://logic-scenes/themes/easy-handwriting.theme\") print_debug(\"easy handwriting selected\") #owner.theme.set_font(\"NanumPenScript.ttf\") return 2: - print_debug(\"legible serif selected\") + State.current_main_theme = preload(\"res://logic-scenes/themes/serif.theme\") #owner.theme.set_font(\"Eczar-VariableFont_wght.ttf\") return 3: - print_debug(\"hyperlegible sans selected\") + State.current_main_theme = preload(\"res://logic-scenes/themes/hyperlegible.theme\") #owner.theme.set_font(\"AtkinsonHyperlegible.ttf\") return 4: - print_debug(\"system front selected\") + State.current_main_theme = preload(\"res://logic-scenes/themes/system.theme\") #owner.theme.set_font(SystemFont.fallbacks[0]) return @@ -82,11 +89,11 @@ func _on_mute_sfx_toggled(button_pressed): func _on_music_volume_changed(value): - AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"music\"), linear_to_db(value)) + AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"music\"), linear_to_db(value/2)) func _on_sfx_volume_changed(value): - AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"sfx\"), linear_to_db(value)) + AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"sfx\"), linear_to_db(value/2)) func _on_text_volume_changed(value): @@ -119,6 +126,9 @@ func hide(): self_tween.tween_property(self, \"modulate\", Color(1, 1, 1, 0), .5) await self_tween.finished self.visible = false + + + " [sub_resource type="GDScript" id="GDScript_ia432"] @@ -207,7 +217,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -theme = ExtResource("1_b01tw") +theme = ExtResource("1_ot7jp") script = SubResource("GDScript_a78qq") [node name="Label" type="Label" parent="."] @@ -267,21 +277,25 @@ text = "physical Accessibility" [node name="Label4" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"] layout_mode = 2 -text = "sorry none of these work yet :c" +text = "Greyed-out items do not work yet." [node name="Container2" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"] layout_mode = 2 +[node name="reduce motion" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"] +layout_mode = 2 +text = "reduce motion" + [node name="Screenreader" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"] layout_mode = 2 disabled = true -text = "activate Screenreader" +text = "use Screenreader" script = SubResource("GDScript_v567h") [node name="margin2" type="MarginContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"] layout_mode = 2 -[node name="show nav buttons" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2"] +[node name="disable rendering" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2"] layout_mode = 2 disabled = true text = "disable rendering" @@ -311,17 +325,17 @@ text = "Font-Style:" custom_minimum_size = Vector2(30, 60) layout_mode = 2 -[node name="ItemList" type="OptionButton" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"] +[node name="font settings" type="OptionButton" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"] layout_mode = 2 size_flags_vertical = 4 -disabled = true item_count = 5 selected = 1 popup/item_0/text = "messy handwriting" popup/item_0/id = 0 +popup/item_0/disabled = true popup/item_1/text = "easy handwriting" popup/item_1/id = 1 -popup/item_2/text = "legible serif" +popup/item_2/text = "serif" popup/item_2/id = 2 popup/item_3/text = "hyperlegible sans" popup/item_3/id = 3 @@ -360,6 +374,10 @@ layout_mode = 2 [node name="HSlider" type="HSlider" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"] custom_minimum_size = Vector2(0, 60) layout_mode = 2 +min_value = 0.5 +max_value = 3.0 +step = 0.0 +value = 1.0 editable = false [node name="navbuttons" type="VSplitContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"] @@ -607,7 +625,7 @@ text = "allow me to skip scenes" [node name="provide_summary" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"] layout_mode = 2 disabled = true -text = "Provide me with an optional neutral summary when skipping a scene." +text = "When skipping a scene, give me a neutral summary." [node name="navbuttons" type="VSplitContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes"] layout_mode = 2 @@ -694,11 +712,16 @@ grow_horizontal = 2 grow_vertical = 2 text = "I stream this game, please show content notes." +[node name="card" parent="." instance=ExtResource("5_7c77g")] +position = Vector2(1491, 598) +text = "I never put in much effort for Homework" + +[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/reduce motion" to="." method="_on_reduce_motion_toggled"] [connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/Screenreader" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="_on_screenreader_toggled"] -[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2/show nav buttons" to="." method="_on_disable_rendering_toggled"] +[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2/disable rendering" to="." method="_on_disable_rendering_toggled"] [connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/simplified controls" to="." method="_on_simplified_controls_toggled"] [connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui" to="." method="_on_show_nav_ui_toggled"] -[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/ItemList" to="." method="_on_font_style_selected"] +[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/font settings" to="." method="_on_font_style_selected"] [connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/ItemList2" to="." method="_on_subtitle_option_selected"] [connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"] [connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"] diff --git a/src/logic-scenes/themes/easy-handwriting.theme b/src/logic-scenes/themes/easy-handwriting.theme new file mode 100644 index 00000000..e91e3855 Binary files /dev/null and b/src/logic-scenes/themes/easy-handwriting.theme differ diff --git a/src/logic-scenes/themes/hyperlegible.theme b/src/logic-scenes/themes/hyperlegible.theme new file mode 100644 index 00000000..2e039c1d Binary files /dev/null and b/src/logic-scenes/themes/hyperlegible.theme differ diff --git a/src/logic-scenes/themes/messy.theme b/src/logic-scenes/themes/messy.theme deleted file mode 100644 index c2deff12..00000000 Binary files a/src/logic-scenes/themes/messy.theme and /dev/null differ diff --git a/src/logic-scenes/themes/serif.theme b/src/logic-scenes/themes/serif.theme new file mode 100644 index 00000000..d173a863 Binary files /dev/null and b/src/logic-scenes/themes/serif.theme differ diff --git a/src/logic-scenes/themes/system.theme b/src/logic-scenes/themes/system.theme new file mode 100644 index 00000000..2fc1f34f Binary files /dev/null and b/src/logic-scenes/themes/system.theme differ diff --git a/src/main.tscn b/src/main.tscn index b547ef25..af14ef88 100644 --- a/src/main.tscn +++ b/src/main.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" path="res://main.gd" id="1_rqkns"] [ext_resource type="PackedScene" uid="uid://gldtxysavetf" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"] [ext_resource type="PackedScene" uid="uid://b3b0gyvklqn50" path="res://base-environments/youth_room/youth_room.tscn" id="2_23ia3"] -[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_8hrj7"] +[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/easy-handwriting.theme" id="3_8hrj7"] [ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="4_kslkj"] [ext_resource type="Script" path="res://logic-scenes/main menu/Main Menu.gd" id="4_vj0j6"] [ext_resource type="PackedScene" uid="uid://6aaxpvoepqrm" path="res://disclaimer.tscn" id="7_t45fc"] diff --git a/src/project.godot b/src/project.godot index 920d7221..bddbbc55 100644 --- a/src/project.godot +++ b/src/project.godot @@ -36,13 +36,17 @@ window/stretch/mode="canvas_items" window/stretch/aspect="expand" mouse_cursor/custom_image="res://import/interface-elements/cursor.png" +[editor_plugins] + +enabled=PackedStringArray("res://addons/LineRenderer/plugin.cfg") + [filesystem] import/blender/enabled=false [gui] -theme/custom="res://logic-scenes/themes/messy.theme" +theme/custom="res://logic-scenes/themes/easy-handwriting.theme" [input] @@ -54,6 +58,12 @@ ui_accept={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null) ] } +ui_cancel={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null) +, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null) +] +} player_right={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null) @@ -114,6 +124,21 @@ skip={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null) ] } +zoom_in_mouse={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +zoom_out_mouse={ +"deadzone": 0.5, +"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null) +] +} +zoom_in_controller={ +"deadzone": 0.5, +"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null) +] +} [layer_names] diff --git a/src/singletons/global_state.gd b/src/singletons/global_state.gd index 9042afb9..36a5fe1c 100644 --- a/src/singletons/global_state.gd +++ b/src/singletons/global_state.gd @@ -13,7 +13,14 @@ var provide_summaries: bool = false # ContentNotes/.../Checkbox2 var allow_skipping: bool = false var stage_list:Array = [] -var lock_focus: bool = false +var focus_locked: bool = false + +signal theme_changed + +var current_main_theme:Theme = preload("res://logic-scenes/themes/easy-handwriting.theme"): + set(theme): + current_main_theme = theme + emit_signal("theme_changed", theme) func _ready(): for child in get_parent().get_children(): @@ -24,7 +31,7 @@ func _ready(): # Intented for use when an actor wants focus for itself, can reclaim focus, thus dropping the stack that focused. func take_stage(actor: Object, reclaim: bool = false) -> bool: - if lock_focus: return false + if focus_locked: return false if reclaim: stage_list.front().has_stage = false if stage_list.has(actor): @@ -41,7 +48,7 @@ func leave_stage(actor:Object, dropObject: bool = false) -> bool: push_error(actor, " wanted to drop focus while tree is paused.") if not dropObject: actor.has_stage = false - lock_focus = false + focus_locked = false stage_list.erase(actor) if stage_list != []: @@ -54,10 +61,10 @@ func leave_stage(actor:Object, dropObject: bool = false) -> bool: func get_current_actor(): return stage_list.front() # Used to put a new target on top of the Focus Stack. -func pass_stage_to(target:Object, force = false) -> bool: +func pass_stage_to(target:Object, force = false, lock_focus = true) -> bool: if "pass_to_actor" in target: pass_stage_to(target.pass_to_actor) - if (lock_focus or get_tree().paused) and not force: + if (focus_locked or get_tree().paused) and not force: push_error(target, " requested focus while it was locked or tree is paused.") elif !is_instance_valid(target): push_error("Focus instance not valid") @@ -78,10 +85,11 @@ func pass_stage_to(target:Object, force = false) -> bool: # Currently focused element loses focus, but remains in stack. func free_focus(): - if lock_focus: return false + if focus_locked: return false if stage_list.size() > 0: stage_list.front().has_stage = false -func transition_stage_to(thief: Object): +func transition_stage_to(thief: Object, lock_focus = false): + focus_locked = lock_focus if stage_list.size() > 0: if stage_list.front().has_stage: stage_list.pop_front().has_stage = false