├── .gitattributes ├── .github ├── FUNDING.yml ├── banner.svg ├── example.png ├── godot-badge-color.svg ├── godot-badge-dark.svg ├── godot-badge-light.svg └── workflows │ └── godot-ci.yml ├── .gitignore ├── .gitmodules ├── COPYING ├── README.md ├── addons ├── icon_texture ├── nine_patch_sprite_2d ├── range_container ├── remote_container ├── resource_overrider └── state_machine_nodes ├── examples ├── icon_texture ├── nine_patch_sprite_2d ├── range_container ├── remote_container ├── resource_overrider └── state_machine_nodes ├── export_presets.cfg ├── main ├── examples.gd ├── examples.gd.uid ├── gallery.gd ├── gallery.gd.uid ├── gallery.tscn ├── icon.svg ├── icon.svg.import ├── logo.svg ├── logo.svg.import ├── menu.svg ├── menu.svg.import ├── opacity.svg └── opacity.svg.import └── project.godot /.gitattributes: -------------------------------------------------------------------------------- 1 | # Normalize EOL for all files that Git considers text files. 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | ko_fi: ninstar 2 | -------------------------------------------------------------------------------- /.github/banner.svg: -------------------------------------------------------------------------------- 1 | 2 | © 2024 NinStar 3 | -------------------------------------------------------------------------------- /.github/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ninstar/gdProject/5ea99ecfcf26f6c1277303f91c1fef83dc88b573/.github/example.png -------------------------------------------------------------------------------- /.github/godot-badge-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.github/godot-badge-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.github/godot-badge-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.github/workflows/godot-ci.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Deploy exported project to GitHub Pages 3 | 4 | on: 5 | push: 6 | branches: 7 | - main 8 | 9 | env: 10 | GODOT_VERSION: 4.3 11 | EXPORT_NAME: gdProject 12 | PROJECT_PATH: . 13 | 14 | jobs: 15 | export-web: 16 | name: Web Export 17 | runs-on: ubuntu-20.04 18 | container: 19 | image: barichello/godot-ci:4.3 20 | steps: 21 | - name: Checkout 22 | uses: actions/checkout@v4 23 | with: 24 | lfs: true 25 | - name: Setup 26 | run: | 27 | mkdir -v -p ~/.local/share/godot/export_templates/ 28 | mv /root/.local/share/godot/export_templates/${GODOT_VERSION}.stable ~/.local/share/godot/export_templates/${GODOT_VERSION}.stable 29 | - name: Web Build 30 | run: | 31 | mkdir -v -p build/web 32 | EXPORT_DIR="$(readlink -f build)" 33 | cd $PROJECT_PATH 34 | godot --headless --verbose --export-release "Web" "$EXPORT_DIR/web/index.html" 35 | - name: Upload Artifact 36 | uses: actions/upload-artifact@v4 37 | with: 38 | name: web 39 | path: build/web 40 | - name: Install rsync 📚 41 | run: | 42 | apt-get update && apt-get install -y rsync 43 | - name: Deploy to GitHub Pages 🚀 44 | uses: JamesIves/github-pages-deploy-action@releases/v4 45 | with: 46 | branch: gh-pages # The branch the action should deploy to. 47 | folder: build/web # The folder the action should deploy. 48 | single-commit: true 49 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gdProject specific ignores 2 | debug/ 3 | 4 | # Godot 4+ specific ignores 5 | .godot/ 6 | 7 | # Godot-specific ignores 8 | .import/ 9 | export.cfg 10 | #export_presets.cfg 11 | 12 | # Imported translations (automatically generated from CSV files) 13 | *.translation 14 | 15 | # Mono-specific ignores 16 | .mono/ 17 | data_*/ 18 | mono_crash.*.json 19 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule ".submodules/range_container"] 2 | path = .submodules/range_container 3 | url = https://github.com/ninstar/Godot-RangeContainer 4 | [submodule ".submodules/remote_container"] 5 | path = .submodules/remote_container 6 | url = https://github.com/ninstar/Godot-RemoteContainer 7 | [submodule ".submodules/resource_overrider"] 8 | path = .submodules/resource_overrider 9 | url = https://github.com/ninstar/Godot-ResourceOverrider 10 | [submodule ".submodules/nine_patch_sprite_2d"] 11 | path = .submodules/nine_patch_sprite_2d 12 | url = https://github.com/ninstar/Godot-NinePatchSprite2D 13 | [submodule ".submodules/state_machine_nodes"] 14 | path = .submodules/state_machine_nodes 15 | url = https://github.com/ninstar/Godot-StateMachineNodes 16 | [submodule ".submodules/icon_texture"] 17 | path = .submodules/icon_texture 18 | url = https://github.com/ninstar/Godot-IconTexture.git 19 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Ny'hrarr (NinStar) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [NinStar's gdProject][home] 2 | 3 | # Overview 4 | 5 | A collection of add-ons for the Godot Engine. 6 | 7 | ## Add-ons 8 | 9 | - **[NinePatchSprite2D](https://github.com/ninstar/Godot-NinePatchSprite2D)** - A Node2D that displays a texture by keeping its corners intact, but tiling its edges and center. 10 | - **[RangeContainer](https://github.com/ninstar/Godot-RangeContainer)** - A ScrollContainer that can be controlled by external Range nodes. 11 | - **[RemoteContainer](https://github.com/ninstar/Godot-RemoteContainer)** - RemoteContainer pushes its own transform to another Control derived node in the scene. 12 | - **[ResourceOverrider](https://github.com/ninstar/Godot-ResourceOverrider)** - A node that replaces Resources on-the-fly using suffixes. 13 | - **[IconTexture](https://github.com/ninstar/Godot-IconTexture)** - A texture that draws an icon of a Theme resource. 14 | - **[StateMachine Nodes](https://github.com/ninstar/Godot-StateMachineNodes)** - A set of Finite State Machine nodes for organizing and processing logic. 15 | 16 | > [!NOTE] 17 | > The add-ons provided in this repository as submodules are always based on their latest versions. 18 | 19 |

