├── .gitattributes ├── .github └── workflows │ └── update-submodule.yml ├── .gitignore ├── LICENSE.md ├── README.md ├── addons └── splash_screen_wizard │ ├── editor_ui.gd │ ├── icons │ ├── IconAddSlide.svg │ ├── IconAddSlide.svg.import │ ├── ProjectIcon.png │ ├── ProjectIcon.png.import │ ├── ProjectIcon.svg │ ├── ProjectIcon.svg.import │ ├── SlideTransition.svg │ ├── SlideTransition.svg.import │ ├── SlideTransitionFade.svg │ ├── SlideTransitionFade.svg.import │ ├── SplashScreen.svg │ ├── SplashScreen.svg.import │ ├── SplashScreenSlide.svg │ └── SplashScreenSlide.svg.import │ ├── plugin.cfg │ ├── slide_transition.gd │ ├── splash_screen.gd │ ├── splash_screen_slide.gd │ ├── splash_screen_wizard.gd │ └── transitions │ └── slide_transition_fade.gd ├── demo_splash_screen_wizard ├── assets │ ├── eye_lid.png │ ├── eye_lid.png.import │ ├── logo_vertical_monochrome_dark.svg │ └── logo_vertical_monochrome_dark.svg.import ├── demo_splash_screen_wizard.tscn ├── slides │ ├── slide_disclaimer.tscn │ ├── slide_godot.gd │ └── slide_godot.tscn └── transitions │ ├── fade_in.tres │ └── fade_out.tres ├── icon.svg ├── icon.svg.import ├── images ├── screenshot_inspector.png ├── screenshot_inspector.png.import ├── screenshot_tree.png └── screenshot_tree.png.import └── project.godot /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.github/workflows/update-submodule.yml: -------------------------------------------------------------------------------- 1 | name: Update Submodule Branch 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build: 10 | 11 | runs-on: ubuntu-latest 12 | 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v2 16 | 17 | - name: Setup Git 18 | run: | 19 | git config --global user.name 'GitHub Action' 20 | git config --global user.email 'action@github.com' 21 | git fetch 22 | 23 | - name: Clean Submodule 24 | run: | 25 | git checkout submodule 26 | git rm -r . 27 | 28 | - name: Update from Main 29 | run: | 30 | git checkout main -- addons/splash_screen_wizard 31 | mv addons/splash_screen_wizard/* . 32 | git rm -r addons/splash_screen_wizard 33 | 34 | - name: Commit to Submodule 35 | continue-on-error: true 36 | run: | 37 | git add -A 38 | git commit -am "Updated Submodule from Main" 39 | git push 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Godot 4+ specific ignores 2 | .godot/ 3 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2024 Pat 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SplashScreenWizard 2 | 3 |

4 | Logo 5 |

6 | 7 |
8 | A simple plugin for the Godot Game Engine that allows you to create a custom splash screen for your game. 9 |
10 | 11 |
12 | 13 | > [!NOTE] 14 | > This plugin doesn't change the Boot Splash Screen of the Godot Engine that can be customized in the Project Settings. It provieds a new set of `Control` nodes that can be used to create a custom splash screen inside the `SceneTree`. 15 | 16 | 17 | You can also [buy me a coffee](https://ko-fi.com/pat02) if you like the plugin and feel like supporting me :D 18 | 19 | 20 | ## Features 21 | - Plug & Play: Just add the ![IconSplashScreen](addons/splash_screen_wizard/icons/SplashScreen.svg) `SplashScreen` node to your scene and you are ready to go. 22 | - Create custom splash screens in the editor by using ![IconSplashScreenSlide](addons/splash_screen_wizard/icons/SplashScreenSlide.svg) `SplashScreenSlide` nodes. 23 | - Set transitions for each slide using the `SlideTransition` system. 24 | - Let the player skip slides using the a defined input action. 25 | 26 | ## Installation 27 | You can install the plugin in one of the following ways: 28 | 29 | - Use the Godot Asset Library to install the plugin directly from the Godot Editor. 30 | - Get the latest release from the [Releases](https://github.com/ThePat02/SplashScreenWizard/releases) page and add the contents of the `addons` directory to your project. 31 | - Clone the repository using `git clone`. 32 | - Install it as git submodule using the `submodule` branch! 33 | 34 | 35 | ## Usage 36 | > [!TIP] 37 | > Each node and resource is documented using the Godot Engine's built-in documentation system. You can access the documentation by pressing `F1` or hovering over properties in the editor. 38 | 39 |

40 | Screenshot of the SceneTree 41 | Screenshot of the Inspector 42 |

43 | 44 | The plugin provides the ![IconSplashScreen](addons/splash_screen_wizard/icons/SplashScreen.svg) `SplashScreen` and ![IconSplashScreenSlide](addons/splash_screen_wizard/icons/SplashScreenSlide.svg) `SplashScreenSlide` nodes. The `SplashScreen` node is the root node of the splash screen and the `SplashScreenSlide` nodes are the slides that are shown on the splash screen in order. You can add as many slides as you want to the `SplashScreen` node and customize them to your liking. 45 | 46 | 47 | ### Quick Start 48 | 1. Enable the plugin in the Project Settings. 49 | 2. Create a new `SplashScreen` node in your scene. 50 | 3. Add `SplashScreenSlide` nodes as children of the `SplashScreen` node. 51 | - I highly recommend creating a new scene for each slide with the `SplashScreenSlide` as the root node, as it will make it easier to edit the slides. 52 | 4. Customize the Slide nodes to your liking. 53 | - Set transitions (FadeIn, FadeOut, etc.) using the `transition_in` and `transition_out` properties. This plugin comes built-in with `SlideTransitionFade`, but you can create your own by inheriting from `SlideTransition`. 54 | - If there is no custom logic required, setting `continue_after_duration` to `true` will automatically continue to the next slide after the `duration` has passed. 55 | - If you want to add custom logic (e.g. animations, confirmation prompts, etc.), set `continue_after_duration` to `false` and extend the `SplashScreenSlide` script. 56 | 5. Run the scene and enjoy your custom splash screen. 57 | - If `autorun` is disabled, you can call `start()` on the `SplashScreen` node to start the splash screen manually. 58 | 59 | 60 | > [!IMPORTANT] 61 | > Make sure to set the correct `Anchor Presets` for the `SplashScreen` and `SplashScreenSlide` nodes, as they still function as regular `Control` nodes. You can do this by selecting the node and clicking the green circle with the white cross in your toolbar. Most of the time you will want to set the `Anchor Presets` to `Full Rect`. 62 | 63 | 64 | ### Advanced Usage 65 | As mentioned above, all nodes, functions and resources you will ever need are documented. There also is a demo scene included that showcases some of the features of the plugin. You can find it in the `demo_splash_screen_wizard` directory. 66 | 67 | #### Creating custom logic for slides 68 | Right click on the `SplashScreenSlide` node and select `Extend Script`. This will create a new script that extends the `SplashScreenSlide` class. You can now override the `_slide() 69 | ` method and implement your own logic, like playing animations from the `AnimationPlayer` or showing a confirmation prompt. After your logic is done, emit the `slide_finished` signal to continue to the next slide. 70 | 71 | ##### Example from the demo scene 72 | ```gdscript 73 | func _slide() -> void: 74 | var animation_player = %AnimationPlayer 75 | animation_player.play("wiggle") 76 | await animation_player.animation_finished 77 | slide_finished.emit() 78 | ``` 79 | 80 | #### Creating custom transitions 81 | Create a new script that extends the `SlideTransition` class. You can now override the `_start()` method and implement your own transition logic. It is recommended to use `Tween`s for this, as they are built-in and easy to use. 82 | 83 | ##### Example from built-in Fade Transition 84 | ```gdscript 85 | class_name SlideTransitionFade extends SlideTransition 86 | 87 | # ... 88 | 89 | func _start(target: Node) -> void: 90 | var fade: Tween = target.get_tree().create_tween() 91 | 92 | var value_start: float 93 | var value_end: float 94 | 95 | match fade_type: 96 | FadeType.FADE_IN: 97 | value_start = 0 98 | value_end = 1 99 | FadeType.FADE_OUT: 100 | value_start = 1 101 | value_end = 0 102 | 103 | 104 | target.modulate.a = value_start 105 | target.show() 106 | fade.tween_property(target, "modulate:a", value_end, duration).set_trans(transition_type) 107 | 108 | await fade.finished 109 | ``` 110 | 111 | 112 | ## Contributing 113 | Feel free to open a pull request or an issue if you have any suggestions or found a bug. 114 | 115 | 116 | ## License 117 | This project is licensed under the [MIT License](LICENSE.md). 118 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/editor_ui.gd: -------------------------------------------------------------------------------- 1 | extends EditorInspectorPlugin 2 | 3 | 4 | var icon_add_slide = load("res://addons/splash_screen_wizard/icons/IconAddSlide.svg") 5 | 6 | 7 | func _can_handle(object): 8 | if object is SplashScreen: 9 | return true 10 | else: 11 | return false 12 | 13 | 14 | func _parse_category(object, category): 15 | if category == "splash_screen.gd": 16 | _create_button_new_slide(object) 17 | 18 | 19 | func _create_button_new_slide(object): 20 | var button_add_slide = Button.new() 21 | button_add_slide.text = "Add new Slide" 22 | 23 | button_add_slide.icon = icon_add_slide 24 | button_add_slide.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER 25 | button_add_slide.vertical_icon_alignment = VERTICAL_ALIGNMENT_TOP 26 | button_add_slide.expand_icon = true 27 | 28 | button_add_slide.connect("pressed", _on_button_add_slide_pressed.bind(object)) 29 | 30 | add_custom_control(button_add_slide) 31 | 32 | 33 | func _on_button_add_slide_pressed(object: SplashScreen): 34 | var new_slide = SplashScreenSlide.new() 35 | new_slide.name = "NewSlide" 36 | new_slide.visible = true 37 | 38 | object.add_child(new_slide) 39 | new_slide.set_owner(object.get_tree().edited_scene_root) 40 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/IconAddSlide.svg: -------------------------------------------------------------------------------- 1 | 2 | 44 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/IconAddSlide.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dtony0p2hpa3c" 6 | path="res://.godot/imported/IconAddSlide.svg-08d08033bed1e3ea38de2069fe075a48.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/splash_screen_wizard/icons/IconAddSlide.svg" 15 | dest_files=["res://.godot/imported/IconAddSlide.svg-08d08033bed1e3ea38de2069fe075a48.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=2.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/ProjectIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/SplashScreenWizard/071d7a9ff8df1645ec3846ccbc47b5e9d60a05b1/addons/splash_screen_wizard/icons/ProjectIcon.png -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/ProjectIcon.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cv58y8digwm6j" 6 | path="res://.godot/imported/ProjectIcon.png-a5a8b2f85cc567504f01b3e018547e19.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://addons/splash_screen_wizard/icons/ProjectIcon.png" 14 | dest_files=["res://.godot/imported/ProjectIcon.png-a5a8b2f85cc567504f01b3e018547e19.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/ProjectIcon.svg: -------------------------------------------------------------------------------- 1 | 2 | 62 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/ProjectIcon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://8jx3bua8ov0c" 6 | path="res://.godot/imported/ProjectIcon.svg-419cb0238c4af36f38cc5f072b0fa444.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/splash_screen_wizard/icons/ProjectIcon.svg" 15 | dest_files=["res://.godot/imported/ProjectIcon.svg-419cb0238c4af36f38cc5f072b0fa444.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SlideTransition.svg: -------------------------------------------------------------------------------- 1 | 2 | 47 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SlideTransition.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dxgmwcx5l0b3a" 6 | path="res://.godot/imported/SlideTransition.svg-a6d989bb23e5710e9ee4f5028172d946.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/splash_screen_wizard/icons/SlideTransition.svg" 15 | dest_files=["res://.godot/imported/SlideTransition.svg-a6d989bb23e5710e9ee4f5028172d946.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SlideTransitionFade.svg: -------------------------------------------------------------------------------- 1 | 2 | 37 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SlideTransitionFade.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://qtmotfbh0qms" 6 | path="res://.godot/imported/SlideTransitionFade.svg-8a952951ab04cec155b15d21c3e6335c.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/splash_screen_wizard/icons/SlideTransitionFade.svg" 15 | dest_files=["res://.godot/imported/SlideTransitionFade.svg-8a952951ab04cec155b15d21c3e6335c.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SplashScreen.svg: -------------------------------------------------------------------------------- 1 | 2 | 47 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SplashScreen.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bqu1xmvrngcwd" 6 | path="res://.godot/imported/SplashScreen.svg-404d1dc458fe8570ffe08dcf4d04792b.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/splash_screen_wizard/icons/SplashScreen.svg" 15 | dest_files=["res://.godot/imported/SplashScreen.svg-404d1dc458fe8570ffe08dcf4d04792b.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SplashScreenSlide.svg: -------------------------------------------------------------------------------- 1 | 2 | 47 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/icons/SplashScreenSlide.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://ctmtdgq7xb7nv" 6 | path="res://.godot/imported/SplashScreenSlide.svg-19af43d86edb340dce29525d9d66e430.ctex" 7 | metadata={ 8 | "has_editor_variant": true, 9 | "vram_texture": false 10 | } 11 | 12 | [deps] 13 | 14 | source_file="res://addons/splash_screen_wizard/icons/SplashScreenSlide.svg" 15 | dest_files=["res://.godot/imported/SplashScreenSlide.svg-19af43d86edb340dce29525d9d66e430.ctex"] 16 | 17 | [params] 18 | 19 | compress/mode=0 20 | compress/high_quality=false 21 | compress/lossy_quality=0.7 22 | compress/hdr_compression=1 23 | compress/normal_map=0 24 | compress/channel_pack=0 25 | mipmaps/generate=false 26 | mipmaps/limit=-1 27 | roughness/mode=0 28 | roughness/src_normal="" 29 | process/fix_alpha_border=true 30 | process/premult_alpha=false 31 | process/normal_map_invert_y=false 32 | process/hdr_as_srgb=false 33 | process/hdr_clamp_exposure=false 34 | process/size_limit=0 35 | detect_3d/compress_to=1 36 | svg/scale=1.0 37 | editor/scale_with_editor_scale=true 38 | editor/convert_colors_with_editor_theme=false 39 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/plugin.cfg: -------------------------------------------------------------------------------- 1 | [plugin] 2 | 3 | name="SplashScreenWizard" 4 | description="A simple plugin for the Godot Game Engine that allows you to create a custom splash screen for your game." 5 | author="Pat" 6 | version="1.2" 7 | script="splash_screen_wizard.gd" 8 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/slide_transition.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/splash_screen_wizard/icons/SlideTransition.svg") 2 | class_name SlideTransition extends Resource 3 | ## Base class for all transitions used by [SplashScreenSlide]s. 4 | ## 5 | ## Transitions can be slotted into [member SplashScreenSlide.transition_in] and [member SplashScreenSlide.transition_out] to control how the slide appears 6 | ## and disappears respectively. 7 | ## [br][br] 8 | ## To create a custom transition, inherit from this class and override the [method _start] method. It is recommended to use 9 | ## a [Tween] to animate the transition. Take a look at the code of the [SlideTransitionFade] class for an example. 10 | ## 11 | ## @tutorial(Creating custom transitions): https://github.com/ThePat02/SplashScreenWizard?tab=readme-ov-file#creating-custom-transitions 12 | 13 | 14 | ## Override this method to implement the transition logic. For example: [SlideTransitionFade] 15 | func _start(target: Node) -> void: 16 | pass 17 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/splash_screen.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/splash_screen_wizard/icons/SplashScreen.svg") 2 | class_name SplashScreen extends Control 3 | ## A splash screen, which can be used to display several [SplashScreenSlide]s in a sequence. 4 | ## 5 | ## This is the main node of the `SplashScreenWizard` plugin and should be used as the root node of your splash screen. 6 | ## Add [SplashScreenSlide] nodes as children to display them in a sequence. The slides will hide automatically when running, so you don't have to hide them manually in the editor. 7 | ## Other nodes (e.g. a background or a logo) can be added as children as well, 8 | ## but they will not be affected by the splash screen and will be displayed at the same time as the slides. 9 | ## 10 | ## @tutorial(QuickStart Guide): https://github.com/ThePat02/SplashScreenWizard?tab=readme-ov-file#quick-start 11 | 12 | 13 | ## Emitted when a new slide is started. 14 | signal next_slide_started(slide: SplashScreenSlide) 15 | ## Emitted when a slide is finished. 16 | signal slide_finished(slide: SplashScreenSlide) 17 | ## Emitted when all slides are finished and the cleanup is done. 18 | signal finished 19 | 20 | 21 | ## If `true`, the splash screen will start automatically when it is ready. If `false`, you have to call [method start] manually. 22 | @export var auto_start: bool = true 23 | ## The delay between the slides in seconds. 24 | @export var delay_between_slides: float = 1.0 25 | ## The input action that can be used to skip a [SplashScreenSlide], if [member SplashScreenSlide.skippable] is `true`. 26 | @export var skip_input_action: StringName 27 | ## If `true`, the splash screen will be deleted after it is finished using [method Node.queue_free]. 28 | @export var delete_after_finished: bool = true 29 | 30 | 31 | ## A list of all slides in the splash screen. This is automatically updated when the splash screen is started. 32 | var slides: Array[SplashScreenSlide] = [] 33 | ## The current slide that is being displayed. 34 | var current_slide: SplashScreenSlide 35 | 36 | 37 | var _delay_timer: Timer 38 | 39 | 40 | func _ready() -> void: 41 | if not InputMap.has_action(skip_input_action): 42 | push_warning("SplashScreen: The input action \"" + skip_input_action + "\" does not exist in the Input Map.") 43 | 44 | if auto_start: 45 | start() 46 | 47 | 48 | func _input(event): 49 | if not current_slide: 50 | return 51 | 52 | if skip_input_action == "": 53 | return 54 | 55 | if event.is_action_pressed(skip_input_action): 56 | _skip_slide() 57 | 58 | 59 | ## Starts the splash screen. This will update the slides, start them and clean up afterwards. Called automatically if [member auto_start] is `true`. 60 | func start() -> void: 61 | _configure_timer() 62 | _update_slides() 63 | await _start_slides() 64 | _cleanup() 65 | finished.emit() 66 | 67 | 68 | func _configure_timer() -> void: 69 | _delay_timer = Timer.new() 70 | _delay_timer.one_shot = true 71 | add_child(_delay_timer) 72 | 73 | 74 | func _update_slides() -> void: 75 | slides.clear() 76 | 77 | for child in get_children(): 78 | if child is SplashScreenSlide: 79 | slides.append(child) 80 | 81 | if slides.size() == 0: 82 | push_warning("SplashScreen: No slides found. Add some SplashScreenSlide nodes as children to display them in a sequence.") 83 | 84 | 85 | func _start_slides() -> void: 86 | for slide: SplashScreenSlide in slides: 87 | current_slide = slide 88 | next_slide_started.emit(slide) 89 | 90 | current_slide._start() 91 | 92 | await current_slide.finished 93 | 94 | _delay_timer.start(delay_between_slides) 95 | await _delay_timer.timeout 96 | 97 | slide_finished.emit(current_slide) 98 | 99 | 100 | func _cleanup() -> void: 101 | _delay_timer.queue_free() 102 | if delete_after_finished: 103 | queue_free() 104 | 105 | 106 | func _skip_slide() -> void: 107 | if current_slide: 108 | current_slide._skip() 109 | _delay_timer.stop() 110 | _delay_timer.emit_signal("timeout") 111 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/splash_screen_slide.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/splash_screen_wizard/icons/SplashScreenSlide.svg") 2 | class_name SplashScreenSlide extends Control 3 | ## A slide in the used and displayed in the [SplashScreen]. 4 | ## 5 | ## Slides are used to display the splash screen's content. They can be used to display a logo, a loading screen, or any other content that should be displayed before the game starts. 6 | ## Using [SlideTransition]s, it is possible to animate the slide's entrance and exit. 7 | ## [br][br] 8 | ## When implementing custom logic for a slide, extend this class, override the [method _slide] method and emit the [signal slide_finished] 9 | ## when the slide is ready for the [member transition_out]. 10 | ## This can be used to trigger animations, load resources, or perform any other logic that should be executed before the slide is finished. 11 | ## 12 | ## @tutorial(Creating custom logic for slides): https://github.com/ThePat02/SplashScreenWizard?tab=readme-ov-file#creating-custom-logic-for-slides 13 | 14 | 15 | ## Emitted when [method _slide] is finished and the slide is ready for the [member transition_out]. 16 | signal slide_finished 17 | ## Emitted when the slide is finished and the [SplashScreen] can continue with the next slide. 18 | signal finished 19 | 20 | 21 | ## The transition used to animate the slide's entrance. 22 | @export var transition_in: SlideTransition 23 | ## The transition used to animate the slide's exit. 24 | @export var transition_out: SlideTransition 25 | ## If true, the slide will automatically continue after the [member duration] has passed, without waiting for [signal slide_finished]. 26 | @export var continue_after_duration: bool = true 27 | ## The duration of the slide in seconds. 28 | @export var duration: float = 1.0 29 | ## If true, the slide can be skipped by pressing the keys defined by the [member SplashScreen.skip_input_action] 30 | @export var skippable: bool = false 31 | 32 | 33 | func _init() -> void: 34 | hide() 35 | 36 | 37 | func _start() -> void: 38 | if transition_in: 39 | await transition_in._start(self) 40 | else: 41 | show() 42 | 43 | _slide() 44 | 45 | if continue_after_duration: 46 | await get_tree().create_timer(duration).timeout 47 | else: 48 | await slide_finished 49 | 50 | if transition_out: 51 | transition_out._start(self) 52 | else: 53 | hide() 54 | 55 | emit_signal("finished") 56 | 57 | 58 | func _skip() -> void: 59 | if skippable: 60 | hide() 61 | process_mode = PROCESS_MODE_DISABLED 62 | emit_signal("finished") 63 | 64 | 65 | ## Override this method to implement the slide's logic and emit [signal slide_finished] when the slide is ready for the [member transition_out]. 66 | func _slide() -> void: 67 | pass 68 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/splash_screen_wizard.gd: -------------------------------------------------------------------------------- 1 | @tool 2 | extends EditorPlugin 3 | 4 | 5 | var EditorUI = preload("res://addons/splash_screen_wizard/editor_ui.gd") 6 | 7 | 8 | var _inspector_plugin_editor_ui 9 | 10 | 11 | func _enter_tree(): 12 | _inspector_plugin_editor_ui = EditorUI.new() 13 | add_inspector_plugin(_inspector_plugin_editor_ui) 14 | 15 | 16 | func _exit_tree(): 17 | remove_inspector_plugin(_inspector_plugin_editor_ui) 18 | -------------------------------------------------------------------------------- /addons/splash_screen_wizard/transitions/slide_transition_fade.gd: -------------------------------------------------------------------------------- 1 | @icon("res://addons/splash_screen_wizard/icons/SlideTransitionFade.svg") 2 | class_name SlideTransitionFade extends SlideTransition 3 | ## Transition that fades in or out a [SplashScreenSlide]. 4 | 5 | 6 | ## The different types of fade. 7 | enum FadeType 8 | { 9 | ## Start with 0 and go to 1. 10 | FADE_IN, 11 | ## Start with 1 and go to 0. 12 | FADE_OUT, 13 | } 14 | 15 | 16 | ## The type of fade to perform. 17 | @export var fade_type: FadeType = FadeType.FADE_IN 18 | ## The duration of the fade. 19 | @export var duration: float = 0.5 20 | ## The type of transition to use. 21 | @export var transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR 22 | 23 | 24 | func _start(target: Node) -> void: 25 | var fade: Tween = target.get_tree().create_tween() 26 | 27 | var value_start: float 28 | var value_end: float 29 | 30 | match fade_type: 31 | FadeType.FADE_IN: 32 | value_start = 0 33 | value_end = 1 34 | FadeType.FADE_OUT: 35 | value_start = 1 36 | value_end = 0 37 | 38 | 39 | target.modulate.a = value_start 40 | target.show() 41 | fade.tween_property(target, "modulate:a", value_end, duration).set_trans(transition_type) 42 | 43 | await fade.finished 44 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/assets/eye_lid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/SplashScreenWizard/071d7a9ff8df1645ec3846ccbc47b5e9d60a05b1/demo_splash_screen_wizard/assets/eye_lid.png -------------------------------------------------------------------------------- /demo_splash_screen_wizard/assets/eye_lid.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dy3yr35alab4u" 6 | path="res://.godot/imported/eye_lid.png-f9c65f587d6f325e1e7bb49019f569e9.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://demo_splash_screen_wizard/assets/eye_lid.png" 14 | dest_files=["res://.godot/imported/eye_lid.png-f9c65f587d6f325e1e7bb49019f569e9.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/assets/logo_vertical_monochrome_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/assets/logo_vertical_monochrome_dark.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cnhi4do10thow" 6 | path="res://.godot/imported/logo_vertical_monochrome_dark.svg-e6519a8aaabd6ad0c2f3c12264f024c2.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://demo_splash_screen_wizard/assets/logo_vertical_monochrome_dark.svg" 14 | dest_files=["res://.godot/imported/logo_vertical_monochrome_dark.svg-e6519a8aaabd6ad0c2f3c12264f024c2.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/demo_splash_screen_wizard.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://bo22hma5o31ig"] 2 | 3 | [ext_resource type="Script" path="res://addons/splash_screen_wizard/splash_screen.gd" id="1_myy6d"] 4 | [ext_resource type="PackedScene" uid="uid://ckqiyl367tw67" path="res://demo_splash_screen_wizard/slides/slide_disclaimer.tscn" id="2_flgjm"] 5 | [ext_resource type="PackedScene" uid="uid://cxqpgg8ax8bqv" path="res://demo_splash_screen_wizard/slides/slide_godot.tscn" id="3_phgod"] 6 | 7 | [sub_resource type="LabelSettings" id="LabelSettings_8xhda"] 8 | font_size = 56 9 | 10 | [node name="DemoSplashScreenWizard" type="Control"] 11 | layout_mode = 3 12 | anchors_preset = 15 13 | anchor_right = 1.0 14 | anchor_bottom = 1.0 15 | grow_horizontal = 2 16 | grow_vertical = 2 17 | 18 | [node name="MainMenu" type="Control" parent="."] 19 | layout_mode = 1 20 | anchors_preset = 15 21 | anchor_right = 1.0 22 | anchor_bottom = 1.0 23 | grow_horizontal = 2 24 | grow_vertical = 2 25 | 26 | [node name="CenterContainer" type="CenterContainer" parent="MainMenu"] 27 | layout_mode = 1 28 | anchors_preset = 15 29 | anchor_right = 1.0 30 | anchor_bottom = 1.0 31 | grow_horizontal = 2 32 | grow_vertical = 2 33 | 34 | [node name="VBoxContainer" type="VBoxContainer" parent="MainMenu/CenterContainer"] 35 | layout_mode = 2 36 | 37 | [node name="Label" type="Label" parent="MainMenu/CenterContainer/VBoxContainer"] 38 | custom_minimum_size = Vector2(1000, 0) 39 | layout_mode = 2 40 | text = "Multiplayer MMO Battle Royale Survival Open World Game" 41 | label_settings = SubResource("LabelSettings_8xhda") 42 | horizontal_alignment = 1 43 | autowrap_mode = 2 44 | 45 | [node name="Button" type="Button" parent="MainMenu/CenterContainer/VBoxContainer"] 46 | layout_mode = 2 47 | text = "New Game" 48 | 49 | [node name="Button2" type="Button" parent="MainMenu/CenterContainer/VBoxContainer"] 50 | layout_mode = 2 51 | text = "Old Game" 52 | 53 | [node name="Button3" type="Button" parent="MainMenu/CenterContainer/VBoxContainer"] 54 | layout_mode = 2 55 | text = "This button doesn't work" 56 | 57 | [node name="SplashScreen" type="Control" parent="."] 58 | layout_mode = 1 59 | anchors_preset = 15 60 | anchor_right = 1.0 61 | anchor_bottom = 1.0 62 | grow_horizontal = 2 63 | grow_vertical = 2 64 | script = ExtResource("1_myy6d") 65 | delay_between_slides = 0.5 66 | skip_input_action = &"ui_accept" 67 | 68 | [node name="Background" type="ColorRect" parent="SplashScreen"] 69 | layout_mode = 1 70 | anchors_preset = 15 71 | anchor_right = 1.0 72 | anchor_bottom = 1.0 73 | grow_horizontal = 2 74 | grow_vertical = 2 75 | color = Color(0, 0, 0, 1) 76 | 77 | [node name="SlideDisclaimer" parent="SplashScreen" instance=ExtResource("2_flgjm")] 78 | layout_mode = 1 79 | duration = 3.0 80 | 81 | [node name="SlideGodot" parent="SplashScreen" instance=ExtResource("3_phgod")] 82 | layout_mode = 1 83 | skippable = true 84 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/slides/slide_disclaimer.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=5 format=3 uid="uid://ckqiyl367tw67"] 2 | 3 | [ext_resource type="Script" path="res://addons/splash_screen_wizard/splash_screen_slide.gd" id="1_5xj3q"] 4 | [ext_resource type="Resource" uid="uid://dphiwpkixnobm" path="res://demo_splash_screen_wizard/transitions/fade_in.tres" id="2_074l1"] 5 | [ext_resource type="Resource" uid="uid://bt2wxjwarvrol" path="res://demo_splash_screen_wizard/transitions/fade_out.tres" id="3_m5f48"] 6 | 7 | [sub_resource type="LabelSettings" id="LabelSettings_45uur"] 8 | font_size = 40 9 | 10 | [node name="SlideDisclaimer" type="Control"] 11 | layout_mode = 3 12 | anchors_preset = 15 13 | anchor_right = 1.0 14 | anchor_bottom = 1.0 15 | grow_horizontal = 2 16 | grow_vertical = 2 17 | script = ExtResource("1_5xj3q") 18 | transition_in = ExtResource("2_074l1") 19 | transition_out = ExtResource("3_m5f48") 20 | 21 | [node name="MarginContainer" type="MarginContainer" parent="."] 22 | layout_mode = 1 23 | anchors_preset = 15 24 | anchor_right = 1.0 25 | anchor_bottom = 1.0 26 | grow_horizontal = 2 27 | grow_vertical = 2 28 | theme_override_constants/margin_left = 40 29 | theme_override_constants/margin_top = 40 30 | theme_override_constants/margin_right = 40 31 | theme_override_constants/margin_bottom = 40 32 | 33 | [node name="Label" type="Label" parent="MarginContainer"] 34 | custom_minimum_size = Vector2(1, 1) 35 | layout_mode = 2 36 | text = "All characters and events in this demo, even those based on real people, are entirely fictional. All celebrity voices are impersonated, poorly. The following plugin contains coarse language and due to its content it should not be viewed by anyone." 37 | label_settings = SubResource("LabelSettings_45uur") 38 | horizontal_alignment = 1 39 | vertical_alignment = 1 40 | autowrap_mode = 2 41 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/slides/slide_godot.gd: -------------------------------------------------------------------------------- 1 | extends SplashScreenSlide 2 | 3 | 4 | func _slide() -> void: 5 | var animation_player = %AnimationPlayer 6 | animation_player.play("wiggle") 7 | await animation_player.animation_finished 8 | slide_finished.emit() -------------------------------------------------------------------------------- /demo_splash_screen_wizard/slides/slide_godot.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=8 format=3 uid="uid://cxqpgg8ax8bqv"] 2 | 3 | [ext_resource type="Script" path="res://demo_splash_screen_wizard/slides/slide_godot.gd" id="1_uihei"] 4 | [ext_resource type="Texture2D" uid="uid://cnhi4do10thow" path="res://demo_splash_screen_wizard/assets/logo_vertical_monochrome_dark.svg" id="2_0b4hu"] 5 | [ext_resource type="Resource" uid="uid://dphiwpkixnobm" path="res://demo_splash_screen_wizard/transitions/fade_in.tres" id="2_2cxhs"] 6 | [ext_resource type="Resource" uid="uid://bt2wxjwarvrol" path="res://demo_splash_screen_wizard/transitions/fade_out.tres" id="3_g0x0d"] 7 | 8 | [sub_resource type="Animation" id="Animation_yhrdi"] 9 | length = 0.001 10 | tracks/0/type = "value" 11 | tracks/0/imported = false 12 | tracks/0/enabled = true 13 | tracks/0/path = NodePath("Godot:scale") 14 | tracks/0/interp = 1 15 | tracks/0/loop_wrap = true 16 | tracks/0/keys = { 17 | "times": PackedFloat32Array(0), 18 | "transitions": PackedFloat32Array(1), 19 | "update": 0, 20 | "values": [Vector2(0.77, 0.77)] 21 | } 22 | tracks/1/type = "value" 23 | tracks/1/imported = false 24 | tracks/1/enabled = true 25 | tracks/1/path = NodePath("Godot:rotation") 26 | tracks/1/interp = 1 27 | tracks/1/loop_wrap = true 28 | tracks/1/keys = { 29 | "times": PackedFloat32Array(0), 30 | "transitions": PackedFloat32Array(1), 31 | "update": 0, 32 | "values": [0.0] 33 | } 34 | 35 | [sub_resource type="Animation" id="Animation_844dv"] 36 | resource_name = "wiggle" 37 | length = 2.0 38 | tracks/0/type = "value" 39 | tracks/0/imported = false 40 | tracks/0/enabled = true 41 | tracks/0/path = NodePath("Godot:scale") 42 | tracks/0/interp = 2 43 | tracks/0/loop_wrap = true 44 | tracks/0/keys = { 45 | "times": PackedFloat32Array(0, 0.5, 0.9), 46 | "transitions": PackedFloat32Array(1, 1, 1), 47 | "update": 0, 48 | "values": [Vector2(0.77, 0.77), Vector2(0.96, 0.96), Vector2(0.77, 0.77)] 49 | } 50 | tracks/1/type = "value" 51 | tracks/1/imported = false 52 | tracks/1/enabled = true 53 | tracks/1/path = NodePath("Godot:rotation") 54 | tracks/1/interp = 2 55 | tracks/1/loop_wrap = true 56 | tracks/1/keys = { 57 | "times": PackedFloat32Array(0, 0.3, 0.6, 0.9), 58 | "transitions": PackedFloat32Array(1, 1, 1, 1), 59 | "update": 0, 60 | "values": [0.0, -0.113446, 0.0558505, 0.0] 61 | } 62 | 63 | [sub_resource type="AnimationLibrary" id="AnimationLibrary_v3h1w"] 64 | _data = { 65 | "RESET": SubResource("Animation_yhrdi"), 66 | "wiggle": SubResource("Animation_844dv") 67 | } 68 | 69 | [node name="SlideGodot" type="Control"] 70 | layout_mode = 3 71 | anchors_preset = 15 72 | anchor_right = 1.0 73 | anchor_bottom = 1.0 74 | grow_horizontal = 2 75 | grow_vertical = 2 76 | script = ExtResource("1_uihei") 77 | transition_in = ExtResource("2_2cxhs") 78 | transition_out = ExtResource("3_g0x0d") 79 | continue_after_duration = false 80 | 81 | [node name="AnimationPlayer" type="AnimationPlayer" parent="."] 82 | unique_name_in_owner = true 83 | libraries = { 84 | "": SubResource("AnimationLibrary_v3h1w") 85 | } 86 | 87 | [node name="Godot" type="Sprite2D" parent="."] 88 | position = Vector2(576, 324) 89 | scale = Vector2(0.77, 0.77) 90 | texture = ExtResource("2_0b4hu") 91 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/transitions/fade_in.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="SlideTransitionFade" load_steps=2 format=3 uid="uid://dphiwpkixnobm"] 2 | 3 | [ext_resource type="Script" path="res://addons/splash_screen_wizard/transitions/slide_transition_fade.gd" id="1_pxv0o"] 4 | 5 | [resource] 6 | script = ExtResource("1_pxv0o") 7 | fade_type = 0 8 | duration = 2.0 9 | transition_type = 0 10 | -------------------------------------------------------------------------------- /demo_splash_screen_wizard/transitions/fade_out.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Resource" script_class="SlideTransitionFade" load_steps=2 format=3 uid="uid://bt2wxjwarvrol"] 2 | 3 | [ext_resource type="Script" path="res://addons/splash_screen_wizard/transitions/slide_transition_fade.gd" id="1_p0y3g"] 4 | 5 | [resource] 6 | script = ExtResource("1_p0y3g") 7 | fade_type = 1 8 | duration = 0.5 9 | transition_type = 0 10 | -------------------------------------------------------------------------------- /icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://w8v2n4up85t3" 6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | svg/scale=1.0 36 | editor/scale_with_editor_scale=false 37 | editor/convert_colors_with_editor_theme=false 38 | -------------------------------------------------------------------------------- /images/screenshot_inspector.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/SplashScreenWizard/071d7a9ff8df1645ec3846ccbc47b5e9d60a05b1/images/screenshot_inspector.png -------------------------------------------------------------------------------- /images/screenshot_inspector.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://dfanfifa56xbe" 6 | path="res://.godot/imported/screenshot_inspector.png-c180e23fbdb74689c26e9e0e98ac4831.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://images/screenshot_inspector.png" 14 | dest_files=["res://.godot/imported/screenshot_inspector.png-c180e23fbdb74689c26e9e0e98ac4831.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /images/screenshot_tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePat02/SplashScreenWizard/071d7a9ff8df1645ec3846ccbc47b5e9d60a05b1/images/screenshot_tree.png -------------------------------------------------------------------------------- /images/screenshot_tree.png.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://b1dkpkhjk4act" 6 | path="res://.godot/imported/screenshot_tree.png-d95dc4fc1fd9c7abebd056ad5205314a.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://images/screenshot_tree.png" 14 | dest_files=["res://.godot/imported/screenshot_tree.png-d95dc4fc1fd9c7abebd056ad5205314a.ctex"] 15 | 16 | [params] 17 | 18 | compress/mode=0 19 | compress/high_quality=false 20 | compress/lossy_quality=0.7 21 | compress/hdr_compression=1 22 | compress/normal_map=0 23 | compress/channel_pack=0 24 | mipmaps/generate=false 25 | mipmaps/limit=-1 26 | roughness/mode=0 27 | roughness/src_normal="" 28 | process/fix_alpha_border=true 29 | process/premult_alpha=false 30 | process/normal_map_invert_y=false 31 | process/hdr_as_srgb=false 32 | process/hdr_clamp_exposure=false 33 | process/size_limit=0 34 | detect_3d/compress_to=1 35 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=5 10 | 11 | [application] 12 | 13 | config/name="SplashScreenWizard" 14 | config/description="A simple plugin for the Godot Game Engine that allows you to create a custom splash screen for your game." 15 | run/main_scene="res://demo_splash_screen_wizard/demo_splash_screen_wizard.tscn" 16 | config/features=PackedStringArray("4.3", "Forward Plus") 17 | config/icon="res://addons/splash_screen_wizard/icons/ProjectIcon.png" 18 | 19 | [editor_plugins] 20 | 21 | enabled=PackedStringArray("res://addons/splash_screen_wizard/plugin.cfg") 22 | 23 | [filesystem] 24 | 25 | import/blender/enabled=false 26 | --------------------------------------------------------------------------------