From 9dfefbc7f822029abbaae93a4ac059e2aaeb7457 Mon Sep 17 00:00:00 2001 From: SP4R0W Date: Thu, 18 Jan 2024 16:01:36 +0100 Subject: [PATCH] Fixed bugs --- main/ShootingGallery.csproj | 8 + main/ShootingGallery.sln | 19 + main/project.godot | 19 +- main/src/Composer/Composer.cs | 318 ++++ main/src/Composer/Composer.gd | 65 - main/src/Composer/ComposerGD.cs | 198 +++ main/src/Composer/ComposerSettings.cs | 27 + main/src/Composer/Loader.cs | 84 ++ main/src/Composer/Scene.cs | 105 ++ main/src/Credits/Credits.gd | 2 +- main/src/DuckGame/Duck/Duck.gd | 4 +- main/src/DuckGame/DuckGame.tscn | 33 +- main/src/DuckGame/Scripts/DuckScript1.gd | 4 +- main/src/Game/GamB218.tmp | 1757 ++++++++++++++++++++++ main/src/Game/Game.gd | 24 +- main/src/Game/Game.tscn | 818 +++++++++- main/src/Game/UI.gd | 15 +- main/src/GameOver/GameOver.gd | 2 +- main/src/Global/Globals.gd | 4 +- main/src/LevelSelect/LevelSelect.gd | 9 +- main/src/Main/Main.gd | 54 +- main/src/Main/Main.tscn | 97 +- main/src/MainMenu/MainMenu.gd | 12 +- main/src/Options/Options.gd | 3 +- main/src/Shop/Shop.gd | 4 +- main/src/Target/Target.gd | 13 +- main/src/TargetGame/Target/target.gd | 4 +- main/src/TargetGame/TargetGame.tscn | 16 +- 28 files changed, 3563 insertions(+), 155 deletions(-) create mode 100644 main/ShootingGallery.csproj create mode 100644 main/ShootingGallery.sln create mode 100644 main/src/Composer/Composer.cs delete mode 100644 main/src/Composer/Composer.gd create mode 100644 main/src/Composer/ComposerGD.cs create mode 100644 main/src/Composer/ComposerSettings.cs create mode 100644 main/src/Composer/Loader.cs create mode 100644 main/src/Composer/Scene.cs create mode 100644 main/src/Game/GamB218.tmp diff --git a/main/ShootingGallery.csproj b/main/ShootingGallery.csproj new file mode 100644 index 0000000..198256e --- /dev/null +++ b/main/ShootingGallery.csproj @@ -0,0 +1,8 @@ + + + net6.0 + net7.0 + net8.0 + true + + \ No newline at end of file diff --git a/main/ShootingGallery.sln b/main/ShootingGallery.sln new file mode 100644 index 0000000..25102f4 --- /dev/null +++ b/main/ShootingGallery.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShootingGallery", "ShootingGallery.csproj", "{CBAC2DA1-37AD-4D33-9024-10E691C21FC6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CBAC2DA1-37AD-4D33-9024-10E691C21FC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBAC2DA1-37AD-4D33-9024-10E691C21FC6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBAC2DA1-37AD-4D33-9024-10E691C21FC6}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {CBAC2DA1-37AD-4D33-9024-10E691C21FC6}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {CBAC2DA1-37AD-4D33-9024-10E691C21FC6}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {CBAC2DA1-37AD-4D33-9024-10E691C21FC6}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/main/project.godot b/main/project.godot index e4fc7d4..57b0621 100644 --- a/main/project.godot +++ b/main/project.godot @@ -11,9 +11,8 @@ config_version=5 [application] config/name="Shooting Gallery" -config/tags=PackedStringArray("desktop", "gdscript") run/main_scene="res://src/Main/Main.tscn" -config/features=PackedStringArray("4.1", "Forward Plus") +config/features=PackedStringArray("4.2", "4.2.1", "C#", "GL Compatibility") boot_splash/show_image=false boot_splash/fullsize=false boot_splash/use_filter=false @@ -23,12 +22,9 @@ config/windows_native_icon="res://icon.ico" [autoload] Globals="*res://src/Global/Globals.gd" -Composer="*res://src/Composer/Composer.gd" SaveData="*res://src/Global/SaveData.gd" - -[debug] - -settings/stdout/verbose_stdout=true +Composer="*res://src/Composer/Composer.cs" +ComposerGD="*res://src/Composer/ComposerGD.cs" [display] @@ -41,6 +37,10 @@ window/size/window_width_override=1280 window/size/window_height_override=720 window/stretch/mode="canvas_items" +[dotnet] + +project/assembly_name="ShootingGallery" + [input] exit={ @@ -48,11 +48,6 @@ exit={ "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":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) ] } -reset={ -"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":82,"key_label":0,"unicode":114,"echo":false,"script":null) -] -} pause={ "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":80,"key_label":0,"unicode":112,"echo":false,"script":null) diff --git a/main/src/Composer/Composer.cs b/main/src/Composer/Composer.cs new file mode 100644 index 0000000..b319a78 --- /dev/null +++ b/main/src/Composer/Composer.cs @@ -0,0 +1,318 @@ +using Godot; +using System; + +namespace ComposerLib +{ + public partial class Composer : Node + { + [Signal] + public delegate void SceneBeganLoadedEventHandler(string sceneName); + + [Signal] + public delegate void SceneLoadedEventHandler(string sceneName); + + [Signal] + public delegate void SceneLoadingProcessUpdatedEventHandler(string sceneName, float progress); + + [Signal] + public delegate void SceneCreatedEventHandler(string sceneName); + + [Signal] + public delegate void SceneEnabledEventHandler(string sceneName); + + [Signal] + public delegate void SceneDisabledEventHandler(string sceneName); + + [Signal] + public delegate void SceneRemovedEventHandler(string sceneName); + + [Signal] + public delegate void SceneDisposedEventHandler(string sceneName); + + + public Godot.Collections.Dictionary Scenes = new(); + internal ComposerGD ComposerGD {get; set;} = null; + private readonly CreateSettings DefaultCreateSettings = new(){SceneParent = ((SceneTree)Engine.GetMainLoop()).Root}; + private readonly Loader Loader = new(); + + public override void _EnterTree() + { + AddChild(Loader,true); + Loader.LoaderStarted += OnSceneBeganLoading; + Loader.LoaderLoadingUpdated += OnLoadingUpdated; + } + + public Scene GetScene(string name) + { + if (!Scenes.TryGetValue(name, out Scene scene)) + { + GD.PrintErr($"GetScene error: Scene {name} doesn't exist in memory."); + return null; + } + + return scene; + } + + public void AddScene(string name, string path, AddSettings settings = null) + { + if (Scenes.ContainsKey(name)) + { + GD.PrintErr($"AddScene error: Scene {name} already exists in memory."); + return; + } + + var scene = new Scene(name, path); + scene.FinishedLoading += OnSceneLoaded; + scene.FinishedCreating += OnSceneCreated; + + if (settings != null) VerifyPreAddSettings(name, settings); + + Scenes.Add(name,scene); + + if (settings != null) VerifyPostAddSettings(name, settings); + } + + public void AddScene(string name, PackedScene resource, AddSettings settings = null, string path = "") + { + if (Scenes.ContainsKey(name)) + { + GD.PrintErr($"AddScene error: Scene {name} already exists in memory."); + return; + } + + var scene = new Scene(name, resource, path); + scene.FinishedLoading += OnSceneLoaded; + scene.FinishedCreating += OnSceneCreated; + + if (settings != null) VerifyPreAddSettings(name, settings); + + Scenes.Add(name,scene); + + if (settings != null) VerifyPostAddSettings(name, settings); + } + + public void AddScene(Scene scene, AddSettings settings = null) + { + if (Scenes.ContainsKey(scene.InternalName)) + { + GD.PrintErr($"AddScene error: Scene {scene.InternalName} already exists in memory."); + return; + } + + scene.FinishedLoading += OnSceneLoaded; + scene.FinishedCreating += OnSceneCreated; + + if (settings != null) VerifyPreAddSettings(scene.InternalName, settings); + + Scenes.Add(scene.InternalName,scene); + + if (settings != null) VerifyPostAddSettings(scene.InternalName, settings); + } + + public async void LoadScene(string name, LoadSettings settings = null) + { + var scene = GetScene(name); + + if (scene == null) + { + GD.PrintErr($"LoadScene error: Scene {name} doesn't exist in memory."); + return; + } + + if (settings != null) VerifyPreLoadSettings(name, settings); + + if (settings != null) + scene.Load(settings.UseSubthreads, settings.CacheMode); + else + scene.Load(); + + await ToSignal(scene,Scene.SignalName.FinishedLoading); + + if (settings != null) VerifyPostLoadSettings(name, settings); + } + + public async void CreateScene(string name, CreateSettings settings = null) + { + settings ??= DefaultCreateSettings; + var scene = GetScene(name); + + if (scene == null) + { + GD.PrintErr($"CreateScene error: Scene {name} doesn't exist in memory."); + return; + } + + if (settings != null) VerifyPreCreateSettings(name, settings); + + scene.Create(settings.SceneParent); + + await ToSignal(scene, Scene.SignalName.FinishedCreating); + + if (settings != null) VerifyPostCreateSettings(name, settings); + } + + public void ReplaceScene(string sceneToRemove, string sceneToAdd, Node parent) + { + RemoveScene(sceneToRemove); + CreateScene(sceneToAdd, new CreateSettings{ + SceneParent = parent + }); + } + + public void ReloadScene(string name) + { + var scene = GetScene(name); + + if (scene.Instance == null) + { + GD.PrintErr($"ReloadScene error: Scene {name} doesn't have an instance."); + return; + } + + var parent = scene.Instance.GetParent(); + RemoveScene(name); + CreateScene(name, new(){ + SceneParent = parent + }); + } + + public void EnableScene(string name) + { + var scene = GetScene(name); + + if (scene == null) + { + GD.PrintErr($"EnableScene error: Scene {name} doesn't exist in memory."); + return; + } + + scene.Enable(); + EmitSignal(SignalName.SceneEnabled, name); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneEnabled, name); + } + + public void DisableScene(string name) + { + var scene = GetScene(name); + + if (scene == null) + { + GD.PrintErr($"EnableScene error: Scene {name} doesn't exist in memory."); + return; + } + + scene.Disable(); + EmitSignal(SignalName.SceneDisabled, name); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneDisabled, name); + } + + public void RemoveScene(string name) + { + var scene = GetScene(name); + + if (scene == null) + { + GD.PrintErr($"RemoveScene error: Scene {name} doesn't exist in memory."); + return; + } + + scene.Remove(); + EmitSignal(SignalName.SceneRemoved, name); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneRemoved, name); + } + + public void DisposeScene(string name) + { + var scene = GetScene(name); + + if (scene == null) + { + GD.PrintErr($"DisposeScene error: Scene {name} doesn't exist in memory."); + return; + } + + scene.FinishedLoading -= OnSceneLoaded; + scene.FinishedCreating -= OnSceneCreated; + scene.Dispose(); + Scenes.Remove(name); + + EmitSignal(SignalName.SceneDisposed, name); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneDisposed, name); + } + + private void VerifyPreAddSettings(string name, AddSettings settings) + { + + } + + private void VerifyPostAddSettings(string name, AddSettings settings) + { + if (settings.InstantLoad) + { + LoadScene(name,new LoadSettings{ + SceneParent = settings.SceneParent, + InstantCreate = settings.InstantCreate + }); + } + } + + private void VerifyPreLoadSettings(string name, LoadSettings settings) + { + + } + + private void VerifyPostLoadSettings(string name, LoadSettings settings) + { + if (settings.SceneParent != null) + { + if (settings.InstantCreate) + { + CreateScene(name,new CreateSettings{ + SceneParent = settings.SceneParent + }); + } + } + } + + private void VerifyPreCreateSettings(string name, CreateSettings settings) + { + if (!IsInstanceValid(settings.SceneParent)) + { + throw new ArgumentException($"Invalid SceneParent argument for CreateScene, scene {name}"); + } + } + + private void VerifyPostCreateSettings(string name, CreateSettings settings) + { + if (settings.DisableProcessing) + { + GetScene(name).Disable(); + } + } + + private void OnSceneCreated(string sceneName) + { + EmitSignal(SignalName.SceneCreated, sceneName); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneCreated, sceneName); + } + + private void OnSceneBeganLoading(Scene scene) + { + EmitSignal(SignalName.SceneBeganLoaded, scene.InternalName); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneBeganLoading, scene.InternalName); + } + + private void OnLoadingUpdated(Scene scene, float progress) + { + EmitSignal(SignalName.SceneLoadingProcessUpdated, scene.InternalName, progress); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneLoadingProcessUpdated, scene.InternalName, progress); + } + + private void OnSceneLoaded(string sceneName) + { + EmitSignal(SignalName.SceneLoaded, sceneName); + ComposerGD?.EmitSignal(ComposerGD.SignalName.SceneLoaded, sceneName); + } + } +} + diff --git a/main/src/Composer/Composer.gd b/main/src/Composer/Composer.gd deleted file mode 100644 index 773f42d..0000000 --- a/main/src/Composer/Composer.gd +++ /dev/null @@ -1,65 +0,0 @@ -extends Node - -@onready var current_scene: Node2D = null -@onready var is_entering_scene: bool = false - -enum ANIMATIONS { - NONE=0, - FADE=1 -} - -func goto_scene(scene: String,args: Dictionary = {}) -> void: - if is_entering_scene: - return - - is_entering_scene = true - call_deferred("deffered_goto_scene",scene,args) - -func deffered_goto_scene(scene: String,args: Dictionary = {}) -> void: - var is_animated: bool = args["is_animated"] if args.has("is_animated") else false - var animation_value: int = args["animation"] if args.has("animation") else 0 - - var control: Control = Globals.root.get_node("CanvasLayer/Control") - control.show() - - if not is_animated: - if current_scene != null: - Globals.root.get_node(NodePath(current_scene.name)).queue_free() - - var new_scene: PackedScene = load(scene) - Globals.root.add_child(new_scene.instantiate()) - - elif is_animated && animation_value == ANIMATIONS.FADE: - var transition_rect: ColorRect = control.get_node("TransitionRect") - transition_rect.show() - transition_rect.color = Color(0,0,0,1) - - if current_scene != null: - var fade_in_tween: Tween = get_tree().create_tween() - var fade_in_duration: float = args["fade_in_duration"] if args.has("fade_in_duration") else 0.5 - - transition_rect.color = Color(0,0,0,0) - - fade_in_tween.tween_property(transition_rect,"color",Color(0,0,0,1),fade_in_duration) - - await fade_in_tween.finished - - fade_in_tween.kill() - Globals.root.get_node(NodePath(current_scene.name)).queue_free() - - var new_scene: PackedScene = load(scene) - Globals.root.add_child(new_scene.instantiate()) - - var fade_out_tween: Tween = get_tree().create_tween() - var fade_out_duration: float = args["fade_out_duration"] if args.has("fade_out_duration") else 0.5 - - fade_out_tween.tween_property(transition_rect,"color",Color(0,0,0,0),fade_out_duration) - - await fade_out_tween.finished - - transition_rect.hide() - - current_scene = Globals.root.get_child(Globals.root.get_child_count() - 1) - - control.hide() - is_entering_scene = false diff --git a/main/src/Composer/ComposerGD.cs b/main/src/Composer/ComposerGD.cs new file mode 100644 index 0000000..05c4f9a --- /dev/null +++ b/main/src/Composer/ComposerGD.cs @@ -0,0 +1,198 @@ +using Godot; +using Godot.Collections; + +namespace ComposerLib +{ + public partial class ComposerGD : Node + { + [Signal] + public delegate void SceneBeganLoadingEventHandler(string sceneName); + + [Signal] + public delegate void SceneLoadingProcessUpdatedEventHandler(string sceneName, float progress); + + [Signal] + public delegate void SceneLoadedEventHandler(string sceneName); + + [Signal] + public delegate void SceneCreatedEventHandler(string sceneName); + + [Signal] + public delegate void SceneEnabledEventHandler(string sceneName); + + [Signal] + public delegate void SceneDisabledEventHandler(string sceneName); + + [Signal] + public delegate void SceneRemovedEventHandler(string sceneName); + + [Signal] + public delegate void SceneDisposedEventHandler(string sceneName); + + + private Composer Composer; + private readonly Array AllowedSettings = new(){ + "SceneParent", + "InstantCreate", + "InstantLoad", + "DisableProcessing", + "UseSubthreads", + "CacheMode", + }; + + public override void _Ready() + { + Composer = GetNode("/root/Composer"); + Composer.ComposerGD = this; + } + + public Scene GetScene(string name) + { + return Composer.GetScene(name); + } + public void AddScene(string name, string path, Dictionary dictSettings = null) + { + AddSettings addSettings = new(); + + if (dictSettings != null) + addSettings = MatchSettings(dictSettings); + + Composer.AddScene(name, path, addSettings); + } + + public void AddScene(string name, PackedScene resource, Dictionary dictSettings = null, string path = "") + { + AddSettings addSettings = new(); + + if (dictSettings != null) + addSettings = MatchSettings(dictSettings); + + Composer.AddScene(name, resource, addSettings, path); + } + + public void AddScene(Scene scene, Dictionary dictSettings = null) + { + AddSettings addSettings = new(); + + if (dictSettings != null) + addSettings = MatchSettings(dictSettings); + + Composer.AddScene(scene, addSettings); + } + + public void LoadScene(string name, Dictionary dictSettings = null) + { + LoadSettings loadSettings = new(); + + if (dictSettings != null) + loadSettings = MatchSettings(dictSettings); + + Composer.LoadScene(name, loadSettings); + } + + public void CreateScene(string name, Dictionary dictSettings = null) + { + CreateSettings createSettings = new(); + + if (dictSettings != null) + createSettings = MatchSettings(dictSettings); + + Composer.CreateScene(name, createSettings); + } + + public void ReplaceScene(string sceneToRemove, string sceneToAdd, Node parent) + { + Composer.ReplaceScene(sceneToRemove, sceneToAdd, parent); + } + + public void ReloadScene(string name) + { + Composer.ReloadScene(name); + } + + public void EnableScene(string name) + { + Composer.EnableScene(name); + } + + public void DisableScene(string name) + { + Composer.DisableScene(name); + } + + public void RemoveScene(string name) + { + Composer.RemoveScene(name); + } + + public void DisposeScene(string name) + { + Composer.DisposeScene(name); + } + + private ComposerSettings MatchSettings(Dictionary dictSettings) + { + var set = CheckKeys(dictSettings); + return set; + } + + private ComposerSettings CheckKeys(Dictionary dictSettings) + { + var settings = new ComposerSettings(); + + foreach (string key in dictSettings.Keys) + { + var cleanedKey = CleanKey(key); + + if (AllowedSettings.Contains(cleanedKey)) + { + MatchKey(cleanedKey, key, dictSettings, ref settings); + } + } + + return settings; + } + + private void MatchKey(string cleanedKey, string key, Dictionary dictSettings, ref ComposerSettings settings) + { + switch(cleanedKey) + { + case "SceneParent": + { + settings.SceneParent = (Node)dictSettings[key]; + break; + } + case "InstantCreate": + { + settings.InstantCreate = (bool)dictSettings[key]; + break; + } + case "InstantLoad": + { + settings.InstantLoad = (bool)dictSettings[key]; + break; + } + case "DisableProcessing": + { + settings.DisableProcessing = (bool)dictSettings[key]; + break; + } + case "UseSubthreads": + { + settings.UseSubthreads = (bool)dictSettings[key]; + break; + } + case "CacheMode": + { + settings.CacheMode = (ResourceLoader.CacheMode)(int)dictSettings[key]; + break; + } + } + } + + private string CleanKey(string key) + { + return key.StripEdges().Capitalize().Replace(" ",""); + } + } +} \ No newline at end of file diff --git a/main/src/Composer/ComposerSettings.cs b/main/src/Composer/ComposerSettings.cs new file mode 100644 index 0000000..8cb6e1d --- /dev/null +++ b/main/src/Composer/ComposerSettings.cs @@ -0,0 +1,27 @@ +using Godot; + +namespace ComposerLib +{ + public partial class CreateSettings : Resource + { + public Node SceneParent {get; set;} = null; + public bool DisableProcessing {get; set;} = false; + } + + public partial class LoadSettings : CreateSettings + { + public bool InstantCreate {get; set;} = false; + public bool UseSubthreads {get; set;} = false; + public ResourceLoader.CacheMode CacheMode {get; set;} = ResourceLoader.CacheMode.Reuse; + } + + public partial class AddSettings : LoadSettings + { + public bool InstantLoad {get; set;} = false; + } + + public partial class ComposerSettings : AddSettings + { + + } +} \ No newline at end of file diff --git a/main/src/Composer/Loader.cs b/main/src/Composer/Loader.cs new file mode 100644 index 0000000..53df999 --- /dev/null +++ b/main/src/Composer/Loader.cs @@ -0,0 +1,84 @@ +using Godot; +using System.Collections.Generic; + +namespace ComposerLib +{ + internal class LoaderScene + { + public Scene Scene {get; set;} + public bool UseSubthreads {get; set;} = false; + public ResourceLoader.CacheMode CacheMode = ResourceLoader.CacheMode.Reuse; + } + + internal partial class Loader : Node + { + [Signal] + internal delegate void LoaderStartedEventHandler(Scene scene); + + [Signal] + internal delegate void LoaderLoadingUpdatedEventHandler(Scene scene, float progress); + + [Signal] + internal delegate void LoaderFinishedEventHandler(Scene scene, PackedScene resource=null); + + private static Queue SceneQueue = new(); + private static LoaderScene CurrentLoadedObject = null; + + internal static void AddToQueue(LoaderScene scene) + { + SceneQueue.Enqueue(scene); + } + + public override void _Process(double delta) + { + base._Process(delta); + + if (CurrentLoadedObject == null) + { + if (SceneQueue.Count > 0) + { + BeginNewLoad(); + } + else return; + } + + Godot.Collections.Array progress = new(); + + switch (ResourceLoader.LoadThreadedGetStatus(CurrentLoadedObject.Scene.Path, progress)) + { + case ResourceLoader.ThreadLoadStatus.InProgress: + { + EmitSignal(SignalName.LoaderLoadingUpdated, (float)progress[0]); + break; + } + case ResourceLoader.ThreadLoadStatus.Loaded: + { + var resource = (PackedScene)ResourceLoader.LoadThreadedGet(CurrentLoadedObject.Scene.Path); + EmitSignal(SignalName.LoaderFinished, CurrentLoadedObject.Scene, resource); + EndLoad(); + break; + } + case ResourceLoader.ThreadLoadStatus.Failed: case ResourceLoader.ThreadLoadStatus.InvalidResource: + { + EmitSignal(SignalName.LoaderFinished, CurrentLoadedObject.Scene); + EndLoad(); + break; + } + } + } + + private void BeginNewLoad() + { + CurrentLoadedObject = SceneQueue.Dequeue(); + LoaderFinished += CurrentLoadedObject.Scene.OnLoaded; + EmitSignal(SignalName.LoaderStarted, CurrentLoadedObject.Scene); + ResourceLoader.LoadThreadedRequest(CurrentLoadedObject.Scene.Path, "PackedScene", CurrentLoadedObject.UseSubthreads, CurrentLoadedObject.CacheMode); + } + + private void EndLoad() + { + LoaderFinished -= CurrentLoadedObject.Scene.OnLoaded; + CurrentLoadedObject = null; + } + } +} \ No newline at end of file diff --git a/main/src/Composer/Scene.cs b/main/src/Composer/Scene.cs new file mode 100644 index 0000000..f6dabe9 --- /dev/null +++ b/main/src/Composer/Scene.cs @@ -0,0 +1,105 @@ +using Godot; + +namespace ComposerLib +{ + public partial class Scene : Resource + { + [Signal] + public delegate void FinishedLoadingEventHandler(string sceneName); + + [Signal] + public delegate void FinishedCreatingEventHandler(string sceneName); + + [Export] + public string InternalName {get; private set;} + [Export] + public string Path {get; set;} + [Export] + public PackedScene Resource {get; set;} = null; + public Node Instance {get; private set;} = null; + + public Scene(string internalName, string path) + { + InternalName = internalName; + Path = path; + } + + public Scene(string internalName, PackedScene resource, string path = "") + { + InternalName = internalName; + Resource = resource; + Path = path; + } + + public void Load(bool UseSubthreads = false, ResourceLoader.CacheMode CacheMode = ResourceLoader.CacheMode.Reuse) + { + if (Resource != null || Path == "") return; + + Loader.AddToQueue(new LoaderScene(){ + Scene = this, + UseSubthreads = UseSubthreads, + CacheMode = CacheMode + }); + } + + public void Create(Node parent) + { + if (Resource == null) + { + GD.PrintErr($"Create error for scene {InternalName}: Resource doesn't exist in memory."); + return; + } + + Instance = Resource.Instantiate(); + parent.AddChild(Instance); + + EmitSignal(SignalName.FinishedCreating, InternalName); + } + + public void Enable() + { + if (Instance == null) + { + GD.PrintErr($"Enable error for scene {InternalName}: No instance exists."); + return; + } + + Instance.ProcessMode = Node.ProcessModeEnum.Inherit; + } + + public void Disable() + { + if (Instance == null) + { + GD.PrintErr($"Disable error for scene {InternalName}: No instance exists."); + return; + } + + Instance.ProcessMode = Node.ProcessModeEnum.Disabled; + } + + public void Remove() + { + Instance?.QueueFree(); + Instance = null; + } + + public new void Dispose() + { + Resource?.Dispose(); + Instance?.QueueFree(); + + Resource = null; + Instance = null; + } + + internal void OnLoaded(Scene scene, PackedScene resource) + { + if (scene.InternalName == InternalName && resource != null) + { + Resource = resource; + EmitSignal(SignalName.FinishedLoading, InternalName); + } + } + } +} \ No newline at end of file diff --git a/main/src/Credits/Credits.gd b/main/src/Credits/Credits.gd index ec6fba6..a774364 100644 --- a/main/src/Credits/Credits.gd +++ b/main/src/Credits/Credits.gd @@ -36,4 +36,4 @@ func _on_back_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/MainMenu/MainMenu.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("Credits","MainMenu") diff --git a/main/src/DuckGame/Duck/Duck.gd b/main/src/DuckGame/Duck/Duck.gd index 76f6341..f9f5d06 100644 --- a/main/src/DuckGame/Duck/Duck.gd +++ b/main/src/DuckGame/Duck/Duck.gd @@ -38,7 +38,7 @@ func enemy_gone(): queue_free() -func kill(): +func kill(quiet_kill: bool = false): if not _is_dead: killed.emit(self) @@ -50,7 +50,7 @@ func kill(): $GoneTimer.stop() speed = 0 - show_score_text() + if !quiet_kill: show_score_text() await duck_animator.animation_finished diff --git a/main/src/DuckGame/DuckGame.tscn b/main/src/DuckGame/DuckGame.tscn index 92f964e..c21aa56 100644 --- a/main/src/DuckGame/DuckGame.tscn +++ b/main/src/DuckGame/DuckGame.tscn @@ -26,21 +26,30 @@ ta_rank_score = { [node name="Track" parent="Music" index="0"] stream = ExtResource("7_d7m80") -[node name="Background" parent="." index="3"] +[node name="Background" parent="." index="4"] speed_water2 = Vector2(1.5, 0) [node name="DuckZone1" type="Node2D" parent="Background" index="2"] [node name="DuckZone2" type="Node2D" parent="Background" index="4"] -[node name="Ready" parent="CanvasLayer/UI" index="0"] -offset_left = 1805.0 -offset_top = 1047.0 -offset_right = 2955.0 -offset_bottom = 1374.0 - -[node name="Go" parent="CanvasLayer/UI" index="1"] -offset_left = 1391.0 -offset_top = 733.0 -offset_right = 1946.0 -offset_bottom = 1061.0 +[node name="BottomUI" parent="CanvasLayer/UI" index="7"] +unique_name_in_owner = true + +[node name="Title" parent="CanvasLayer/UI/BottomUI/Text" index="0"] +unique_name_in_owner = true + +[node name="Time" parent="CanvasLayer/UI/BottomUI/Text" index="1"] +unique_name_in_owner = true + +[node name="Score" parent="CanvasLayer/UI/BottomUI/Text" index="2"] +unique_name_in_owner = true + +[node name="Rank2" parent="CanvasLayer/UI/BottomUI/Text/Rank" index="1"] +unique_name_in_owner = true + +[node name="AmmoCounter" parent="CanvasLayer/UI/BottomUI" index="1"] +unique_name_in_owner = true + +[node name="Help" parent="CanvasLayer/UI" index="11"] +text = "Press 'esc' To leave the game. Press 'p' to pause" diff --git a/main/src/DuckGame/Scripts/DuckScript1.gd b/main/src/DuckGame/Scripts/DuckScript1.gd index 3569db4..e6d9c83 100644 --- a/main/src/DuckGame/Scripts/DuckScript1.gd +++ b/main/src/DuckGame/Scripts/DuckScript1.gd @@ -8,7 +8,9 @@ var duck_spawn_zone_2: Node2D = null func _on_activate(): if not Globals.game: - await get_tree().process_frame + await ComposerGD.SceneCreated + + print(Globals.game) duck_spawn_zone_1 = Globals.game.get_node("Background/DuckZone1") duck_spawn_zone_2 = Globals.game.get_node("Background/DuckZone2") diff --git a/main/src/Game/GamB218.tmp b/main/src/Game/GamB218.tmp new file mode 100644 index 0000000..ec53605 --- /dev/null +++ b/main/src/Game/GamB218.tmp @@ -0,0 +1,1757 @@ +[gd_scene load_steps=56 format=3 uid="uid://cx4yv25d8i687"] + +[ext_resource type="Texture2D" uid="uid://cdv8mxe1tlgrt" path="res://assets/Stall/water1.png" id="1_d4g72"] +[ext_resource type="Script" path="res://src/Game/Game.gd" id="1_km67b"] +[ext_resource type="Script" path="res://src/DuckGame/Duck/Duck.gd" id="2_cna4a"] +[ext_resource type="Texture2D" uid="uid://d3gyjk2q3x5nm" path="res://assets/Stall/curtain.png" id="2_vsk6e"] +[ext_resource type="Texture2D" uid="uid://dx573vccdhs2v" path="res://assets/Objects/stick_metal.png" id="3_3l47x"] +[ext_resource type="Texture2D" uid="uid://dplsxvkppwnls" path="res://assets/Stall/water2.png" id="3_bfewo"] +[ext_resource type="Texture2D" uid="uid://d2a527rqetbnk" path="res://assets/Stall/bg_wood.png" id="3_iupnb"] +[ext_resource type="AudioStream" uid="uid://jdbr2s83jhsu" path="res://assets/Sounds/reload.mp3" id="3_ygdqw"] +[ext_resource type="AudioStream" uid="uid://cartqjnql63db" path="res://assets/Sounds/ready.mp3" id="4_36pdh"] +[ext_resource type="Script" path="res://src/Background/GameBg.gd" id="4_cb74g"] +[ext_resource type="AudioStream" uid="uid://bo3yd6irh38ed" path="res://assets/Sounds/go.mp3" id="4_fgo7o"] +[ext_resource type="Texture2D" uid="uid://d32lgww5uu03h" path="res://assets/Objects/duck_back.png" id="4_q0vde"] +[ext_resource type="Texture2D" uid="uid://cbbojwyr2o8pd" path="res://assets/Objects/duck_brown.png" id="5_h887j"] +[ext_resource type="Texture2D" uid="uid://cmdioh0y71dc0" path="res://assets/Objects/duck_white.png" id="6_5na3p"] +[ext_resource type="Texture2D" uid="uid://dkavn4kowna50" path="res://assets/Stall/cloud1.png" id="6_aqdhe"] +[ext_resource type="Script" path="res://src/Game/UI.gd" id="6_lyed7"] +[ext_resource type="Texture2D" uid="uid://7834f2tredls" path="res://assets/Stall/backgroundEmpty.png" id="6_rh502"] +[ext_resource type="Texture2D" uid="uid://ckoc0hne808bv" path="res://assets/Stall/curtain_straight.png" id="7_0w3jm"] +[ext_resource type="Texture2D" uid="uid://bieqt6dt3lbgr" path="res://assets/Stall/cloud2.png" id="7_7voq1"] +[ext_resource type="Texture2D" uid="uid://dtvqp5aip7n6f" path="res://assets/HUD/text_go.png" id="7_d2c4a"] +[ext_resource type="Texture2D" uid="uid://dnoy7k5ft36ek" path="res://assets/Stall/curtainTop.png" id="7_m5cfk"] +[ext_resource type="Texture2D" uid="uid://cbfxx8n1yjhsr" path="res://assets/Objects/duck_yellow.png" id="7_xek5y"] +[ext_resource type="Script" path="res://src/Target/Target.gd" id="8_l8ovl"] +[ext_resource type="AudioStream" uid="uid://dhrrmgb1nefd" path="res://assets/Sounds/duck.mp3" id="8_we3n6"] +[ext_resource type="PackedScene" uid="uid://dhrvoulea0snt" path="res://src/Game/Weapon/Weapon.tscn" id="10_y0m3m"] +[ext_resource type="Texture2D" uid="uid://dqy8p88kyx5ne" path="res://assets/HUD/text_ready.png" id="11_4oo7h"] +[ext_resource type="Texture2D" uid="uid://cihmoy8ugti7a" path="res://assets/HUD/icon_bullet_gold_long.png" id="12_jte1f"] +[ext_resource type="AudioStream" uid="uid://5q3qmr7h5v0o" path="res://assets/Sounds/fire.mp3" id="15_lfonp"] +[ext_resource type="FontFile" uid="uid://b64smw5j517u6" path="res://assets/Fonts/Frogie-Regular.ttf" id="15_oe6m7"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_s6k5k"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("4_q0vde") +}], +"loop": true, +"name": &"duck_back", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("5_h887j") +}], +"loop": true, +"name": &"duck_brown", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("6_5na3p") +}], +"loop": true, +"name": &"duck_white", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("7_xek5y") +}], +"loop": true, +"name": &"duck_yellow", +"speed": 5.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_3lte3"] +size = Vector2(74.6667, 69.3333) + +[sub_resource type="Animation" id="Animation_p7t11"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_brown"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:texture") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("5_h887j")] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:emitting") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("CPUParticles2D:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath(".:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_2ckqg"] +resource_name = "hide_brown" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_brown"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.108819), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1e-05)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_2tned"] +resource_name = "hide_white" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_white"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.108819), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1e-05)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_1mkea"] +resource_name = "hide_yellow" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_yellow"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.108819), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1e-05)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_plf45"] +resource_name = "shot_brown" +length = 1.3 +step = 0.025 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 1.3), +"transitions": PackedFloat32Array(1, 0.196146, 2.54912), +"update": 0, +"values": [0.0, 0.0, 1.5708] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CPUParticles2D:texture") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("5_h887j")] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:emitting") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_kctf6"] +resource_name = "shot_white" +length = 1.3 +step = 0.025 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 1.3), +"transitions": PackedFloat32Array(1, 0.196146, 2.54912), +"update": 0, +"values": [0.0, 0.0, 1.5708] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CPUParticles2D:texture") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("6_5na3p")] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:emitting") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_8ah4a"] +resource_name = "shot_yellow" +length = 1.3 +step = 0.025 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 1.3), +"transitions": PackedFloat32Array(1, 0.196146, 2.54912), +"update": 0, +"values": [0.0, 0.0, 1.5708] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CPUParticles2D:texture") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("7_xek5y")] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:emitting") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_2jsnp"] +resource_name = "show_brown" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_brown"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.217082), +"update": 0, +"values": [Vector2(1, 0), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.45), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_l21vj"] +resource_name = "show_white" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_white"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.217082), +"update": 0, +"values": [Vector2(1, 0), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.45), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_nkjkj"] +resource_name = "show_yellow" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_yellow"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.217082), +"update": 0, +"values": [Vector2(1, 0), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.45), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ghwjf"] +_data = { +"RESET": SubResource("Animation_p7t11"), +"hide_brown": SubResource("Animation_2ckqg"), +"hide_white": SubResource("Animation_2tned"), +"hide_yellow": SubResource("Animation_1mkea"), +"shot_brown": SubResource("Animation_plf45"), +"shot_white": SubResource("Animation_kctf6"), +"shot_yellow": SubResource("Animation_8ah4a"), +"show_brown": SubResource("Animation_2jsnp"), +"show_white": SubResource("Animation_l21vj"), +"show_yellow": SubResource("Animation_nkjkj") +} + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_sdoan"] +particles_animation = true +particles_anim_h_frames = 3 +particles_anim_v_frames = 3 +particles_anim_loop = false + +[sub_resource type="Animation" id="Animation_jydnk"] +resource_name = "Combo" +length = 0.8 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.2, 0.4, 0.6, 0.8), +"transitions": PackedFloat32Array(0.840896, 0.757858, 0.840896, 0.707107), +"update": 0, +"values": [-0.0872665, 0.0, 0.0872665, 0.0] +} + +[sub_resource type="Animation" id="Animation_ptou4"] +resource_name = "Fade_out" +length = 0.25 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.2, 0.25), +"transitions": PackedFloat32Array(1, 1e-05, 1e-05), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_sjwnk"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [-0.0872665] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_cb0q8"] +_data = { +"Combo": SubResource("Animation_jydnk"), +"Fade_out": SubResource("Animation_ptou4"), +"RESET": SubResource("Animation_sjwnk") +} + +[sub_resource type="Animation" id="Animation_2axa4"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_plpox"] +resource_name = "Show" +length = 2.5 +loop_mode = 2 +step = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5, 1, 1.5, 2, 2.5), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [true, false, true, false, true, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_p6v6s"] +_data = { +"RESET": SubResource("Animation_2axa4"), +"Show": SubResource("Animation_plpox") +} + +[sub_resource type="Animation" id="Animation_bxwb6"] +resource_name = "CurtainDown" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/UI/CurtainTop1:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(2.07, 0.1), +"update": 0, +"values": [Vector2(0, 0), Vector2(0, 2000)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer/UI/CurtainTop2:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(2.07, 0.1), +"update": 0, +"values": [Vector2(3840, 64), Vector2(3840, 1000)] +} + +[sub_resource type="Animation" id="Animation_q7gv3"] +resource_name = "CurtainUp" +length = 2.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/UI/CurtainTop1:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(2.07, 0.5), +"update": 0, +"values": [Vector2(0, 2000), Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer/UI/CurtainTop2:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(2.07, 0.5), +"update": 0, +"values": [Vector2(3840, 1000), Vector2(3840, 64)] +} + +[sub_resource type="Animation" id="Animation_3yj5y"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/UI/CurtainTop1:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer/UI/CurtainTop2:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(3840, 64)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CanvasLayer/UI/Ready:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(5, 5)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CanvasLayer/UI/Ready:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1805, 1047)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CanvasLayer/UI/Ready:self_modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("CanvasLayer/UI/Go:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(10, 10)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("CanvasLayer/UI/Go:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1391, 733)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CanvasLayer/UI/Go:self_modulate") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 0)] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("CanvasLayer/UI/Ready:visible") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("CanvasLayer/UI/Go:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Sounds/Ready:playing") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Sounds/Go:playing") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_43jkr"] +resource_name = "ShowText" +length = 2.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/UI/Ready:self_modulate") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer/UI/Ready:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(0.203063, 2.82843), +"update": 0, +"values": [Vector2(3, 3), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CanvasLayer/UI/Ready:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(0.203063, 2.82843), +"update": 0, +"values": [Vector2(246, 549), Vector2(1345, 916.5)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CanvasLayer/UI/Go:self_modulate") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 1, 1.4, 2, 2.3), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CanvasLayer/UI/Go:scale") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 1, 1.4, 2, 2.4), +"transitions": PackedFloat32Array(1, 0.210224, 2.92817, 0.196146, 2.92817), +"update": 0, +"values": [Vector2(3, 3), Vector2(3, 3), Vector2(1, 1), Vector2(1, 1), Vector2(5, 5)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("CanvasLayer/UI/Go:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 1, 1.4, 2, 2.4), +"transitions": PackedFloat32Array(1, 0.210224, 2.92817, 0.196146, 2.92817), +"update": 0, +"values": [Vector2(1169, 530), Vector2(1169, 530), Vector2(1642.5, 916), Vector2(1642.5, 916), Vector2(623, 177)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("CanvasLayer/UI/Ready:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("CanvasLayer/UI/Go:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Sounds/Ready:playing") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Sounds/Go:playing") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 1.1), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_kevnw"] +_data = { +"CurtainDown": SubResource("Animation_bxwb6"), +"CurtainUp": SubResource("Animation_q7gv3"), +"RESET": SubResource("Animation_3yj5y"), +"ShowText": SubResource("Animation_43jkr") +} + +[node name="Game" type="Node2D"] +script = ExtResource("1_km67b") +scripts = Array[PackedScene]([null]) + +[node name="Scripts" type="Node" parent="."] + +[node name="Init" type="Node" parent="."] + +[node name="Duck" type="Node2D" parent="Init" groups=["target"]] +visible = false +position = Vector2(-730, 479) +script = ExtResource("2_cna4a") + +[node name="MainPivot" type="Node2D" parent="Init/Duck"] + +[node name="StickPivor" type="Node2D" parent="Init/Duck/MainPivot"] +position = Vector2(0, 96) + +[node name="Stick" type="Sprite2D" parent="Init/Duck/MainPivot/StickPivor"] +position = Vector2(0, 60) +texture = ExtResource("3_3l47x") +offset = Vector2(0, -61) + +[node name="DuckPivot" type="Node2D" parent="Init/Duck/MainPivot/StickPivor/Stick"] +position = Vector2(0, -156) + +[node name="Duck" type="AnimatedSprite2D" parent="Init/Duck/MainPivot/StickPivor/Stick/DuckPivot"] +position = Vector2(0, 47) +sprite_frames = SubResource("SpriteFrames_s6k5k") +animation = &"duck_brown" +offset = Vector2(0, -47) + +[node name="Hitbox" type="Area2D" parent="Init/Duck"] +scale = Vector2(1.5, 1.5) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Init/Duck/Hitbox"] +position = Vector2(0, -2.66667) +shape = SubResource("RectangleShape2D_3lte3") + +[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="Init/Duck"] +position = Vector2(-56, -56) +scale = Vector2(11.2, 21.6) +rect = Rect2(0, 0, 10, 10) + +[node name="GoneTimer" type="Timer" parent="Init/Duck"] +one_shot = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Init/Duck"] +libraries = { +"": SubResource("AnimationLibrary_ghwjf") +} + +[node name="CPUParticles2D" type="CPUParticles2D" parent="Init/Duck"] +material = SubResource("CanvasItemMaterial_sdoan") +emitting = false +lifetime = 2.0 +one_shot = true +explosiveness = 1.0 +randomness = 1.0 +texture = ExtResource("5_h887j") +emission_shape = 2 +emission_sphere_radius = 32.0 +direction = Vector2(0, 1) +spread = 180.0 +initial_velocity_min = 500.0 +initial_velocity_max = 500.0 +anim_offset_max = 1.0 + +[node name="break" type="AudioStreamPlayer" parent="Init/Duck"] +stream = ExtResource("8_we3n6") +volume_db = -80.0 +bus = &"SFX" + +[node name="Target" type="Node2D" parent="Init" groups=["target"]] +script = ExtResource("8_l8ovl") + +[node name="Hitbox" type="Area2D" parent="Init/Target"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Init/Target/Hitbox"] +position = Vector2(0, -8) + +[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="Init/Target"] +rect = Rect2(0, 0, 0, 0) + +[node name="GoneTimer" type="Timer" parent="Init/Target"] +one_shot = true + +[node name="Sounds" type="Node" parent="."] + +[node name="Fire" type="AudioStreamPlayer" parent="Sounds"] +stream = ExtResource("15_lfonp") +volume_db = -5.0 +bus = &"SFX" + +[node name="Reload" type="AudioStreamPlayer" parent="Sounds"] +stream = ExtResource("3_ygdqw") +bus = &"SFX" + +[node name="Ready" type="AudioStreamPlayer" parent="Sounds"] +stream = ExtResource("4_36pdh") +volume_db = -5.0 +bus = &"SFX" + +[node name="Go" type="AudioStreamPlayer" parent="Sounds"] +stream = ExtResource("4_fgo7o") +bus = &"SFX" + +[node name="Music" type="Node" parent="."] + +[node name="Track" type="AudioStreamPlayer" parent="Music"] +volume_db = -5.0 +bus = &"Music" + +[node name="Background" type="ParallaxBackground" parent="."] +script = ExtResource("4_cb74g") +speed_water1 = Vector2(-2.5, 0) +speed_water2 = Vector2(-1.5, 0) + +[node name="Background" type="ParallaxLayer" parent="Background"] + +[node name="Sprite2D" type="TextureRect" parent="Background/Background"] +offset_right = 3840.0 +offset_bottom = 2160.0 +texture = ExtResource("6_rh502") + +[node name="Clouds" type="ParallaxLayer" parent="Background"] +motion_mirroring = Vector2(3840, 0) + +[node name="Cloud1" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(100, 500) +texture = ExtResource("6_aqdhe") +centered = false + +[node name="Cloud2" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(638, 288) +texture = ExtResource("7_7voq1") +centered = false + +[node name="Cloud3" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(1024, 464) +texture = ExtResource("6_aqdhe") +centered = false + +[node name="Cloud4" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(1516, 268) +texture = ExtResource("7_7voq1") +centered = false + +[node name="Cloud5" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(1568, 592) +texture = ExtResource("7_7voq1") +centered = false + +[node name="Cloud6" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(1960, 372) +texture = ExtResource("6_aqdhe") +centered = false + +[node name="Cloud7" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(2336, 480) +texture = ExtResource("7_7voq1") +centered = false + +[node name="Cloud8" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(2544, 240) +texture = ExtResource("6_aqdhe") +centered = false + +[node name="Cloud9" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(2884, 436) +texture = ExtResource("7_7voq1") +centered = false + +[node name="Cloud10" type="Sprite2D" parent="Background/Clouds"] +position = Vector2(3340, 260) +texture = ExtResource("7_7voq1") +centered = false + +[node name="Water2" type="ParallaxLayer" parent="Background"] +motion_mirroring = Vector2(3840, 0) + +[node name="Sprite2D" type="Sprite2D" parent="Background/Water2"] +position = Vector2(100, 1330) +texture = ExtResource("3_bfewo") +centered = false + +[node name="Water1" type="ParallaxLayer" parent="Background"] +z_index = 2 +motion_mirroring = Vector2(3840, 0) + +[node name="Sprite2D" type="Sprite2D" parent="Background/Water1"] +position = Vector2(0, 1430) +texture = ExtResource("1_d4g72") +centered = false + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="UI" type="Control" parent="CanvasLayer"] +z_index = 500 +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("6_lyed7") + +[node name="Ready" type="TextureRect" parent="CanvasLayer/UI"] +visible = false +self_modulate = Color(1, 1, 1, 0) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -115.0 +offset_top = -33.0 +offset_right = 1035.0 +offset_bottom = 294.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(5, 5) +texture = ExtResource("11_4oo7h") + +[node name="Go" type="TextureRect" parent="CanvasLayer/UI"] +visible = false +self_modulate = Color(1, 1, 1, 0) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -529.0 +offset_top = -347.0 +offset_right = 26.0 +offset_bottom = -19.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(10, 10) +texture = ExtResource("7_d2c4a") + +[node name="CurtainTop2" type="TextureRect" parent="CanvasLayer/UI"] +z_index = 100 +layout_mode = 1 +offset_right = 3840.0 +offset_bottom = 64.0 +scale = Vector2(1, 2) +texture = ExtResource("7_m5cfk") + +[node name="CurtainTop1" type="TextureRect" parent="CanvasLayer/UI"] +z_index = 100 +layout_mode = 1 +offset_right = 3840.0 +offset_bottom = 79.0 +scale = Vector2(1, 2) +texture = ExtResource("7_0w3jm") +expand_mode = 5 + +[node name="Curtain1" type="TextureRect" parent="CanvasLayer/UI"] +z_index = 3 +layout_mode = 1 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_top = -1080.0 +offset_right = 665.0 +offset_bottom = 1080.0 +grow_vertical = 2 +texture = ExtResource("2_vsk6e") + +[node name="Curtain2" type="TextureRect" parent="CanvasLayer/UI"] +z_index = 3 +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = -665.0 +offset_top = -1080.0 +offset_bottom = 1080.0 +grow_horizontal = 0 +grow_vertical = 2 +rotation = -0.00121955 +texture = ExtResource("2_vsk6e") +flip_h = true + +[node name="Floor" type="TextureRect" parent="CanvasLayer/UI"] +z_index = 2 +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -1920.0 +offset_top = -512.0 +offset_right = 1920.0 +offset_bottom = -256.0 +grow_horizontal = 2 +grow_vertical = 0 +scale = Vector2(1, 2) +texture = ExtResource("3_iupnb") + +[node name="BottomUI" type="HSplitContainer" parent="CanvasLayer/UI"] +z_index = 10 +custom_minimum_size = Vector2(3000, 0) +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -688.0 +offset_top = -360.0 +offset_right = 688.0 +offset_bottom = -145.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_constants/separation = 100 +dragger_visibility = 1 + +[node name="Text" type="HBoxContainer" parent="CanvasLayer/UI/BottomUI"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme_override_constants/separation = 50 + +[node name="Title" type="Label" parent="CanvasLayer/UI/BottomUI/Text"] +custom_minimum_size = Vector2(600, 0) +layout_mode = 2 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 96 +text = "Duck Hunt" +horizontal_alignment = 1 + +[node name="Time" type="Label" parent="CanvasLayer/UI/BottomUI/Text"] +custom_minimum_size = Vector2(450, 0) +layout_mode = 2 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 96 +text = "Time: 0 +" +horizontal_alignment = 1 + +[node name="Score" type="Label" parent="CanvasLayer/UI/BottomUI/Text"] +custom_minimum_size = Vector2(625, 0) +layout_mode = 2 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 96 +text = "Score: 0 +" +horizontal_alignment = 1 + +[node name="Rank" type="HBoxContainer" parent="CanvasLayer/UI/BottomUI/Text"] +layout_mode = 2 +theme_override_constants/separation = 35 + +[node name="Rank" type="Label" parent="CanvasLayer/UI/BottomUI/Text/Rank"] +layout_mode = 2 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 96 +text = "Rank: +" +horizontal_alignment = 1 + +[node name="Rank2" type="Label" parent="CanvasLayer/UI/BottomUI/Text/Rank"] +layout_mode = 2 +theme_override_colors/font_outline_color = Color(0, 0, 0.14902, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 96 +text = "NONE +" +horizontal_alignment = 1 + +[node name="AmmoCounter" type="HBoxContainer" parent="CanvasLayer/UI/BottomUI"] +layout_mode = 2 +size_flags_horizontal = 8 + +[node name="Bullet" type="TextureRect" parent="CanvasLayer/UI/BottomUI/AmmoCounter"] +visible = false +layout_mode = 2 +texture = ExtResource("12_jte1f") + +[node name="Bullet2" type="TextureRect" parent="CanvasLayer/UI/BottomUI/AmmoCounter"] +visible = false +layout_mode = 2 +texture = ExtResource("12_jte1f") + +[node name="Bullet3" type="TextureRect" parent="CanvasLayer/UI/BottomUI/AmmoCounter"] +visible = false +layout_mode = 2 +texture = ExtResource("12_jte1f") + +[node name="Bullet4" type="TextureRect" parent="CanvasLayer/UI/BottomUI/AmmoCounter"] +visible = false +layout_mode = 2 +texture = ExtResource("12_jte1f") + +[node name="Bullet5" type="TextureRect" parent="CanvasLayer/UI/BottomUI/AmmoCounter"] +visible = false +layout_mode = 2 +texture = ExtResource("12_jte1f") + +[node name="Bullet6" type="TextureRect" parent="CanvasLayer/UI/BottomUI/AmmoCounter"] +visible = false +layout_mode = 2 +texture = ExtResource("12_jte1f") + +[node name="Combo" type="Label" parent="CanvasLayer/UI"] +visible = false +custom_minimum_size = Vector2(1000, 0) +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -500.0 +offset_top = 300.0 +offset_right = 500.0 +offset_bottom = 376.0 +grow_horizontal = 2 +rotation = -0.0872665 +pivot_offset = Vector2(500, 0) +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 36 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 72 +text = "Combo x2" +horizontal_alignment = 1 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="CanvasLayer/UI/Combo"] +libraries = { +"": SubResource("AnimationLibrary_cb0q8") +} + +[node name="Bonus" type="Label" parent="CanvasLayer/UI"] +visible = false +custom_minimum_size = Vector2(1000, 0) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -1118.0 +offset_top = -418.0 +offset_right = 1142.0 +offset_bottom = -286.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 128 +text = "50 ENEMIES SHOT BONUS +10000 POINTS" +horizontal_alignment = 1 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="CanvasLayer/UI/Bonus"] +libraries = { +"": SubResource("AnimationLibrary_p6v6s") +} + +[node name="Pause" type="Label" parent="CanvasLayer/UI"] +visible = false +custom_minimum_size = Vector2(1000, 0) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -1130.0 +offset_top = -66.0 +offset_right = 1130.0 +offset_bottom = 66.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 128 +text = "GAME PAUSED" +horizontal_alignment = 1 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="CanvasLayer/UI/Pause"] +libraries = { +"": SubResource("AnimationLibrary_p6v6s") +} + +[node name="Help" type="Label" parent="CanvasLayer/UI"] +z_index = 10 +custom_minimum_size = Vector2(1000, 0) +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -826.5 +offset_top = -110.0 +offset_right = 826.5 +offset_bottom = -34.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_colors/font_outline_color = Color(1, 0.392157, 0, 1) +theme_override_constants/outline_size = 50 +theme_override_fonts/font = ExtResource("15_oe6m7") +theme_override_font_sizes/font_size = 72 +text = "Press 'esc' To leave the game. Press 'r' to restart or 'p' to pause" +horizontal_alignment = 1 + +[node name="Weapon" parent="CanvasLayer/UI" instance=ExtResource("10_y0m3m")] +position = Vector2(2569, 1162) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_kevnw") +} + +[node name="Firerate" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true + +[node name="Reload" type="Timer" parent="."] +one_shot = true + +[node name="Time" type="Timer" parent="."] + +[node name="Combo" type="Timer" parent="."] +wait_time = 2.0 +one_shot = true + +[connection signal="mouse_entered" from="Init/Duck/Hitbox" to="Init/Duck" method="_on_hitbox_mouse_entered"] +[connection signal="mouse_exited" from="Init/Duck/Hitbox" to="Init/Duck" method="_on_hitbox_mouse_exited"] +[connection signal="screen_exited" from="Init/Duck/VisibleOnScreenNotifier2D" to="Init/Duck" method="_on_visible_on_screen_notifier_2d_screen_exited"] +[connection signal="timeout" from="Init/Duck/GoneTimer" to="Init/Duck" method="_on_gone_timer_timeout"] +[connection signal="mouse_entered" from="Init/Target/Hitbox" to="Init/Target" method="_on_hitbox_mouse_entered"] +[connection signal="mouse_exited" from="Init/Target/Hitbox" to="Init/Target" method="_on_hitbox_mouse_exited"] +[connection signal="screen_exited" from="Init/Target/VisibleOnScreenNotifier2D" to="Init/Target" method="_on_visible_on_screen_notifier_2d_screen_exited"] +[connection signal="timeout" from="Init/Target/GoneTimer" to="Init/Target" method="_on_gone_timer_timeout"] +[connection signal="timeout" from="Firerate" to="." method="_on_firerate_timeout"] +[connection signal="timeout" from="Reload" to="." method="_on_reload_timeout"] +[connection signal="timeout" from="Time" to="." method="_on_time_timeout"] +[connection signal="timeout" from="Combo" to="." method="_on_combo_timeout"] diff --git a/main/src/Game/Game.gd b/main/src/Game/Game.gd index 7145554..8178660 100644 --- a/main/src/Game/Game.gd +++ b/main/src/Game/Game.gd @@ -61,13 +61,26 @@ var bullets: int = max_bullets: bullets = val bullets_changed.emit(bullets) +func init_game(): + $Sounds/Fire.volume_db = -80 + $Sounds/Reload.volume_db = -80 + + $Sounds/Fire.play() + $Sounds/Reload.play() + + $Init/Duck.kill(true) + $Init/Target.kill(true) + func _ready(): + Globals.game = self + + await init_game() + if Globals.ta_game: _score = ta_score _rank = "platinum" ui.set_rank(_rank) - Globals.game = self bg.play_animation = false $CanvasLayer/UI/BottomUI/Text/Title.text = Globals.end_level @@ -88,6 +101,9 @@ func _ready(): await animator.animation_finished + $Sounds/Fire.volume_db = -5 + $Sounds/Reload.volume_db = 0 + ui.show_ui() Input.set_custom_mouse_cursor(normal_cursor,Input.CURSOR_ARROW,Vector2(21,21)) Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) @@ -110,9 +126,7 @@ func _unhandled_input(event): if Input.is_action_just_pressed("exit"): Globals.root.get_node("Click").play() - Composer.goto_scene("res://src/LevelSelect/LevelSelect.tscn",{"is_animated":true,"animation":1}) - elif Input.is_action_just_pressed("reset"): - Composer.goto_scene(Globals.LEVEL_PATHS[Globals.level_id],{"is_animated":true,"animation":1}) + Globals.root.change_scene(Globals.LEVEL_PATHS[Globals.level_id],"LevelSelect") elif Input.is_action_just_pressed("pause"): Globals.root.get_node("Click").play() _pause_game() @@ -223,7 +237,7 @@ func _game_over(): Globals.end_level = "Duck Hunt" Globals.end_shot = total_killed - Composer.goto_scene("res://src/GameOver/GameOver.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene(Globals.LEVEL_PATHS[Globals.level_id],"GameOver") func _init_game_upgrades(): var mag_update = SaveData.stats["upgrade_mag"] diff --git a/main/src/Game/Game.tscn b/main/src/Game/Game.tscn index 0017c45..c7a6ccd 100644 --- a/main/src/Game/Game.tscn +++ b/main/src/Game/Game.tscn @@ -1,14 +1,19 @@ -[gd_scene load_steps=34 format=3 uid="uid://cx4yv25d8i687"] +[gd_scene load_steps=56 format=3 uid="uid://cx4yv25d8i687"] [ext_resource type="Texture2D" uid="uid://cdv8mxe1tlgrt" path="res://assets/Stall/water1.png" id="1_d4g72"] [ext_resource type="Script" path="res://src/Game/Game.gd" id="1_km67b"] +[ext_resource type="Script" path="res://src/DuckGame/Duck/Duck.gd" id="2_cna4a"] [ext_resource type="Texture2D" uid="uid://d3gyjk2q3x5nm" path="res://assets/Stall/curtain.png" id="2_vsk6e"] +[ext_resource type="Texture2D" uid="uid://dx573vccdhs2v" path="res://assets/Objects/stick_metal.png" id="3_3l47x"] [ext_resource type="Texture2D" uid="uid://dplsxvkppwnls" path="res://assets/Stall/water2.png" id="3_bfewo"] [ext_resource type="Texture2D" uid="uid://d2a527rqetbnk" path="res://assets/Stall/bg_wood.png" id="3_iupnb"] [ext_resource type="AudioStream" uid="uid://jdbr2s83jhsu" path="res://assets/Sounds/reload.mp3" id="3_ygdqw"] [ext_resource type="AudioStream" uid="uid://cartqjnql63db" path="res://assets/Sounds/ready.mp3" id="4_36pdh"] [ext_resource type="Script" path="res://src/Background/GameBg.gd" id="4_cb74g"] [ext_resource type="AudioStream" uid="uid://bo3yd6irh38ed" path="res://assets/Sounds/go.mp3" id="4_fgo7o"] +[ext_resource type="Texture2D" uid="uid://d32lgww5uu03h" path="res://assets/Objects/duck_back.png" id="4_q0vde"] +[ext_resource type="Texture2D" uid="uid://cbbojwyr2o8pd" path="res://assets/Objects/duck_brown.png" id="5_h887j"] +[ext_resource type="Texture2D" uid="uid://cmdioh0y71dc0" path="res://assets/Objects/duck_white.png" id="6_5na3p"] [ext_resource type="Texture2D" uid="uid://dkavn4kowna50" path="res://assets/Stall/cloud1.png" id="6_aqdhe"] [ext_resource type="Script" path="res://src/Game/UI.gd" id="6_lyed7"] [ext_resource type="Texture2D" uid="uid://7834f2tredls" path="res://assets/Stall/backgroundEmpty.png" id="6_rh502"] @@ -16,12 +21,718 @@ [ext_resource type="Texture2D" uid="uid://bieqt6dt3lbgr" path="res://assets/Stall/cloud2.png" id="7_7voq1"] [ext_resource type="Texture2D" uid="uid://dtvqp5aip7n6f" path="res://assets/HUD/text_go.png" id="7_d2c4a"] [ext_resource type="Texture2D" uid="uid://dnoy7k5ft36ek" path="res://assets/Stall/curtainTop.png" id="7_m5cfk"] +[ext_resource type="Texture2D" uid="uid://cbfxx8n1yjhsr" path="res://assets/Objects/duck_yellow.png" id="7_xek5y"] +[ext_resource type="Script" path="res://src/Target/Target.gd" id="8_l8ovl"] +[ext_resource type="AudioStream" uid="uid://dhrrmgb1nefd" path="res://assets/Sounds/duck.mp3" id="8_we3n6"] [ext_resource type="PackedScene" uid="uid://dhrvoulea0snt" path="res://src/Game/Weapon/Weapon.tscn" id="10_y0m3m"] [ext_resource type="Texture2D" uid="uid://dqy8p88kyx5ne" path="res://assets/HUD/text_ready.png" id="11_4oo7h"] [ext_resource type="Texture2D" uid="uid://cihmoy8ugti7a" path="res://assets/HUD/icon_bullet_gold_long.png" id="12_jte1f"] [ext_resource type="AudioStream" uid="uid://5q3qmr7h5v0o" path="res://assets/Sounds/fire.mp3" id="15_lfonp"] [ext_resource type="FontFile" uid="uid://b64smw5j517u6" path="res://assets/Fonts/Frogie-Regular.ttf" id="15_oe6m7"] +[sub_resource type="SpriteFrames" id="SpriteFrames_s6k5k"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("4_q0vde") +}], +"loop": true, +"name": &"duck_back", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("5_h887j") +}], +"loop": true, +"name": &"duck_brown", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("6_5na3p") +}], +"loop": true, +"name": &"duck_white", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("7_xek5y") +}], +"loop": true, +"name": &"duck_yellow", +"speed": 5.0 +}] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_3lte3"] +size = Vector2(74.6667, 69.3333) + +[sub_resource type="Animation" id="Animation_p7t11"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_brown"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:texture") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("5_h887j")] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:emitting") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("CPUParticles2D:modulate") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(1, 1)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath(".:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_2ckqg"] +resource_name = "hide_brown" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_brown"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.108819), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1e-05)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_2tned"] +resource_name = "hide_white" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_white"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.108819), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1e-05)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_1mkea"] +resource_name = "hide_yellow" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_yellow"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.108819), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1e-05)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0.2), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_plf45"] +resource_name = "shot_brown" +length = 1.3 +step = 0.025 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 1.3), +"transitions": PackedFloat32Array(1, 0.196146, 2.54912), +"update": 0, +"values": [0.0, 0.0, 1.5708] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CPUParticles2D:texture") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("5_h887j")] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:emitting") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_kctf6"] +resource_name = "shot_white" +length = 1.3 +step = 0.025 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 1.3), +"transitions": PackedFloat32Array(1, 0.196146, 2.54912), +"update": 0, +"values": [0.0, 0.0, 1.5708] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CPUParticles2D:texture") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("6_5na3p")] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:emitting") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_8ah4a"] +resource_name = "shot_yellow" +length = 1.3 +step = 0.025 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick:rotation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1, 1.3), +"transitions": PackedFloat32Array(1, 0.196146, 2.54912), +"update": 0, +"values": [0.0, 0.0, 1.5708] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:modulate") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("CPUParticles2D:texture") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [ExtResource("7_xek5y")] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("CPUParticles2D:emitting") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.05, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("CPUParticles2D:modulate") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.2, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath(".:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_2jsnp"] +resource_name = "show_brown" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_brown"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.217082), +"update": 0, +"values": [Vector2(1, 0), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.45), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_l21vj"] +resource_name = "show_white" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_white"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.217082), +"update": 0, +"values": [Vector2(1, 0), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.45), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_nkjkj"] +resource_name = "show_yellow" +length = 0.5 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("MainPivot/StickPivor/Stick/DuckPivot/Duck:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"duck_yellow"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("MainPivot/StickPivor/Stick:scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1.03526, 0.217082), +"update": 0, +"values": [Vector2(1, 0), Vector2(1, 1)] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.05), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [false, true] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Hitbox/CollisionShape2D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.45), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ghwjf"] +_data = { +"RESET": SubResource("Animation_p7t11"), +"hide_brown": SubResource("Animation_2ckqg"), +"hide_white": SubResource("Animation_2tned"), +"hide_yellow": SubResource("Animation_1mkea"), +"shot_brown": SubResource("Animation_plf45"), +"shot_white": SubResource("Animation_kctf6"), +"shot_yellow": SubResource("Animation_8ah4a"), +"show_brown": SubResource("Animation_2jsnp"), +"show_white": SubResource("Animation_l21vj"), +"show_yellow": SubResource("Animation_nkjkj") +} + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_sdoan"] +particles_animation = true +particles_anim_h_frames = 3 +particles_anim_v_frames = 3 +particles_anim_loop = false + [sub_resource type="Animation" id="Animation_jydnk"] resource_name = "Combo" length = 0.8 @@ -494,6 +1205,87 @@ scripts = Array[PackedScene]([null]) [node name="Scripts" type="Node" parent="."] +[node name="Init" type="Node" parent="."] + +[node name="Duck" type="Node2D" parent="Init" groups=["target"]] +visible = false +position = Vector2(-730, 479) +script = ExtResource("2_cna4a") + +[node name="MainPivot" type="Node2D" parent="Init/Duck"] + +[node name="StickPivor" type="Node2D" parent="Init/Duck/MainPivot"] +position = Vector2(0, 96) + +[node name="Stick" type="Sprite2D" parent="Init/Duck/MainPivot/StickPivor"] +position = Vector2(0, 60) +texture = ExtResource("3_3l47x") +offset = Vector2(0, -61) + +[node name="DuckPivot" type="Node2D" parent="Init/Duck/MainPivot/StickPivor/Stick"] +position = Vector2(0, -156) + +[node name="Duck" type="AnimatedSprite2D" parent="Init/Duck/MainPivot/StickPivor/Stick/DuckPivot"] +position = Vector2(0, 47) +sprite_frames = SubResource("SpriteFrames_s6k5k") +animation = &"duck_brown" +offset = Vector2(0, -47) + +[node name="Hitbox" type="Area2D" parent="Init/Duck"] +scale = Vector2(1.5, 1.5) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Init/Duck/Hitbox"] +position = Vector2(0, -2.66667) +shape = SubResource("RectangleShape2D_3lte3") + +[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="Init/Duck"] +position = Vector2(-56, -56) +scale = Vector2(11.2, 21.6) +rect = Rect2(0, 0, 10, 10) + +[node name="GoneTimer" type="Timer" parent="Init/Duck"] +one_shot = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Init/Duck"] +libraries = { +"": SubResource("AnimationLibrary_ghwjf") +} + +[node name="CPUParticles2D" type="CPUParticles2D" parent="Init/Duck"] +material = SubResource("CanvasItemMaterial_sdoan") +emitting = false +lifetime = 2.0 +one_shot = true +explosiveness = 1.0 +randomness = 1.0 +texture = ExtResource("5_h887j") +emission_shape = 2 +emission_sphere_radius = 32.0 +direction = Vector2(0, 1) +spread = 180.0 +initial_velocity_min = 500.0 +initial_velocity_max = 500.0 +anim_offset_max = 1.0 + +[node name="break" type="AudioStreamPlayer" parent="Init/Duck"] +stream = ExtResource("8_we3n6") +volume_db = -80.0 +bus = &"SFX" + +[node name="Target" type="Node2D" parent="Init" groups=["target"]] +script = ExtResource("8_l8ovl") + +[node name="Hitbox" type="Area2D" parent="Init/Target"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Init/Target/Hitbox"] +position = Vector2(0, -8) + +[node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="Init/Target"] +rect = Rect2(0, 0, 0, 0) + +[node name="GoneTimer" type="Timer" parent="Init/Target"] +one_shot = true + [node name="Sounds" type="Node" parent="."] [node name="Fire" type="AudioStreamPlayer" parent="Sounds"] @@ -624,10 +1416,10 @@ anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -115.0 -offset_top = -33.0 -offset_right = 1035.0 -offset_bottom = 294.0 +offset_left = 1805.0 +offset_top = 1047.0 +offset_right = 2955.0 +offset_bottom = 1374.0 grow_horizontal = 2 grow_vertical = 2 scale = Vector2(5, 5) @@ -642,10 +1434,10 @@ anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -529.0 -offset_top = -347.0 -offset_right = 26.0 -offset_bottom = -19.0 +offset_left = 1391.0 +offset_top = 733.0 +offset_right = 1946.0 +offset_bottom = 1061.0 grow_horizontal = 2 grow_vertical = 2 scale = Vector2(10, 10) @@ -951,6 +1743,14 @@ one_shot = true wait_time = 2.0 one_shot = true +[connection signal="mouse_entered" from="Init/Duck/Hitbox" to="Init/Duck" method="_on_hitbox_mouse_entered"] +[connection signal="mouse_exited" from="Init/Duck/Hitbox" to="Init/Duck" method="_on_hitbox_mouse_exited"] +[connection signal="screen_exited" from="Init/Duck/VisibleOnScreenNotifier2D" to="Init/Duck" method="_on_visible_on_screen_notifier_2d_screen_exited"] +[connection signal="timeout" from="Init/Duck/GoneTimer" to="Init/Duck" method="_on_gone_timer_timeout"] +[connection signal="mouse_entered" from="Init/Target/Hitbox" to="Init/Target" method="_on_hitbox_mouse_entered"] +[connection signal="mouse_exited" from="Init/Target/Hitbox" to="Init/Target" method="_on_hitbox_mouse_exited"] +[connection signal="screen_exited" from="Init/Target/VisibleOnScreenNotifier2D" to="Init/Target" method="_on_visible_on_screen_notifier_2d_screen_exited"] +[connection signal="timeout" from="Init/Target/GoneTimer" to="Init/Target" method="_on_gone_timer_timeout"] [connection signal="timeout" from="Firerate" to="." method="_on_firerate_timeout"] [connection signal="timeout" from="Reload" to="." method="_on_reload_timeout"] [connection signal="timeout" from="Time" to="." method="_on_time_timeout"] diff --git a/main/src/Game/UI.gd b/main/src/Game/UI.gd index a6cfbcf..c5bb21c 100644 --- a/main/src/Game/UI.gd +++ b/main/src/Game/UI.gd @@ -3,14 +3,14 @@ extends Control signal score_update_ended() -@onready var ui_panel: HSplitContainer = $BottomUI +@onready var ui_panel: HSplitContainer = %BottomUI -@onready var level_title: Label = $BottomUI/Text/Title -@onready var score_text: Label = $BottomUI/Text/Score -@onready var time_text: Label = $BottomUI/Text/Time -@onready var rank_text: Label = $BottomUI/Text/Rank/Rank2 +@onready var level_title: Label = %Title +@onready var score_text: Label = %Score +@onready var time_text: Label = %Time +@onready var rank_text: Label = %Rank2 -@onready var ammo_counter: HBoxContainer = $BottomUI/AmmoCounter +@onready var ammo_counter: HBoxContainer = %AmmoCounter @onready var bullet_img: Texture2D = preload("res://assets/HUD/icon_bullet_gold_long.png") @onready var empty_img: Texture2D = preload("res://assets/HUD/icon_bullet_empty_long.png") @@ -23,7 +23,8 @@ var score_to_update = 0 var score_text_value = 0 func _ready(): - await get_tree().process_frame + if Globals.game == null: + await get_tree().process_frame Globals.game.connect("bullets_changed",_update_bullets) Globals.game.connect("time_updated",_update_time) diff --git a/main/src/GameOver/GameOver.gd b/main/src/GameOver/GameOver.gd index 0b4c4fa..c7ae2a2 100644 --- a/main/src/GameOver/GameOver.gd +++ b/main/src/GameOver/GameOver.gd @@ -101,4 +101,4 @@ func _on_menu_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/LevelSelect/LevelSelect.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("GameOver","LevelSelect") diff --git a/main/src/Global/Globals.gd b/main/src/Global/Globals.gd index a40ee60..cc31666 100644 --- a/main/src/Global/Globals.gd +++ b/main/src/Global/Globals.gd @@ -5,8 +5,8 @@ extends Node @onready var active_script: GameScript = null const LEVEL_PATHS = { - "duck":"res://src/DuckGame/DuckGame.tscn", - "target":"res://src/TargetGame/TargetGame.tscn", + "duck":"DuckGame", + "target":"TargetGame", } var ta_game: bool = false diff --git a/main/src/LevelSelect/LevelSelect.gd b/main/src/LevelSelect/LevelSelect.gd index 26ca891..533fb4e 100644 --- a/main/src/LevelSelect/LevelSelect.gd +++ b/main/src/LevelSelect/LevelSelect.gd @@ -83,7 +83,7 @@ func _on_back_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/MainMenu/MainMenu.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("LevelSelect","MainMenu") func _write_ranks(): var rank = SaveData.stats[level_prefix + "_rank"].to_upper() @@ -130,7 +130,7 @@ func _on_shop_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/Shop/Shop.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("LevelSelect","Shop") func _on_play_button_pressed(): if is_transitioning: @@ -150,8 +150,7 @@ func _on_play_button_pressed(): menu_theme.stop() - Composer.goto_scene(Globals.LEVEL_PATHS[level_prefix],{"is_animated":true,"animation":1}) - + Globals.root.change_scene("LevelSelect",Globals.LEVEL_PATHS[Globals.level_id]) func _on_play_ta_pressed(): if is_transitioning: @@ -171,7 +170,7 @@ func _on_play_ta_pressed(): menu_theme.stop() - Composer.goto_scene(Globals.LEVEL_PATHS[level_prefix],{"is_animated":true,"animation":1}) + Globals.root.change_scene("LevelSelect",Globals.LEVEL_PATHS[Globals.level_id]) func _draw_level(): level_prefix = LEVEL_PREFIXED[level] diff --git a/main/src/Main/Main.gd b/main/src/Main/Main.gd index a06a500..55055b6 100644 --- a/main/src/Main/Main.gd +++ b/main/src/Main/Main.gd @@ -1,5 +1,7 @@ extends Node2D +@onready var animation_player = $AnimationPlayer + func _ready() -> void: randomize() @@ -11,5 +13,55 @@ func _ready() -> void: AudioServer.set_bus_volume_db(AudioServer.get_bus_index("Music"),linear_to_db(SaveData.settings["music_volume"]/100)) AudioServer.set_bus_volume_db(AudioServer.get_bus_index("SFX"),linear_to_db(SaveData.settings["sfx_volume"]/100)) - Composer.goto_scene("res://src/MainMenu/MainMenu.tscn",{"is_animated":true,"animation":1}) + ComposerGD.AddScene("MainMenu","res://src/MainMenu/MainMenu.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("LevelSelect","res://src/LevelSelect/LevelSelect.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("Shop","res://src/Shop/Shop.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("Credits","res://src/Credits/Credits.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("Options","res://src/Options/Options.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("DuckGame","res://src/DuckGame/DuckGame.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("TargetGame","res://src/TargetGame/TargetGame.tscn",{ + "instant_load":true, + }) + + ComposerGD.AddScene("GameOver","res://src/GameOver/GameOver.tscn",{ + "instant_load":true, + }) + + await ComposerGD.SceneLoaded + + animation_player.play("FadeOut") + + ComposerGD.CreateScene("MainMenu",{ + "scene_parent":self + }) + +func change_scene(scene1, scene2): + animation_player.play("FadeIn") + + await animation_player.animation_finished + + ComposerGD.RemoveScene(scene1) + + animation_player.play("FadeOut") + ComposerGD.CreateScene(scene2,{ + "scene_parent":self + }) diff --git a/main/src/Main/Main.tscn b/main/src/Main/Main.tscn index 11d4236..df03452 100644 --- a/main/src/Main/Main.tscn +++ b/main/src/Main/Main.tscn @@ -1,9 +1,99 @@ -[gd_scene load_steps=4 format=3 uid="uid://b6tlaodk6wuns"] +[gd_scene load_steps=8 format=3 uid="uid://b6tlaodk6wuns"] [ext_resource type="Script" path="res://src/Main/Main.gd" id="1_qucfl"] [ext_resource type="AudioStream" uid="uid://dgmvifmud2s4s" path="res://assets/Music/menu.ogg" id="2_3i5kj"] [ext_resource type="AudioStream" uid="uid://bv5kosju8l5xb" path="res://assets/Sounds/click.mp3" id="3_x3onn"] +[sub_resource type="Animation" id="Animation_tytmd"] +resource_name = "FadeOut" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/Control/TransitionRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 1), Color(0, 0, 0, 0)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + +[sub_resource type="Animation" id="Animation_xftgx"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/Control/TransitionRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0, 0, 0, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="Animation" id="Animation_0xdsm"] +resource_name = "FadeIn" +length = 0.5 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("CanvasLayer/Control/TransitionRect:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(0, 0, 0, 0), Color(0, 0, 0, 1)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CanvasLayer:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_vell7"] +_data = { +"FadeIn": SubResource("Animation_0xdsm"), +"FadeOut": SubResource("Animation_tytmd"), +"RESET": SubResource("Animation_xftgx") +} + [node name="Main" type="Node2D"] script = ExtResource("1_qucfl") @@ -34,3 +124,8 @@ bus = &"Music" [node name="Click" type="AudioStreamPlayer" parent="."] stream = ExtResource("3_x3onn") bus = &"SFX" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_vell7") +} diff --git a/main/src/MainMenu/MainMenu.gd b/main/src/MainMenu/MainMenu.gd index a81547b..9832d68 100644 --- a/main/src/MainMenu/MainMenu.gd +++ b/main/src/MainMenu/MainMenu.gd @@ -7,6 +7,9 @@ extends Node2D @onready var menu_theme: AudioStreamPlayer = Globals.root.get_node("MenuTheme") func _ready(): + if OS.get_name() == "Web": + $CanvasLayer/Control/VBoxContainer/ExitButton.hide() + bg.play_animation = false animator.play("CurtainUp") @@ -16,9 +19,6 @@ func _ready(): if not menu_theme.playing: menu_theme.play() - if OS.get_name() == "Web": - $CanvasLayer/Control/VBoxContainer/ExitButton.hide() - is_transitioning = false bg.play_animation = true @@ -46,7 +46,7 @@ func _on_play_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/LevelSelect/LevelSelect.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("MainMenu","LevelSelect") func _on_options_button_pressed(): if is_transitioning: @@ -61,7 +61,7 @@ func _on_options_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/Options/Options.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("MainMenu","Options") func _on_credits_button_pressed(): if is_transitioning: @@ -76,7 +76,7 @@ func _on_credits_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/Credits/Credits.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("MainMenu","Credits") func _on_exit_button_pressed(): if is_transitioning: diff --git a/main/src/Options/Options.gd b/main/src/Options/Options.gd index e3f0045..7d0ef8b 100644 --- a/main/src/Options/Options.gd +++ b/main/src/Options/Options.gd @@ -61,8 +61,7 @@ func _on_back_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/MainMenu/MainMenu.tscn",{"is_animated":true,"animation":1}) - + Globals.root.change_scene("Options","MainMenu") func _on_master_slider_drag_ended(value_changed): if not value_changed: diff --git a/main/src/Shop/Shop.gd b/main/src/Shop/Shop.gd index 6360e1e..2e216f0 100644 --- a/main/src/Shop/Shop.gd +++ b/main/src/Shop/Shop.gd @@ -62,6 +62,8 @@ func _on_back_button_pressed(): if is_transitioning: return + Globals.root.get_node("Click").play() + bg.play_animation = false is_transitioning = true @@ -69,7 +71,7 @@ func _on_back_button_pressed(): await animator.animation_finished - Composer.goto_scene("res://src/MainMenu/MainMenu.tscn",{"is_animated":true,"animation":1}) + Globals.root.change_scene("Shop","MainMenu") func update_shop(): money_text.text = "x" + str(SaveData.stats["money"]) diff --git a/main/src/Target/Target.gd b/main/src/Target/Target.gd index 9eb7b57..73eb8b7 100644 --- a/main/src/Target/Target.gd +++ b/main/src/Target/Target.gd @@ -25,12 +25,13 @@ var _is_paused: bool = false var _has_paused_animation: bool = false func _ready(): - Globals.game.total_spawned += 1 + if Globals.game != null: + Globals.game.total_spawned += 1 + killed.connect(Globals.game._on_enemy_killed) + set_physics_process(!is_static) set_process_unhandled_input(false) - killed.connect(Globals.game._on_enemy_killed) - _on_ready() func _on_ready(): @@ -75,10 +76,10 @@ func show_score_text(): func enemy_gone(): pass -func kill(): +func kill(quiet_kill: bool = false): if not _is_dead: killed.emit(self) - show_score_text() + if not quiet_kill: show_score_text() _is_dead = true @@ -105,7 +106,7 @@ func pause(): func unpause(): _is_paused = false - set_physics_process(true) + set_physics_process(!is_static) set_process_unhandled_input(true) $GoneTimer.paused = false diff --git a/main/src/TargetGame/Target/target.gd b/main/src/TargetGame/Target/target.gd index 1047de6..4cdfbbc 100644 --- a/main/src/TargetGame/Target/target.gd +++ b/main/src/TargetGame/Target/target.gd @@ -79,7 +79,7 @@ func enemy_gone(): queue_free() -func kill(): +func kill(quiet_kill: bool = false): if not _is_dead: $GoneTimer.stop() killed.emit(self) @@ -93,7 +93,7 @@ func kill(): $CPUParticles2D.emitting = true - show_score_text() + if !quiet_kill: show_score_text() await get_tree().create_timer(0.5).timeout diff --git a/main/src/TargetGame/TargetGame.tscn b/main/src/TargetGame/TargetGame.tscn index f5edfdf..09d166f 100644 --- a/main/src/TargetGame/TargetGame.tscn +++ b/main/src/TargetGame/TargetGame.tscn @@ -26,7 +26,7 @@ rank_score = { [node name="Track" parent="Music" index="0"] stream = ExtResource("8_n6sh5") -[node name="Background" parent="." index="3"] +[node name="Background" parent="." index="4"] speed_water1 = Vector2(0, 0) speed_water2 = Vector2(0, 0) @@ -61,17 +61,5 @@ texture = ExtResource("3_qml5i") [node name="SpawnZone" type="Node" parent="Background" index="5"] -[node name="Ready" parent="CanvasLayer/UI" index="0"] -offset_left = 1805.0 -offset_top = 1047.0 -offset_right = 2955.0 -offset_bottom = 1374.0 - -[node name="Go" parent="CanvasLayer/UI" index="1"] -offset_left = 1391.0 -offset_top = 733.0 -offset_right = 1946.0 -offset_bottom = 1061.0 - -[node name="Combo" parent="." index="9"] +[node name="Combo" parent="." index="10"] wait_time = 2.5