Files
godot-visual-script/visual_script_nodes.h
K. S. Ernest (iFire) Lee 9a4df15d3e Codebase Enhancements and Performance Improvements
We've made several updates to improve our codebase and application performance.

- Clang format was applied for better readability and consistency, aiding other developers in understanding and contributing to the code.
- We resolved issues that were causing visual script compilation failure. The visual script now compiles successfully, ensuring application functionality.
- Broken sections within the codebase were fixed, improving overall stability.
- Built-in functions from the visual script were removed to simplify the code and enhance readability.
- Generic search performance was improved to provide faster results, enhancing user experience.
- Missing flow nodes were added to the Visual Script, ensuring all necessary components are present for correct functioning.

In an effort to streamline the codebase:

- `VisualScriptComment` class and related code were removed, reducing complexity and improving maintainability.
- Error messages were optimized for quicker feedback when errors occur.
- Licenses were updated to reflect recent changes, ensuring legal compliance and project transparency.
- The `get_global_name()` override in `visual_script.h` was fixed, and `TYPE_BUILTIN_FUNC` in `visual_script_expression.h` was removed, improving code functionality.
- Search logic was refactored to avoid double searching, enhancing performance.
- Documentation was updated to reflect recent changes, providing accurate information to users and developers.
- Property selection logic in `VisualScriptPropertySelector` was refactored for easier understanding and modification.
- Code was refactored to avoid variable shadowing, improving readability and reducing potential errors.
- `.clang-format` and `.clang-tidy` configuration files were added to ensure consistent code styling.

To make the code more robust and easier to understand:

- Variable names were corrected for clarity, and error handling in `visual_script_expression.cpp` was improved.
- Function and variable names were refactored for better readability and maintainability.
- Member editing logic in `VisualScriptEditor` was simplified.
- Name variables were updated to be unique, avoiding potential conflicts and errors.
- The `VisualScriptSubCall` class was refactored for simplicity and ease of understanding.

For macOS workflow:

- It was updated to use the latest version and correct path for installing Vulkan SDK, enabling the application to leverage the latest features and improvements from the Vulkan SDK.
- Mac Vulkan SDK was installed to support Vulkan-based functionalities.

Lastly, we made necessary changes to pass CI/CD tests, ensuring the code quality and stability of the application.
2023-08-19 09:42:23 -07:00

1091 lines
34 KiB
C++

