Added a new WorldGeneratorSettings resource which can store and load in world generator related classes from folders.

This commit is contained in:
Relintai 2021-12-26 18:51:46 +01:00
parent 9cac983ff5
commit 4ff14380a1
7 changed files with 170 additions and 0 deletions

View File

@ -1,6 +1,8 @@
tool tool
extends EditorPlugin extends EditorPlugin
var SWorldGeneratorSettings = preload("res://addons/world_generator/resources/world_generator_settings.gd")
var SWorldGenBaseResource = preload("res://addons/world_generator/resources/world_gen_base_resource.gd") var SWorldGenBaseResource = preload("res://addons/world_generator/resources/world_gen_base_resource.gd")
var SWorldGenWorld = preload("res://addons/world_generator/resources/world_gen_world.gd") var SWorldGenWorld = preload("res://addons/world_generator/resources/world_gen_world.gd")
var SContinent = preload("res://addons/world_generator/resources/continent.gd") var SContinent = preload("res://addons/world_generator/resources/continent.gd")
@ -13,6 +15,8 @@ var editor_scene = null
var tool_button : ToolButton = null var tool_button : ToolButton = null
func _enter_tree(): func _enter_tree():
add_custom_type("WorldGeneratorSettings", "Resource", SWorldGeneratorSettings, null)
add_custom_type("WorldGenBaseResource", "Resource", SWorldGenBaseResource, null) add_custom_type("WorldGenBaseResource", "Resource", SWorldGenBaseResource, null)
#Don't change the base to "WorldGenBaseResource" else it will complain about a non-existant class #Don't change the base to "WorldGenBaseResource" else it will complain about a non-existant class
#Also it works perfectly like this #Also it works perfectly like this
@ -27,6 +31,8 @@ func _enter_tree():
tool_button.hide() tool_button.hide()
func _exit_tree(): func _exit_tree():
remove_custom_type("WorldGeneratorSettings")
remove_custom_type("WorldGenBaseResource") remove_custom_type("WorldGenBaseResource")
remove_custom_type("WorldGenWorld") remove_custom_type("WorldGenWorld")
remove_custom_type("Continent") remove_custom_type("Continent")

View File

@ -0,0 +1,88 @@
tool
extends Resource
class_name WorldGeneratorSettings
export(PoolStringArray) var continent_class_folders : PoolStringArray
export(PoolStringArray) var zone_class_folders : PoolStringArray
export(PoolStringArray) var subzone_class_folders : PoolStringArray
enum WorldGeneratorScriptType {
CONTINENT = 0,
ZONE = 1,
SUBZONE = 2,
};
func evaluate_scripts(script_type : int, tree : Tree) -> void:
if (script_type == WorldGeneratorScriptType.CONTINENT):
evaluate_continent_scripts(tree)
elif (script_type == WorldGeneratorScriptType.ZONE):
evaluate_zone_scripts(tree)
elif (script_type == WorldGeneratorScriptType.SUBZONE):
evaluate_subzone_scripts(tree)
func evaluate_continent_scripts(tree : Tree) -> void:
tree.clear()
var root : TreeItem = tree.create_item()
root.set_text(0, "Continent")
root.set_meta("class_name", "Continent")
for s in continent_class_folders:
evaluate_folder(s, tree, root)
root.select(0)
func evaluate_zone_scripts(tree : Tree) -> void:
tree.clear()
var root : TreeItem = tree.create_item()
root.set_text(0, "Zone")
root.set_meta("class_name", "Zone")
for s in zone_class_folders:
evaluate_folder(s, tree, root)
root.select(0)
func evaluate_subzone_scripts(tree : Tree) -> void:
tree.clear()
var root : TreeItem = tree.create_item()
root.set_text(0, "SubZone")
root.set_meta("class_name", "SubZone")
for s in subzone_class_folders:
evaluate_folder(s, tree, root)
root.select(0)
func evaluate_folder(folder : String, tree : Tree, root : TreeItem) -> void:
var ti : TreeItem = null
var dir = Directory.new()
if dir.open(folder) == OK:
dir.list_dir_begin()
var file_name = dir.get_next()
while file_name != "":
if !dir.current_is_dir():
#print("Found file: " + file_name)
if !ti:
var n : String = folder.substr(folder.find_last("/") + 1)
if n != "":
ti = tree.create_item(root)
ti.set_text(0, n)
else:
ti = root
var e : TreeItem = tree.create_item(ti)
e.set_text(0, file_name.get_file())
e.set_meta("file", folder + "/" + file_name)
file_name = dir.get_next()
else:
print("An error occurred when trying to access the path.")

