Merge pull request #453 from aaronfranke/plugin-proj

Refactor the plugin demos to be inside of a project and add main screen plugin demo
This commit is contained in:
Aaron Franke
2020-03-31 03:12:26 -04:00
committed by GitHub
35 changed files with 250 additions and 22 deletions

View File

@@ -1,9 +1,38 @@
# Plugin demos
# Plugin Demos
To use these plugins, copy any of these folders to the `addons/` folder in a Godot project.
This contains multiple plugin demos, all placed in a project for convenience.
Please see the documentation for editor plugins:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html
Language: GDScript
Renderer: GLES 2
# How does it work?
This project contains 4 plugins:
* The custom node plugin shows how to create a custom node type
using `add_custom_type`. [More info](addons/custom_node).
* The material import plugin shows how to make a plugin handle importing
a custom file type (mtxt). [More info](addons/material_import_plugin).
* The material creator plugin shows how to add a custom dock with some
simple functionality. [More info](addons/material_creator).
* The main screen plugin is a minimal example of how to create a plugin
with a main screen. [More info](addons/main_screen).
To use these plugins in another project, copy any of these
folders to the `addons/` folder in a Godot project, and then
enable them in the project settings menu.
For example, the path would look like: `addons/custom_node`
Plugins can be distributed and installed from the UI. If you make a zip that contains the folder, Godot will recognize it as a plugin and will allow you to install it.
Plugins can be distributed and installed from the UI.
If you make a zip that contains the folder, Godot will recognize
it as a plugin and will allow you to install it.
This can be done via the terminal: `zip -r custom_node.zip custom_node/*`

12
plugins/addons/README.md Normal file
View File

@@ -0,0 +1,12 @@
# How to use
To use these plugins in another project, copy any of these
folders to the `addons/` folder in a Godot project.
For example, the path would look like: `addons/custom_node`
Plugins can be distributed and installed from the UI.
If you make a zip that contains the folder, Godot will recognize
it as a plugin and will allow you to install it.
This can be done via the terminal: `zip -r custom_node.zip custom_node/*`

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 809 B

After

Width:  |  Height:  |  Size: 809 B

View File

@@ -0,0 +1,11 @@
# Main Screen Plugin Demo
This plugin demo shows how to make a main screen plugin.
The main screen appears as a button next to the "2D", "3D", "Script", and
"AssetLib" buttons. It also shows up when a Node it `handles` is selected.
For more information, see this documentation article:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_main_screen_plugins.html
If you would like to see a more complete example of what main screen plugins
are capable of, check out the [2.5D demo project](../../../misc/2.5d).

View File

@@ -0,0 +1 @@
extends Node

View File