/**************************************************************************/
/* visual_script_nodes.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* 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 VISUAL_SCRIPT_NODES_H
#define VISUAL_SCRIPT_NODES_H
#include "core/object/gdvirtual.gen.inc"
#include "core/object/script_language.h"
#include "scene/main/multiplayer_api.h"
#include "visual_script.h"
class VisualScriptFunction : public VisualScriptNode {
GDCLASS(VisualScriptFunction, VisualScriptNode);
struct Argument {
String name;
Variant::Type type;
PropertyHint hint;
String hint_string;
};
Vector<Argument> arguments;
bool stack_less;
int stack_size;
MultiplayerAPI::RPCMode rpc_mode;
bool sequenced;
protected:
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override { return "flow_control"; }
void add_argument(Variant::Type p_type, const String &p_name,
int p_index = -1,
const PropertyHint p_hint = PROPERTY_HINT_NONE,
const String &p_hint_string = String(""));
void set_argument_type(int p_argidx, Variant::Type p_type);
Variant::Type get_argument_type(int p_argidx) const;
void set_argument_name(int p_argidx, const String &p_name);
String get_argument_name(int p_argidx) const;
void remove_argument(int p_argidx);
int get_argument_count() const;
void set_stack_less(bool p_enable);
bool is_stack_less() const;
void set_sequenced(bool p_enable);
bool is_sequenced() const;
void set_stack_size(int p_size);
int get_stack_size() const;
void set_rpc_mode(MultiplayerAPI::RPCMode p_mode);
MultiplayerAPI::RPCMode get_rpc_mode() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
virtual void reset_state() override;
VisualScriptFunction();
};
class VisualScriptLists : public VisualScriptNode {
GDCLASS(VisualScriptLists, VisualScriptNode)
struct Port {
String name;
Variant::Type type;
};
protected:
Vector<Port> inputports;
Vector<Port> outputports;
enum {
OUTPUT_EDITABLE = 0x0001,
OUTPUT_NAME_EDITABLE = 0x0002,
OUTPUT_TYPE_EDITABLE = 0x0004,
INPUT_EDITABLE = 0x0008,
INPUT_NAME_EDITABLE = 0x000F,
INPUT_TYPE_EDITABLE = 0x0010,
};
int flags;
bool sequenced;
bool _set(const StringName &p_name, const Variant &p_value);
bool _get(const StringName &p_name, Variant &r_ret) const;
void _get_property_list(List<PropertyInfo> *p_list) const;
static void _bind_methods();
public:
virtual void reset_state() override;
virtual bool is_output_port_editable() const;
virtual bool is_output_port_name_editable() const;
virtual bool is_output_port_type_editable() const;
virtual bool is_input_port_editable() const;
virtual bool is_input_port_name_editable() const;
virtual bool is_input_port_type_editable() const;
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
void add_input_data_port(Variant::Type p_type, const String &p_name,
int p_index = -1);
void set_input_data_port_type(int p_idx, Variant::Type p_type);
void set_input_data_port_name(int p_idx, const String &p_name);
void remove_input_data_port(int p_argidx);
void add_output_data_port(Variant::Type p_type, const String &p_name,
int p_index = -1);
void set_output_data_port_type(int p_idx, Variant::Type p_type);
void set_output_data_port_name(int p_idx, const String &p_name);
void remove_output_data_port(int p_argidx);
void set_sequenced(bool p_enable);
bool is_sequenced() const;
VisualScriptLists();
};
class VisualScriptComposeArray : public VisualScriptLists {
GDCLASS(VisualScriptComposeArray, VisualScriptLists)
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override { return "functions"; }
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptComposeArray();
};
class VisualScriptOperator : public VisualScriptNode {
GDCLASS(VisualScriptOperator, VisualScriptNode);
Variant::Type typed;
Variant::Operator op;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "operators"; }
void set_operator(Variant::Operator p_op);
Variant::Operator get_operator() const;
void set_typed(Variant::Type p_op);
Variant::Type get_typed() const;
static String get_operator_name(Variant::Operator p_op);
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptOperator();
};
class VisualScriptSelect : public VisualScriptNode {
GDCLASS(VisualScriptSelect, VisualScriptNode);
Variant::Type typed;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override { return "operators"; }
void set_typed(Variant::Type p_op);
Variant::Type get_typed() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptSelect();
};
class VisualScriptVariableGet : public VisualScriptNode {
GDCLASS(VisualScriptVariableGet, VisualScriptNode);
StringName variable;
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
void set_variable(StringName p_variable);
StringName get_variable() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptVariableGet();
};
class VisualScriptVariableSet : public VisualScriptNode {
GDCLASS(VisualScriptVariableSet, VisualScriptNode);
StringName variable;
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
void set_variable(StringName p_variable);
StringName get_variable() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptVariableSet();
};
class VisualScriptConstant : public VisualScriptNode {
GDCLASS(VisualScriptConstant, VisualScriptNode);
Variant::Type type;
Variant value;
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "constants"; }
void set_constant_type(Variant::Type p_type);
Variant::Type get_constant_type() const;
void set_constant_value(Variant p_value);
Variant get_constant_value() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptConstant();
};
class VisualScriptPreload : public VisualScriptNode {
GDCLASS(VisualScriptPreload, VisualScriptNode);
Ref<Resource> preload;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
void set_preload(const Ref<Resource> &p_preload);
Ref<Resource> get_preload() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptPreload();
};
class VisualScriptIndexGet : public VisualScriptNode {
GDCLASS(VisualScriptIndexGet, VisualScriptNode);
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "operators"; }
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptIndexGet();
};
class VisualScriptIndexSet : public VisualScriptNode {
GDCLASS(VisualScriptIndexSet, VisualScriptNode);
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "operators"; }
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptIndexSet();
};
class VisualScriptGlobalConstant : public VisualScriptNode {
GDCLASS(VisualScriptGlobalConstant, VisualScriptNode);
int index;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "constants"; }
void set_global_constant(int p_which);
int get_global_constant();
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptGlobalConstant();
};
class VisualScriptClassConstant : public VisualScriptNode {
GDCLASS(VisualScriptClassConstant, VisualScriptNode);
StringName base_type;
StringName name;
protected:
static void _bind_methods();
void _validate_property(PropertyInfo &p_property) const;
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "constants"; }
void set_class_constant(const StringName &p_which);
StringName get_class_constant();
void set_base_type(const StringName &p_which);
StringName get_base_type();
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptClassConstant();
};
class VisualScriptBasicTypeConstant : public VisualScriptNode {
GDCLASS(VisualScriptBasicTypeConstant, VisualScriptNode);
Variant::Type type;
StringName name;
protected:
static void _bind_methods();
void _validate_property(PropertyInfo &p_property) const;
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override { return "constants"; }
void set_basic_type_constant(const StringName &p_which);
StringName get_basic_type_constant() const;
void set_basic_type(Variant::Type p_which);
Variant::Type get_basic_type() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptBasicTypeConstant();
};
class VisualScriptMathConstant : public VisualScriptNode {
GDCLASS(VisualScriptMathConstant, VisualScriptNode);
public:
enum MathConstant {
MATH_CONSTANT_ONE,
MATH_CONSTANT_PI,
MATH_CONSTANT_HALF_PI,
MATH_CONSTANT_TAU,
MATH_CONSTANT_E,
MATH_CONSTANT_SQRT2,
MATH_CONSTANT_INF,
MATH_CONSTANT_NAN,
MATH_CONSTANT_MAX
};
private:
static const char *const_name[MATH_CONSTANT_MAX];
static double const_value[MATH_CONSTANT_MAX];
MathConstant constant;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "constants"; }
void set_math_constant(MathConstant p_which);
MathConstant get_math_constant();
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptMathConstant();
};
VARIANT_ENUM_CAST(VisualScriptMathConstant::MathConstant)
class VisualScriptEngineSingleton : public VisualScriptNode {
GDCLASS(VisualScriptEngineSingleton, VisualScriptNode);
String singleton;
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
void set_singleton(const String &p_string);
String get_singleton();
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
virtual TypeGuess guess_output_type(TypeGuess *p_inputs,
int p_output) const override;
VisualScriptEngineSingleton();
};
class VisualScriptSceneNode : public VisualScriptNode {
GDCLASS(VisualScriptSceneNode, VisualScriptNode);
NodePath path;
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
void set_node_path(const NodePath &p_path);
NodePath get_node_path();
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
virtual TypeGuess guess_output_type(TypeGuess *p_inputs,
int p_output) const override;
VisualScriptSceneNode();
};
class VisualScriptSceneTree : public VisualScriptNode {
GDCLASS(VisualScriptSceneTree, VisualScriptNode);
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
virtual TypeGuess guess_output_type(TypeGuess *p_inputs,
int p_output) const override;
VisualScriptSceneTree();
};
class VisualScriptResourcePath : public VisualScriptNode {
GDCLASS(VisualScriptResourcePath, VisualScriptNode);
String path;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
void set_resource_path(const String &p_path);
String get_resource_path();
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptResourcePath();
};
class VisualScriptSelf : public VisualScriptNode {
GDCLASS(VisualScriptSelf, VisualScriptNode);
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override { return "data"; }
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
virtual TypeGuess guess_output_type(TypeGuess *p_inputs,
int p_output) const override;
VisualScriptSelf();
};
class VisualScriptCustomNode : public VisualScriptNode {
GDCLASS(VisualScriptCustomNode, VisualScriptNode);
protected:
static void _bind_methods();
friend class VisualScriptNodeInstanceCustomNode;
GDVIRTUAL0RC(int, _get_output_sequence_port_count)
GDVIRTUAL0RC(bool, _has_input_sequence_port)
GDVIRTUAL1RC(String, _get_output_sequence_port_text, int)
GDVIRTUAL0RC(int, _get_input_value_port_count)
GDVIRTUAL1RC(int, _get_input_value_port_type, int)
GDVIRTUAL1RC(String, _get_input_value_port_name, int)
GDVIRTUAL1RC(int, _get_input_value_port_hint, int)
GDVIRTUAL1RC(String, _get_input_value_port_hint_string, int)
GDVIRTUAL0RC(int, _get_output_value_port_count)
GDVIRTUAL1RC(int, _get_output_value_port_type, int)
GDVIRTUAL1RC(String, _get_output_value_port_name, int)
GDVIRTUAL1RC(int, _get_output_value_port_hint, int)
GDVIRTUAL1RC(String, _get_output_value_port_hint_string, int)
GDVIRTUAL0RC(String, _get_caption)
GDVIRTUAL0RC(String, _get_text)
GDVIRTUAL0RC(String, _get_category)
GDVIRTUAL0RC(int, _get_working_memory_size)
GDVIRTUAL4RC(Variant, _step, Array, Array, int, Array)
public:
enum StartMode { // replicated for step
START_MODE_BEGIN_SEQUENCE,
START_MODE_CONTINUE_SEQUENCE,
START_MODE_RESUME_YIELD
};
enum { // replicated for step
STEP_SHIFT = 1 << 24,
STEP_MASK = STEP_SHIFT - 1,
STEP_PUSH_STACK_BIT = STEP_SHIFT, // push bit to stack
STEP_GO_BACK_BIT = STEP_SHIFT << 1, // go back to previous node
STEP_NO_ADVANCE_BIT = STEP_SHIFT << 2, // do not advance past this node
STEP_EXIT_FUNCTION_BIT = STEP_SHIFT << 3, // return from function
STEP_YIELD_BIT = STEP_SHIFT
<< 4, // yield (will find VisualScriptFunctionState state
// in first working memory)
};
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
virtual TypeGuess guess_output_type(TypeGuess *p_inputs,
int p_output) const override;
void _script_changed();
VisualScriptCustomNode();
};
VARIANT_ENUM_CAST(VisualScriptCustomNode::StartMode);
class VisualScriptSubCall : public VisualScriptNode {
GDCLASS(VisualScriptSubCall, VisualScriptNode);
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptSubCall();
};
class VisualScriptConstructor : public VisualScriptNode {
GDCLASS(VisualScriptConstructor, VisualScriptNode);
Variant::Type type;
MethodInfo constructor;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override;
void set_constructor_type(Variant::Type p_type);
Variant::Type get_constructor_type() const;
void set_constructor(const Dictionary &p_info);
Dictionary get_constructor() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptConstructor();
};
class VisualScriptLocalVar : public VisualScriptNode {
GDCLASS(VisualScriptLocalVar, VisualScriptNode);
StringName name;
Variant::Type type;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override;
void set_var_name(const StringName &p_name);
StringName get_var_name() const;
void set_var_type(Variant::Type p_type);
Variant::Type get_var_type() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptLocalVar();
};
class VisualScriptLocalVarSet : public VisualScriptNode {
GDCLASS(VisualScriptLocalVarSet, VisualScriptNode);
StringName name;
Variant::Type type;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_text() const override;
virtual String get_category() const override;
void set_var_name(const StringName &p_name);
StringName get_var_name() const;
void set_var_type(Variant::Type p_type);
Variant::Type get_var_type() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptLocalVarSet();
};
class VisualScriptInputAction : public VisualScriptNode {
GDCLASS(VisualScriptInputAction, VisualScriptNode);
public:
enum Mode {
MODE_PRESSED,
MODE_RELEASED,
MODE_JUST_PRESSED,
MODE_JUST_RELEASED,
};
StringName name;
Mode mode;
protected:
void _validate_property(PropertyInfo &p_property) const;
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override;
void set_action_name(const StringName &p_name);
StringName get_action_name() const;
void set_action_mode(Mode p_mode);
Mode get_action_mode() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptInputAction();
};
VARIANT_ENUM_CAST(VisualScriptInputAction::Mode)
class VisualScriptDeconstruct : public VisualScriptNode {
GDCLASS(VisualScriptDeconstruct, VisualScriptNode);
struct Element {
StringName name;
Variant::Type type;
};
Vector<Element> elements;
void _update_elements();
Variant::Type type;
void _set_elem_cache(const Array &p_elements);
Array _get_elem_cache() const;
void _validate_property(PropertyInfo &p_property) const;
protected:
static void _bind_methods();
public:
virtual int get_output_sequence_port_count() const override;
virtual bool has_input_sequence_port() const override;
virtual String get_output_sequence_port_text(int p_port) const override;
virtual int get_input_value_port_count() const override;
virtual int get_output_value_port_count() const override;
virtual PropertyInfo get_input_value_port_info(int p_idx) const override;
virtual PropertyInfo get_output_value_port_info(int p_idx) const override;
virtual String get_caption() const override;
virtual String get_category() const override;
void set_deconstruct_type(Variant::Type p_type);
Variant::Type get_deconstruct_type() const;
virtual VisualScriptNodeInstance *
instantiate(VisualScriptInstance *p_instance) override;
VisualScriptDeconstruct();
};
void register_visual_script_nodes();
void unregister_visual_script_nodes();
#endif // VISUAL_SCRIPT_NODES_H