You can support my work by purchasing these add-ons:

20 |

Available on itch.io

21 | 22 | ## Usage 23 | 24 | 1. Clone the repository and its submodules: 25 | ```bash 26 | git clone --recurse-submodules https://github.com/ninstar/gdProject.git 27 | ``` 28 | 2. Open ``/project.godot`` in Godot and run it. 29 | 3. The ☰ menu provides a list of all available examples that you can choose from. 30 | - All examples are self contained and can be easily copied to any other project along with their respective add-ons. 31 | 32 | Example scene 33 | 34 | ## Archive 35 | 36 | > [!WARNING] 37 | > The following add-ons are unmaintained and no longer included in the project and have not been tested with newer versions of Godot. 38 | - Icon **[AudioSyncPlayer Nodes](https://github.com/ninstar/Godot-AudioSyncPlayerNodes)** ``Godot 4.2`` - A set of Audio Player nodes that can be synchronized. 39 | 40 | 41 | # Credits 42 | 43 | - **Code & Resources** - Ny'hrarr (NinStar) 44 | 45 | [home]: https://ninstars.blogspot.com/p/gdproject.html 46 | -------------------------------------------------------------------------------- /addons/icon_texture: -------------------------------------------------------------------------------- 1 | ../.submodules/icon_texture/addons/icon_texture -------------------------------------------------------------------------------- /addons/nine_patch_sprite_2d: -------------------------------------------------------------------------------- 1 | ../.submodules/nine_patch_sprite_2d/addons/nine_patch_sprite_2d -------------------------------------------------------------------------------- /addons/range_container: -------------------------------------------------------------------------------- 1 | ../.submodules/range_container/addons/range_container -------------------------------------------------------------------------------- /addons/remote_container: -------------------------------------------------------------------------------- 1 | ../.submodules/remote_container/addons/remote_container -------------------------------------------------------------------------------- /addons/resource_overrider: -------------------------------------------------------------------------------- 1 | ../.submodules/resource_overrider/addons/resource_overrider -------------------------------------------------------------------------------- /addons/state_machine_nodes: -------------------------------------------------------------------------------- 1 | ../.submodules/state_machine_nodes/addons/state_machine_nodes -------------------------------------------------------------------------------- /examples/icon_texture: -------------------------------------------------------------------------------- 1 | ../.submodules/icon_texture/examples/icon_texture -------------------------------------------------------------------------------- /examples/nine_patch_sprite_2d: -------------------------------------------------------------------------------- 1 | ../.submodules/nine_patch_sprite_2d/examples/nine_patch_sprite_2d -------------------------------------------------------------------------------- /examples/range_container: -------------------------------------------------------------------------------- 1 | ../.submodules/range_container/examples/range_container -------------------------------------------------------------------------------- /examples/remote_container: -------------------------------------------------------------------------------- 1 | ../.submodules/remote_container/examples/remote_container -------------------------------------------------------------------------------- /examples/resource_overrider: -------------------------------------------------------------------------------- 1 | ../.submodules/resource_overrider/examples/resource_overrider -------------------------------------------------------------------------------- /examples/state_machine_nodes: -------------------------------------------------------------------------------- 1 | ../.submodules/state_machine_nodes/examples/state_machine_nodes -------------------------------------------------------------------------------- /export_presets.cfg: -------------------------------------------------------------------------------- 1 | [preset.0] 2 | 3 | name="Web" 4 | platform="Web" 5 | runnable=true 6 | advanced_options=true 7 | dedicated_server=false 8 | custom_features="" 9 | export_filter="all_resources" 10 | include_filter="" 11 | exclude_filter="" 12 | export_path="" 13 | encryption_include_filters="" 14 | encryption_exclude_filters="" 15 | encrypt_pck=false 16 | encrypt_directory=false 17 | script_export_mode=2 18 | 19 | [preset.0.options] 20 | 21 | custom_template/debug="" 22 | custom_template/release="" 23 | variant/extensions_support=false 24 | variant/thread_support=false 25 | vram_texture_compression/for_desktop=true 26 | vram_texture_compression/for_mobile=false 27 | html/export_icon=true 28 | html/custom_html_shell="" 29 | html/head_include="" 30 | html/canvas_resize_policy=2 31 | html/focus_canvas_on_start=true 32 | html/experimental_virtual_keyboard=false 33 | progressive_web_app/enabled=false 34 | progressive_web_app/ensure_cross_origin_isolation_headers=true 35 | progressive_web_app/offline_page="" 36 | progressive_web_app/display=1 37 | progressive_web_app/orientation=0 38 | progressive_web_app/icon_144x144="" 39 | progressive_web_app/icon_180x180="" 40 | progressive_web_app/icon_512x512="" 41 | progressive_web_app/background_color=Color(0, 0, 0, 1) 42 | -------------------------------------------------------------------------------- /main/examples.gd: -------------------------------------------------------------------------------- 1 | extends Object 2 | 3 | 4 | func get_list() -> Array[Dictionary]: 5 | return [ 6 | { 7 | &"title": "NinePatchSprite2D", 8 | &"hint": "A Node2D that displays a texture by keeping its corners intact, but tiling its edges and center.", 9 | &"icon": "res://addons/nine_patch_sprite_2d/nine_patch_sprite_2d.svg", 10 | &"path": "res://examples/nine_patch_sprite_2d/scene.tscn", 11 | }, 12 | { 13 | &"title": "RangeContainer", 14 | &"hint": "A ScrollContainer that can be controlled by external Range nodes.", 15 | &"icon": "res://addons/range_container/range_container.svg", 16 | &"path": "res://examples/range_container/scene.tscn", 17 | }, 18 | { 19 | &"title": "RemoteContainer", 20 | &"hint": "RemoteContainer pushes its own transform to another Control derived node in the scene.", 21 | &"icon": "res://addons/remote_container/remote_container.svg", 22 | &"path": "res://examples/remote_container/scene.tscn", 23 | }, 24 | { 25 | &"title": "ResourceOverrider", 26 | &"hint": "A node that replaces Resources on-the-fly using suffixes.", 27 | &"icon": "res://addons/resource_overrider/resource_overrider.svg", 28 | &"path": "res://examples/resource_overrider/scene.tscn", 29 | }, 30 | { 31 | &"title": "IconTexture", 32 | &"hint": "A texture that draws an icon of a Theme resource.", 33 | &"icon": "res://addons/icon_texture/icon_texture.svg", 34 | &"path": "res://examples/icon_texture/scene.tscn", 35 | }, 36 | { 37 | &"title": "StateMachine Nodes", 38 | &"hint": "A set of Finite State Machine nodes for organizing and processing logic.", 39 | &"icon": "res://addons/state_machine_nodes/state_machine.svg", 40 | &"path": "res://examples/state_machine_nodes/scene.tscn", 41 | }, 42 | ] 43 | -------------------------------------------------------------------------------- /main/examples.gd.uid: -------------------------------------------------------------------------------- 1 | uid://bkwjokfvxk4mr 2 | -------------------------------------------------------------------------------- /main/gallery.gd: -------------------------------------------------------------------------------- 1 | extends Node 2 | 3 | 4 | const EXAMPLES := preload("examples.gd") 5 | 6 | 7 | @onready var background: ColorRect = $Background 8 | @onready var start: Control = $UI/Start 9 | @onready var menu: MenuButton = $UI/Header/Menu 10 | @onready var icon: TextureRect = $UI/Header/Demo/Box/Icon 11 | @onready var title: Label = $UI/Header/Demo/Box/Title 12 | @onready var hint: Panel = $UI/Header/Demo/Box/Hint 13 | @onready var transparency_button: Button = $UI/Header/Transparency 14 | 15 | var current_demo: Node 16 | var opacity_tween: Tween 17 | 18 | 19 | func _ready() -> void: 20 | var popup: PopupMenu = menu.get_popup() 21 | popup.index_pressed.connect(_on_menu_index_pressed) 22 | var examples := EXAMPLES.new() 23 | var index: int = 0 24 | for dict: Dictionary in examples.get_list(): 25 | popup.add_icon_item(load(dict.get(&"icon", null)), dict.get(&"title", ""), index) 26 | popup.set_item_metadata(index, dict.get(&"path", "")) 27 | popup.set_item_tooltip(index, dict.get(&"hint", "")) 28 | index += 1 29 | 30 | transparency_button.visible = not OS.has_feature("web") 31 | 32 | 33 | func _on_menu_index_pressed(index: int) -> void: 34 | if is_instance_valid(current_demo): 35 | var queued := current_demo 36 | queued.queue_free() 37 | 38 | var popup: PopupMenu = menu.get_popup() 39 | var path: String = popup.get_item_metadata(index) 40 | if not path.is_empty(): 41 | var scene: PackedScene = load(path) 42 | current_demo = scene.instantiate() 43 | add_child(current_demo) 44 | move_child(current_demo, 1) 45 | 46 | icon.texture = popup.get_item_icon(index) 47 | title.text = popup.get_item_text(index) 48 | hint.tooltip_text = popup.get_item_tooltip(index) 49 | 50 | icon.visible = icon != null 51 | title.visible = not title.text.is_empty() 52 | hint.visible = not hint.tooltip_text.is_empty() 53 | 54 | start.visible = current_demo == null 55 | 56 | 57 | func _on_opacity_pressed() -> void: 58 | if opacity_tween: 59 | opacity_tween.kill() 60 | 61 | opacity_tween = create_tween().set_trans(Tween.TRANS_QUINT).set_ease(Tween.EASE_OUT) 62 | opacity_tween.tween_property(background, ^"color:a", 0.5 if background.color.a > 0.75 else 1.0, 1.0) 63 | 64 | -------------------------------------------------------------------------------- /main/gallery.gd.uid: -------------------------------------------------------------------------------- 1 | uid://c2sgi81m1e3mu 2 | -------------------------------------------------------------------------------- /main/gallery.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=14 format=3 uid="uid://bpsif74mjwqj8"] 2 | 3 | [ext_resource type="Script" uid="uid://c2sgi81m1e3mu" path="res://main/gallery.gd" id="1_hhu0m"] 4 | [ext_resource type="Texture2D" uid="uid://cd8fgy1l2gdbk" path="res://main/logo.svg" id="2_abw7f"] 5 | [ext_resource type="Texture2D" uid="uid://bhwdmdmllp1cn" path="res://main/icon.svg" id="3_3a24k"] 6 | [ext_resource type="Texture2D" uid="uid://bh2fsgxdol1ax" path="res://main/menu.svg" id="3_l2cob"] 7 | [ext_resource type="Texture2D" uid="uid://cg67vmk8gpd63" path="res://main/opacity.svg" id="4_3smaf"] 8 | 9 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wnyj8"] 10 | bg_color = Color(0.32, 0.32, 0.32, 0.501961) 11 | 12 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mn2y5"] 13 | bg_color = Color(0.3735, 0.586533, 0.83, 1) 14 | 15 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_bm0e5"] 16 | bg_color = Color(0, 0, 0, 0.501961) 17 | 18 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kdg4m"] 19 | content_margin_left = 16.0 20 | content_margin_top = 8.0 21 | content_margin_right = 16.0 22 | content_margin_bottom = 8.0 23 | bg_color = Color(0, 0, 0, 0.25098) 24 | corner_radius_bottom_right = 8 25 | 26 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xm6u5"] 27 | bg_color = Color(1, 1, 1, 1) 28 | corner_radius_top_left = 32 29 | corner_radius_top_right = 32 30 | corner_radius_bottom_right = 32 31 | corner_radius_bottom_left = 32 32 | 33 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_o4esv"] 34 | content_margin_left = 8.0 35 | content_margin_top = 8.0 36 | content_margin_right = 8.0 37 | content_margin_bottom = 8.0 38 | bg_color = Color(0.32, 0.32, 0.32, 0.501961) 39 | corner_radius_top_left = 64 40 | corner_radius_top_right = 64 41 | corner_radius_bottom_right = 64 42 | corner_radius_bottom_left = 64 43 | 44 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7x6t1"] 45 | content_margin_left = 8.0 46 | content_margin_top = 8.0 47 | content_margin_right = 8.0 48 | content_margin_bottom = 8.0 49 | bg_color = Color(0.3735, 0.586533, 0.83, 1) 50 | corner_radius_top_left = 64 51 | corner_radius_top_right = 64 52 | corner_radius_bottom_right = 64 53 | corner_radius_bottom_left = 64 54 | 55 | [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ryuo6"] 56 | content_margin_left = 8.0 57 | content_margin_top = 8.0 58 | content_margin_right = 8.0 59 | content_margin_bottom = 8.0 60 | bg_color = Color(0, 0, 0, 0.25098) 61 | corner_radius_top_left = 64 62 | corner_radius_top_right = 64 63 | corner_radius_bottom_right = 64 64 | corner_radius_bottom_left = 64 65 | 66 | [node name="Main" type="Node"] 67 | script = ExtResource("1_hhu0m") 68 | 69 | [node name="Background" type="ColorRect" parent="."] 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.168627, 0.168627, 0.168627, 1) 76 | 77 | [node name="UI" type="CanvasLayer" parent="."] 78 | layer = 128 79 | 80 | [node name="Start" type="Control" parent="UI"] 81 | layout_mode = 3 82 | anchors_preset = 15 83 | anchor_right = 1.0 84 | anchor_bottom = 1.0 85 | grow_horizontal = 2 86 | grow_vertical = 2 87 | metadata/_edit_lock_ = true 88 | 89 | [node name="Box" type="VBoxContainer" parent="UI/Start"] 90 | layout_mode = 1 91 | anchors_preset = 8 92 | anchor_left = 0.5 93 | anchor_top = 0.5 94 | anchor_right = 0.5 95 | anchor_bottom = 0.5 96 | offset_left = -256.0 97 | offset_top = -77.5 98 | offset_right = 256.0 99 | offset_bottom = 77.5 100 | grow_horizontal = 2 101 | grow_vertical = 2 102 | theme_override_constants/separation = 16 103 | 104 | [node name="Greetings" type="Label" parent="UI/Start/Box"] 105 | layout_mode = 2 106 | theme_override_font_sizes/font_size = 24 107 | text = "- Welcome to -" 108 | horizontal_alignment = 1 109 | vertical_alignment = 1 110 | 111 | [node name="Logo" type="TextureRect" parent="UI/Start/Box"] 112 | layout_mode = 2 113 | texture = ExtResource("2_abw7f") 114 | stretch_mode = 3 115 | 116 | [node name="Hint" type="HBoxContainer" parent="UI/Start/Box"] 117 | layout_mode = 2 118 | theme_override_constants/separation = 8 119 | 120 | [node name="LabelL" type="Label" parent="UI/Start/Box/Hint"] 121 | layout_mode = 2 122 | theme_override_font_sizes/font_size = 24 123 | text = "Click the" 124 | horizontal_alignment = 1 125 | vertical_alignment = 1 126 | 127 | [node name="Icon" type="TextureRect" parent="UI/Start/Box/Hint"] 128 | layout_mode = 2 129 | texture = ExtResource("3_l2cob") 130 | stretch_mode = 5 131 | 132 | [node name="LabelR" type="Label" parent="UI/Start/Box/Hint"] 133 | layout_mode = 2 134 | theme_override_font_sizes/font_size = 24 135 | text = "button to select an example scene." 136 | horizontal_alignment = 1 137 | vertical_alignment = 1 138 | 139 | [node name="Header" type="HBoxContainer" parent="UI"] 140 | custom_minimum_size = Vector2(64, 48) 141 | offset_right = 225.0 142 | offset_bottom = 48.0 143 | theme_override_constants/separation = 0 144 | 145 | [node name="Menu" type="MenuButton" parent="UI/Header"] 146 | custom_minimum_size = Vector2(64, 0) 147 | layout_mode = 2 148 | tooltip_text = "Examples" 149 | mouse_default_cursor_shape = 2 150 | theme_override_font_sizes/font_size = 24 151 | theme_override_styles/hover = SubResource("StyleBoxFlat_wnyj8") 152 | theme_override_styles/pressed = SubResource("StyleBoxFlat_mn2y5") 153 | theme_override_styles/normal = SubResource("StyleBoxFlat_bm0e5") 154 | icon = ExtResource("3_l2cob") 155 | flat = false 156 | icon_alignment = 1 157 | 158 | [node name="Demo" type="PanelContainer" parent="UI/Header"] 159 | layout_mode = 2 160 | theme_override_styles/panel = SubResource("StyleBoxFlat_kdg4m") 161 | 162 | [node name="Box" type="HBoxContainer" parent="UI/Header/Demo"] 163 | layout_mode = 2 164 | theme_override_constants/separation = 8 165 | 166 | [node name="Icon" type="TextureRect" parent="UI/Header/Demo/Box"] 167 | visible = false 168 | custom_minimum_size = Vector2(16, 16) 169 | layout_mode = 2 170 | size_flags_vertical = 4 171 | texture = ExtResource("3_3a24k") 172 | expand_mode = 1 173 | 174 | [node name="Title" type="Label" parent="UI/Header/Demo/Box"] 175 | visible = false 176 | layout_mode = 2 177 | theme_override_font_sizes/font_size = 14 178 | text = "Demo" 179 | 180 | [node name="Padding" type="Control" parent="UI/Header/Demo/Box"] 181 | custom_minimum_size = Vector2(4, 0) 182 | layout_mode = 2 183 | 184 | [node name="Hint" type="Panel" parent="UI/Header/Demo/Box"] 185 | visible = false 186 | custom_minimum_size = Vector2(16, 16) 187 | layout_mode = 2 188 | size_flags_vertical = 4 189 | theme_override_styles/panel = SubResource("StyleBoxFlat_xm6u5") 190 | 191 | [node name="Label" type="Label" parent="UI/Header/Demo/Box/Hint"] 192 | layout_mode = 1 193 | anchors_preset = 8 194 | anchor_left = 0.5 195 | anchor_top = 0.5 196 | anchor_right = 0.5 197 | anchor_bottom = 0.5 198 | offset_left = -3.0 199 | offset_top = -11.5 200 | offset_right = 5.0 201 | offset_bottom = 11.5 202 | grow_horizontal = 2 203 | grow_vertical = 2 204 | size_flags_horizontal = 4 205 | theme_override_colors/font_color = Color(0.16, 0.16, 0.16, 1) 206 | theme_override_font_sizes/font_size = 14 207 | text = "?" 208 | horizontal_alignment = 1 209 | vertical_alignment = 1 210 | 211 | [node name="Padding" type="Control" parent="UI/Header"] 212 | custom_minimum_size = Vector2(12, 0) 213 | layout_mode = 2 214 | size_flags_horizontal = 0 215 | 216 | [node name="Transparency" type="Button" parent="UI/Header"] 217 | layout_mode = 2 218 | size_flags_vertical = 4 219 | tooltip_text = "Transparency" 220 | focus_mode = 0 221 | mouse_default_cursor_shape = 2 222 | theme_override_styles/hover = SubResource("StyleBoxFlat_o4esv") 223 | theme_override_styles/pressed = SubResource("StyleBoxFlat_7x6t1") 224 | theme_override_styles/normal = SubResource("StyleBoxFlat_ryuo6") 225 | icon = ExtResource("4_3smaf") 226 | 227 | [connection signal="pressed" from="UI/Header/Transparency" to="." method="_on_opacity_pressed"] 228 | -------------------------------------------------------------------------------- /main/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | © 2024 NinStar 3 | -------------------------------------------------------------------------------- /main/icon.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bhwdmdmllp1cn" 6 | path="res://.godot/imported/icon.svg-dd558d2b63205f95be972b3cdd0351b5.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://main/icon.svg" 14 | dest_files=["res://.godot/imported/icon.svg-dd558d2b63205f95be972b3cdd0351b5.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 | -------------------------------------------------------------------------------- /main/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | © 2024 NinStar 3 | -------------------------------------------------------------------------------- /main/logo.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cd8fgy1l2gdbk" 6 | path="res://.godot/imported/logo.svg-8955d45ab81a16f9533d6012de35d877.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://main/logo.svg" 14 | dest_files=["res://.godot/imported/logo.svg-8955d45ab81a16f9533d6012de35d877.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 | -------------------------------------------------------------------------------- /main/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | © 2024 NinStar 3 | -------------------------------------------------------------------------------- /main/menu.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://bh2fsgxdol1ax" 6 | path="res://.godot/imported/menu.svg-2636ecbe8bf778aaaf91189bf6a5101c.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://main/menu.svg" 14 | dest_files=["res://.godot/imported/menu.svg-2636ecbe8bf778aaaf91189bf6a5101c.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 | -------------------------------------------------------------------------------- /main/opacity.svg: -------------------------------------------------------------------------------- 1 | 2 | © 2024 NinStar 3 | -------------------------------------------------------------------------------- /main/opacity.svg.import: -------------------------------------------------------------------------------- 1 | [remap] 2 | 3 | importer="texture" 4 | type="CompressedTexture2D" 5 | uid="uid://cg67vmk8gpd63" 6 | path="res://.godot/imported/opacity.svg-1c5ecf810fe97013709262eede6de11f.ctex" 7 | metadata={ 8 | "vram_texture": false 9 | } 10 | 11 | [deps] 12 | 13 | source_file="res://main/opacity.svg" 14 | dest_files=["res://.godot/imported/opacity.svg-1c5ecf810fe97013709262eede6de11f.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 | -------------------------------------------------------------------------------- /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="gdProject" 14 | config/description="A collection of add-ons and utilities for Godot." 15 | config/tags=PackedStringArray("addon", "demo") 16 | run/main_scene="res://main/gallery.tscn" 17 | config/features=PackedStringArray("4.4", "GL Compatibility") 18 | boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 1) 19 | config/icon="res://main/icon.svg" 20 | 21 | [display] 22 | 23 | window/size/transparent=true 24 | window/per_pixel_transparency/allowed=true 25 | 26 | [editor_plugins] 27 | 28 | enabled=PackedStringArray("res://addons/nine_patch_sprite_2d/plugin.cfg", "res://addons/range_container/plugin.cfg", "res://addons/remote_container/plugin.cfg", "res://addons/resource_overrider/plugin.cfg", "res://addons/state_machine_nodes/plugin.cfg") 29 | 30 | [filesystem] 31 | 32 | import/blender/enabled=false 33 | 34 | [internationalization] 35 | 36 | locale/translation_remaps={} 37 | 38 | [rendering] 39 | 40 | renderer/rendering_method="gl_compatibility" 41 | renderer/rendering_method.mobile="gl_compatibility" 42 | environment/defaults/default_clear_color=Color(0.172549, 0.172549, 0.172549, 1) 43 | viewport/transparent_background=true 44 | --------------------------------------------------------------------------------