@@ -0,0 +1,20 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/main_screen/print_hello.gd" type="Script" id=1]
[node name="MainPanel" type="CenterContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
size_flags_vertical = 3
[node name="PrintHello" type="Button" parent="."]
margin_left = 472.0
margin_top = 290.0
margin_right = 552.0
margin_bottom = 310.0
text = "Print Hello"
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[connection signal="pressed" from="PrintHello" to="PrintHello" method="_on_PrintHello_pressed"]

View File

@@ -0,0 +1,41 @@
tool
extends EditorPlugin
const MainPanel = preload("res://addons/main_screen/main_panel.tscn")
var main_panel_instance
func _enter_tree():
main_panel_instance = MainPanel.instance()
# Add the main panel to the editor's main viewport.
get_editor_interface().get_editor_viewport().add_child(main_panel_instance)
# Hide the main panel. Very much required.
make_visible(false)
func _exit_tree():
if main_panel_instance:
main_panel_instance.queue_free()
func has_main_screen():
return true
func make_visible(visible):
if main_panel_instance:
main_panel_instance.visible = visible
# If your plugin doesn't handle any node types, you can remove this method.
func handles(obj):
return obj is preload("res://addons/main_screen/handled_by_main_screen.gd")
func get_plugin_name():
return "Main Screen Plugin"
func get_plugin_icon():
# Must return some kind of Texture for the icon.
return get_editor_interface().get_base_control().get_icon("Node", "EditorIcons")

View File

@@ -0,0 +1,7 @@
[plugin]
name="Main Screen Plugin Demo"
description="Demonstrates how to make a main screen plugin."
author="Aaron Franke, Julian Murgia"
version="1.0"
script="main_screen_plugin.gd"

View File

@@ -0,0 +1,5 @@
tool
extends Button
func _on_PrintHello_pressed():
print("Hello from the main screen plugin!")

View File

@@ -0,0 +1,20 @@
# Material Creator Plugin Demo
This plugin demo contains a custom material creator
interface using a custom dock in the editor.
Custom docks are made of Control nodes, they run in the
editor, and any behavior must be done through `tool` scripts.
For more information, see this documentation article:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock
This plugin allows you to specify color, metallic, and
roughness values, and then use it as a material.
You can apply this material directly to Spatial
nodes by selecting them and then clicking "Apply".
This shows how a plugin can interact closely with the
editor, manipulating nodes the user selects.
Alternatively, you can also save the material to
a file, and then load it back into the plugin later.

View File

@@ -0,0 +1,9 @@
# Material Import Plugin Demo
This plugin demo shows how a custom import system can
be added to the editor. In this case, it imports a material.
For more information, see this documentation article:
https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html
In the editor, try opening `test.mtxt`. Godot will recognize
it and import it as a material because of this plugin.

7
plugins/default_env.tres Normal file
View File

@@ -0,0 +1,7 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="ProceduralSky" id=1]
[resource]
background_mode = 2
background_sky = SubResource( 1 )

BIN
plugins/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

34
plugins/icon.png.import Normal file
View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.png"
dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=true
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=true
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
stream=false
size_limit=0
detect_3d=true
svg/scale=1.0

View File

@@ -1,13 +0,0 @@
# Material Creator Plugin Demo
This plugin demo contains a custom material creator interface using a custom dock in the editor.
Custom docks are made of Control nodes, they run in the editor, and any behavior must be done through `tool` scripts.
For more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/making_plugins.html#a-custom-dock
This plugin allows you to specify color, metallic, and roughness values, and then use it as a material.
You can apply this silly material directly to Spatial nodes by selecting them and then clicking "Apply".
This shows how a plugin can interact closely with the editor, manipulating nodes the user selects.
Alternatively, you can also save the silly material to a file, and then load it back into the plugin later.

View File

@@ -1,6 +0,0 @@
# Material Import Plugin Demo
This plugin demo shows how a custom import system can be added to the editor. In this case, it imports a material.
For more information, see this documentation article: https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html
In the editor, try opening `test.mtxt`. Godot will recognize it and import it as a material because of this plugin.

32
plugins/project.godot Normal file
View File

@@ -0,0 +1,32 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=4
_global_script_classes=[ ]
_global_script_class_icons={
}
[application]
config/name="Plugin Demos"
config/description="This contains multiple plugin demos, all placed in a project for convenience."
run/main_scene="res://test_scene.tscn"
config/icon="res://icon.png"
[editor_plugins]
enabled=PoolStringArray( "custom_node", "main_screen", "material_creator", "material_import_plugin" )
[rendering]
quality/driver/driver_name="GLES2"
vram_compression/import_etc=true
vram_compression/import_etc2=false
environment/default_environment="res://default_env.tres"

19
plugins/test_scene.tscn Normal file
View File

@@ -0,0 +1,19 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://addons/main_screen/handled_by_main_screen.gd" type="Script" id=1]
[ext_resource path="res://addons/custom_node/heart.gd" type="Script" id=2]
[sub_resource type="CubeMesh" id=1]
[node name="TestScene" type="Node"]
[node name="Heart" type="Node2D" parent="."]
script = ExtResource( 2 )
[node name="MeshInstance" type="MeshInstance" parent="."]
mesh = SubResource( 1 )
skeleton = NodePath("")
material/0 = null
[node name="HandledByMainScreen" type="Node" parent="."]
script = ExtResource( 1 )