diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2021-12-01 08:24:46 +0100 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2022-02-04 14:56:30 +0100 |
commit | c971316d887eb2406ef86106c158845a9a6b76ba (patch) | |
tree | 2d873d64256cca3304aa3d465aa63a8a35ecb594 /editor/plugins/replication_editor_plugin.h | |
parent | d219547c96ce66a6f54d9d9d7ae431e9b115221f (diff) |
[Editor] Replication plugin to configure MultiplayerSynchronizers.
Allows configuring the MultiplayerSynchornizer in a way similar to
AnimationPlayer.
Properties are added manually, edither as plain properties, or via the
NodePath format for child nodes' properties "path/to/node:property"
relative to the MultiplayerSynchronizer root path.
Nice things to add would be:
- Moving properties up/down in the list.
- Some form of keying, autmatic filling of the replication properity
line edit.
Diffstat (limited to 'editor/plugins/replication_editor_plugin.h')
-rw-r--r-- | editor/plugins/replication_editor_plugin.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/editor/plugins/replication_editor_plugin.h b/editor/plugins/replication_editor_plugin.h new file mode 100644 index 0000000000..049eda99cc --- /dev/null +++ b/editor/plugins/replication_editor_plugin.h @@ -0,0 +1,108 @@ +/*************************************************************************/ +/* replication_editor_plugin.h */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#ifndef REPLICATION_EDITOR_PLUGIN_H +#define REPLICATION_EDITOR_PLUGIN_H + +#include "editor/editor_node.h" +#include "editor/editor_plugin.h" +#include "scene/resources/scene_replication_config.h" + +class ConfirmationDialog; +class MultiplayerSynchronizer; +class Tree; + +class ReplicationEditor : public VBoxContainer { + GDCLASS(ReplicationEditor, VBoxContainer); + +private: + EditorNode *editor; + MultiplayerSynchronizer *current = nullptr; + + AcceptDialog *error_dialog = nullptr; + ConfirmationDialog *delete_dialog = nullptr; + Button *add_button = nullptr; + LineEdit *np_line_edit = nullptr; + + Ref<SceneReplicationConfig> config; + NodePath deleting; + Tree *tree; + bool keying = false; + + Ref<Texture2D> _get_class_icon(const Node *p_node); + + void _add_pressed(); + void _tree_item_edited(); + void _tree_button_pressed(Object *p_item, int p_column, int p_id); + void _update_checked(const NodePath &p_prop, int p_column, bool p_checked); + void _update_config(); + void _dialog_closed(bool p_confirmed); + void _add_property(const NodePath &p_property, bool p_spawn = true, bool p_sync = true); + +protected: + static void _bind_methods(); + + void _notification(int p_what); + +public: + void update_keying(); + void edit(MultiplayerSynchronizer *p_object); + bool has_keying() const { return keying; } + MultiplayerSynchronizer *get_current() const { return current; } + void property_keyed(const String &p_property); + + ReplicationEditor(EditorNode *p_node); + ~ReplicationEditor() {} +}; + +class ReplicationEditorPlugin : public EditorPlugin { + GDCLASS(ReplicationEditorPlugin, EditorPlugin); + +private: + EditorNode *editor; + ReplicationEditor *repl_editor; + + void _node_removed(Node *p_node); + void _keying_changed(); + void _property_keyed(const String &p_keyed, const Variant &p_value, bool p_advance); + +protected: + void _notification(int p_what); + +public: + virtual void edit(Object *p_object) override; + virtual bool handles(Object *p_object) const override; + virtual void make_visible(bool p_visible) override; + + ReplicationEditorPlugin(EditorNode *p_node); + ~ReplicationEditorPlugin(); +}; + +#endif // REPLICATION_EDITOR_PLUGIN_H |