mirror of
https://github.com/Relintai/entity-spell-system-addons.git
synced 2024-11-18 13:07:18 +01:00
Removed the ai editor, as it's no longer needed. WIth the new ai system creating a visual script that derives from EntityAI is pretty much equivalent to the premise this addon.
This commit is contained in:
parent
40d291f308
commit
dd1953e7bb
@ -1,12 +0,0 @@
|
||||
tool
|
||||
extends Control
|
||||
|
||||
#var _ai_action : AIAction
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
#func set_target(ai_action : AIAction) -> void:
|
||||
# _ai_action = ai_action
|
||||
|
||||
# $AIGraphEdit.set_target(ai_action)
|
@ -1,68 +0,0 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://addons/ai_editor/AIEditorScene.gd" type="Script" id=1]
|
||||
[ext_resource path="res://addons/ai_editor/AIGraphEdit.gd" type="Script" id=2]
|
||||
[ext_resource path="res://addons/ai_editor/CreateActionPopup.gd" type="Script" id=3]
|
||||
|
||||
[node name="AIEditorScene" type="Control"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
rect_min_size = Vector2( 0, 200 )
|
||||
mouse_filter = 2
|
||||
script = ExtResource( 1 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="AIGraphEdit" type="GraphEdit" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
right_disconnects = true
|
||||
script = ExtResource( 2 )
|
||||
__meta__ = {
|
||||
"_edit_lock_": true,
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
create_action_popup = NodePath("../CreateActionPopup")
|
||||
|
||||
[node name="CreateActionPopup" type="ConfirmationDialog" parent="."]
|
||||
margin_left = 38.0
|
||||
margin_top = 113.0
|
||||
margin_right = 262.0
|
||||
margin_bottom = 357.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
window_title = "Add New ..."
|
||||
resizable = true
|
||||
script = ExtResource( 3 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
tree_path = NodePath("VBoxContainer/Tree")
|
||||
search_le_path = NodePath("VBoxContainer/LineEdit")
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CreateActionPopup"]
|
||||
margin_left = 8.0
|
||||
margin_top = 8.0
|
||||
margin_right = 216.0
|
||||
margin_bottom = 208.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="CreateActionPopup/VBoxContainer"]
|
||||
visible = false
|
||||
margin_right = 208.0
|
||||
margin_bottom = 24.0
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "Search"
|
||||
|
||||
[node name="Tree" type="Tree" parent="CreateActionPopup/VBoxContainer"]
|
||||
margin_right = 208.0
|
||||
margin_bottom = 200.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
hide_folding = true
|
||||
hide_root = true
|
@ -1,172 +0,0 @@
|
||||
tool
|
||||
extends GraphEdit
|
||||
|
||||
export(NodePath) var create_action_popup : NodePath
|
||||
|
||||
var _create_action_popup : PopupMenu
|
||||
var _actions : Array
|
||||
|
||||
func _ready() -> void:
|
||||
_create_action_popup = get_node(create_action_popup)
|
||||
_create_action_popup.connect("action_selected", self, "create_action")
|
||||
|
||||
connect("popup_request", self, "popup_request")
|
||||
connect("connection_request", self, "connection_request")
|
||||
connect("disconnection_request", self, "disconnection_request")
|
||||
|
||||
|
||||
func popup_request(position: Vector2) -> void:
|
||||
_create_action_popup.rect_position = position
|
||||
_create_action_popup.popup()
|
||||
|
||||
func create_action(action) -> void:
|
||||
var cls : Script
|
||||
|
||||
var pclass = action
|
||||
while cls == null and pclass != "":
|
||||
var file_name : String = "res://addons/ai_editor/editors/" + pclass + "Editor.gd"
|
||||
|
||||
var d : Directory = Directory.new()
|
||||
|
||||
if d.file_exists(file_name):
|
||||
cls = load(file_name)
|
||||
else:
|
||||
pclass = get_parent_class(pclass)
|
||||
|
||||
if cls == null:
|
||||
print("AiGraphEdit cls==null! (create_action)")
|
||||
|
||||
var n : GraphNode = cls.new() as GraphNode
|
||||
add_child(n)
|
||||
n.owner = self
|
||||
n.rect_position = _create_action_popup.rect_position
|
||||
|
||||
if ClassDB.class_exists(action):
|
||||
n.set_action(ClassDB.instance(action))
|
||||
else:
|
||||
var gsc : Array = ProjectSettings.get("_global_script_classes")
|
||||
|
||||
for i in range(gsc.size()):
|
||||
var d : Dictionary = gsc[i] as Dictionary
|
||||
|
||||
if action == d["class"]:
|
||||
var scls : Script = load(d["path"])
|
||||
n.set_action(scls.new())
|
||||
|
||||
func connection_request(from: String, from_slot: int, to: String, to_slot: int) -> void:
|
||||
var node = get_node(from)
|
||||
var to_node = get_node(to)
|
||||
if node.connected_to(from_slot, to_node):
|
||||
connect_node(from, from_slot, to, to_slot)
|
||||
save()
|
||||
|
||||
func disconnection_request(from: String, from_slot: int, to: String, to_slot: int) -> void:
|
||||
var node = get_node(from)
|
||||
if node.disconnected_from(from_slot):
|
||||
disconnect_node(from, from_slot, to, to_slot)
|
||||
save()
|
||||
|
||||
func save():
|
||||
for action in _actions:
|
||||
ResourceSaver.save(action.resource_path, action)
|
||||
|
||||
func close_request(graph_node : Node) -> void:
|
||||
remove_node(graph_node)
|
||||
|
||||
# { from_port: 0, from: "GraphNode name 0", to_port: 1, to: "GraphNode name 1" }.
|
||||
|
||||
func remove_node(graph_node : Node) -> void:
|
||||
var connections : Array = get_connection_list()
|
||||
|
||||
for conn in connections:
|
||||
if conn["from"] == graph_node.name:
|
||||
remove_node(get_node(conn["to"]))
|
||||
disconnect_node(conn["from"], conn["from_port"], conn["to"], conn["to_port"])
|
||||
|
||||
graph_node.queue_free()
|
||||
|
||||
func add_action(ai_action : AIAction, position: Vector2) -> void:
|
||||
_actions.append(ai_action)
|
||||
|
||||
var n : GraphNode = get_graph_node_for(ai_action)
|
||||
|
||||
n.rect_position = position
|
||||
# n.rect_position = _create_action_popup.rect_position
|
||||
n.set_action(ai_action)
|
||||
|
||||
func get_parent_class(cls_name: String) -> String:
|
||||
if ClassDB.class_exists(cls_name):
|
||||
return ClassDB.get_parent_class(cls_name)
|
||||
|
||||
var gsc : Array = ProjectSettings.get("_global_script_classes")
|
||||
|
||||
for i in range(gsc.size()):
|
||||
var d : Dictionary = gsc[i] as Dictionary
|
||||
|
||||
if cls_name == d["class"]:
|
||||
return d["base"]
|
||||
|
||||
return ""
|
||||
|
||||
func get_graph_node_for(action : AIAction) -> GraphNode:
|
||||
var cls : Script
|
||||
|
||||
var pclass : String = action.get_class()
|
||||
|
||||
# if action.get_script() != null:
|
||||
# var gsc : Array = ProjectSettings.get("_global_script_classes")
|
||||
#
|
||||
# for i in range(gsc.size()):
|
||||
# var d : Dictionary = gsc[i] as Dictionary
|
||||
#
|
||||
# print(d)
|
||||
# if cls_name == d["path"]:
|
||||
# d["base"]
|
||||
|
||||
while cls == null and pclass != "":
|
||||
var file_name : String = "res://addons/ai_editor/editors/" + pclass + "Editor.gd"
|
||||
|
||||
var d : Directory = Directory.new()
|
||||
|
||||
if d.file_exists(file_name):
|
||||
cls = load(file_name)
|
||||
else:
|
||||
pclass = get_parent_class(pclass)
|
||||
|
||||
if cls == null:
|
||||
print("AiGraphEdit cls==null! (get_graph_node_for)")
|
||||
return null
|
||||
|
||||
var n : GraphNode = cls.new() as GraphNode
|
||||
add_child(n)
|
||||
n.owner = self
|
||||
|
||||
return n
|
||||
|
||||
func can_drop_data(position, data):
|
||||
if data is AIAction:
|
||||
return true
|
||||
|
||||
if data is Dictionary:
|
||||
if data.has("type") and data["type"] == "files" and data.has("files"):
|
||||
for file in data["files"]:
|
||||
if ResourceLoader.exists(file):
|
||||
var res : Resource = ResourceLoader.load(file)
|
||||
|
||||
if res is AIAction:
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func drop_data(position, data):
|
||||
if data is AIAction:
|
||||
return true
|
||||
|
||||
if data is Dictionary:
|
||||
if data.has("type") and data["type"] == "files" and data.has("files"):
|
||||
for file in data["files"]:
|
||||
if ResourceLoader.exists(file):
|
||||
var res : Resource = ResourceLoader.load(file)
|
||||
|
||||
if res is AIAction:
|
||||
add_action(res, position)
|
@ -1,59 +0,0 @@
|
||||
tool
|
||||
extends AcceptDialog
|
||||
|
||||
signal action_selected
|
||||
|
||||
export(NodePath) var tree_path : NodePath
|
||||
export(NodePath) var search_le_path : NodePath
|
||||
|
||||
var _search_le : LineEdit
|
||||
var _tree : Tree
|
||||
|
||||
var _group : ButtonGroup
|
||||
|
||||
func _ready():
|
||||
_search_le = get_node(search_le_path) as LineEdit
|
||||
_tree = get_node(tree_path) as Tree
|
||||
_tree.connect("item_activated", self, "item_activated")
|
||||
|
||||
connect("about_to_show", self, "about_to_show")
|
||||
|
||||
func about_to_show():
|
||||
_tree.clear()
|
||||
|
||||
var arr : PoolStringArray = PoolStringArray()
|
||||
arr.append("AIAction")
|
||||
arr.append_array(ClassDB.get_inheriters_from_class("AIAction"))
|
||||
|
||||
var gsc : Array = ProjectSettings.get("_global_script_classes")
|
||||
|
||||
var l : int = arr.size() - 1
|
||||
|
||||
while (arr.size() != l):
|
||||
l = arr.size()
|
||||
|
||||
for i in range(gsc.size()):
|
||||
var d : Dictionary = gsc[i] as Dictionary
|
||||
|
||||
var found = false
|
||||
for j in range(arr.size()):
|
||||
if arr[j] == d["class"]:
|
||||
found = true
|
||||
break
|
||||
|
||||
if found:
|
||||
continue
|
||||
|
||||
for j in range(arr.size()):
|
||||
if arr[j] == d["base"]:
|
||||
arr.append(d["class"])
|
||||
|
||||
_tree.create_item()
|
||||
for a in arr:
|
||||
var ti : TreeItem = _tree.create_item()
|
||||
ti.set_text(0, a)
|
||||
|
||||
|
||||
func item_activated() -> void:
|
||||
emit_signal("action_selected", _tree.get_selected().get_text(0))
|
||||
hide()
|
@ -1,79 +0,0 @@
|
||||
extends "AIActionEditor.gd"
|
||||
|
||||
var _add_button : Button
|
||||
var _remove_button : Button
|
||||
var _hbox : HBoxContainer
|
||||
var _labels : Array
|
||||
|
||||
func _ready():
|
||||
title = "AIActionContainer"
|
||||
|
||||
func setup() -> void:
|
||||
.setup()
|
||||
|
||||
_hbox = HBoxContainer.new()
|
||||
_hbox.size_flags_vertical = SIZE_EXPAND_FILL
|
||||
add_child(_hbox)
|
||||
_hbox.owner = self
|
||||
|
||||
_add_button = Button.new()
|
||||
_add_button.rect_min_size = Vector2(0, 30)
|
||||
_add_button.size_flags_horizontal = SIZE_EXPAND_FILL
|
||||
_add_button.text = "Add"
|
||||
_add_button.connect("pressed", self, "add_pressed")
|
||||
_hbox.add_child(_add_button)
|
||||
_add_button.owner = _hbox
|
||||
|
||||
_remove_button = Button.new()
|
||||
_remove_button.rect_min_size = Vector2(0, 30)
|
||||
_remove_button.size_flags_horizontal = SIZE_EXPAND_FILL
|
||||
_remove_button.text = "Remove"
|
||||
_remove_button.connect("pressed", self, "remove_pressed")
|
||||
_hbox.add_child(_remove_button)
|
||||
_remove_button.owner = _hbox
|
||||
|
||||
|
||||
func add_pressed() -> void:
|
||||
_action.set_num_ai_actions(_action.get_num_ai_actions() + 1)
|
||||
|
||||
var button : Label = Label.new()
|
||||
button.rect_min_size = Vector2(0, 30)
|
||||
button.text = "Entry " + str(_labels.size())
|
||||
|
||||
if _labels.size() > 0:
|
||||
add_child_below_node(_labels.back(), button)
|
||||
else:
|
||||
add_child(button)
|
||||
|
||||
set_slot(get_child_count() - 1, false, 0, Color(1, 0, 0), true, 0, Color(1, 0, 0))
|
||||
|
||||
button.owner = self
|
||||
|
||||
_labels.append(button)
|
||||
|
||||
func remove_pressed() -> void:
|
||||
pass
|
||||
|
||||
func connected_to(from_slot, to_node) -> bool:
|
||||
if from_slot > _labels.size():
|
||||
return false
|
||||
|
||||
if (_action.get_ai_action(from_slot) != null):
|
||||
return false
|
||||
|
||||
var action : AIAction = to_node._action
|
||||
|
||||
for i in range(_action.get_num_ai_actions()):
|
||||
if (_action.get_ai_action(i) == action):
|
||||
return false
|
||||
|
||||
_action.set_ai_action(from_slot, action)
|
||||
return true
|
||||
|
||||
func disconnected_from(from_slot) -> bool:
|
||||
if from_slot > _labels.size():
|
||||
return false
|
||||
|
||||
_action.set_ai_action(from_slot, null)
|
||||
|
||||
return true
|
@ -1,52 +0,0 @@
|
||||
extends GraphNode
|
||||
|
||||
var _action : AIAction
|
||||
|
||||
func _ready():
|
||||
title = "AIAction"
|
||||
show_close = true
|
||||
resizable = true
|
||||
rect_min_size = Vector2(200, 40)
|
||||
|
||||
connect("close_request", self, "close_request")
|
||||
connect("resize_request", self, "resize_request")
|
||||
|
||||
setup()
|
||||
|
||||
func set_action(action) -> void:
|
||||
_action = action
|
||||
|
||||
if _action:
|
||||
title = _action.get_class()
|
||||
|
||||
if _action.has_method("get_title"):
|
||||
title = _action.get_title()
|
||||
|
||||
setup()
|
||||
|
||||
func setup() -> void:
|
||||
for ch in get_children():
|
||||
ch.queue_free()
|
||||
remove_child(ch)
|
||||
|
||||
var le : LineEdit = LineEdit.new()
|
||||
le.rect_min_size = Vector2(0, 30)
|
||||
le.placeholder_text = "Description"
|
||||
add_child(le)
|
||||
le.owner = self
|
||||
|
||||
set_slot(0, true, 0, Color(1, 0, 0), false, 0, Color(1, 0, 0))
|
||||
|
||||
|
||||
func close_request() -> void:
|
||||
get_node("..").close_request(self)
|
||||
# queue_free()
|
||||
|
||||
func resize_request(new_min_size: Vector2) -> void:
|
||||
rect_min_size = new_min_size
|
||||
|
||||
func connected_to(from_slot, to_node) -> bool:
|
||||
return false
|
||||
|
||||
func disconnected_from(from_slot) -> bool:
|
||||
return false
|
@ -1,7 +0,0 @@
|
||||
[plugin]
|
||||
|
||||
name="AI Editor"
|
||||
description=""
|
||||
author="Relintai"
|
||||
version=""
|
||||
script="plugin.gd"
|
@ -1,31 +0,0 @@
|
||||
tool
|
||||
extends EditorPlugin
|
||||
|
||||
var ai_editor_scene_data : PackedScene = preload("res://addons/ai_editor/AIEditorScene.tscn") as PackedScene
|
||||
|
||||
var main_scene : Control
|
||||
var bottom_panel_button : ToolButton
|
||||
|
||||
var edited_ai_action : AIAction
|
||||
|
||||
func _enter_tree():
|
||||
main_scene = ai_editor_scene_data.instance() as Control
|
||||
bottom_panel_button = add_control_to_bottom_panel(main_scene, "AI Editor")
|
||||
|
||||
func _exit_tree():
|
||||
remove_control_from_bottom_panel(main_scene)
|
||||
main_scene.queue_free()
|
||||
# bottom_panel_button.queue_free()
|
||||
# bottom_panel_button.hide()
|
||||
|
||||
#
|
||||
#func edit(object : Object) -> void:
|
||||
# edited_ai_action = object as AIAction
|
||||
# main_scene.set_target(edited_ai_action)
|
||||
#
|
||||
# bottom_panel_button.show()
|
||||
#
|
||||
#
|
||||
#func handles(object : Object) -> bool:
|
||||
# return object is AIAction
|
||||
|
Loading…
Reference in New Issue
Block a user