View File

@ -255,6 +255,11 @@ _global_script_classes=[ {
"path": "res://addons/world_generator/resources/world_gen_world.gd" "path": "res://addons/world_generator/resources/world_gen_world.gd"
}, { }, {
"base": "Resource", "base": "Resource",
"class": "WorldGeneratorSettings",
"language": "GDScript",
"path": "res://addons/world_generator/resources/world_generator_settings.gd"
}, {
"base": "Resource",
"class": "Zone", "class": "Zone",
"language": "GDScript", "language": "GDScript",
"path": "res://addons/world_generator/resources/zone.gd" "path": "res://addons/world_generator/resources/zone.gd"
@ -309,6 +314,7 @@ _global_script_class_icons={
"UIWindowModule": "", "UIWindowModule": "",
"WorldGenBaseResource": "", "WorldGenBaseResource": "",
"WorldGenWorld": "", "WorldGenWorld": "",
"WorldGeneratorSettings": "",
"Zone": "" "Zone": ""
} }
Node="input/actionbar_5_11" Node="input/actionbar_5_11"

View File

@ -0,0 +1,21 @@
tool
extends Continent
func get_editor_rect_border_color() -> Color:
return Color(0.8, 0.8, 0.8, 1)
func get_editor_rect_color() -> Color:
return Color(0.8, 0.8, 0.8, 0.9)
func get_editor_rect_border_size() -> int:
return 2
func get_editor_font_color() -> Color:
return Color(0, 0, 0, 1)
func get_editor_class() -> String:
return "TestContinent"
func get_editor_additional_text() -> String:
return "TestContinent"

View File

@ -0,0 +1,20 @@
tool
extends SubZone
func get_editor_rect_border_color() -> Color:
return Color(0.8, 0.8, 0.8, 1)
func get_editor_rect_color() -> Color:
return Color(0.8, 0.8, 0.8, 0.9)
func get_editor_rect_border_size() -> int:
return 2
func get_editor_font_color() -> Color:
return Color(0, 0, 0, 1)
func get_editor_class() -> String:
return "TestSubZone"
func get_editor_additional_text() -> String:
return "TestSubZone"

View File

@ -0,0 +1,20 @@
tool
extends Zone
func get_editor_rect_border_color() -> Color:
return Color(0.8, 0.8, 0.8, 1)
func get_editor_rect_color() -> Color:
return Color(0.8, 0.8, 0.8, 0.9)
func get_editor_rect_border_size() -> int:
return 2
func get_editor_font_color() -> Color:
return Color(0, 0, 0, 1)
func get_editor_class() -> String:
return "TestZone"
func get_editor_additional_text() -> String:
return "TestZone"

View File

@ -0,0 +1,9 @@
[gd_resource type="Resource" load_steps=2 format=2]
[ext_resource path="res://addons/world_generator/resources/world_generator_settings.gd" type="Script" id=1]
[resource]
script = ExtResource( 1 )
continent_class_folders = PoolStringArray( "res://world_generator/continents/" )
zone_class_folders = PoolStringArray( "res://world_generator/zones/" )
subzone_class_folders = PoolStringArray( "res://world_generator/subzones/" )