#ifndef VISUAL_SCRIPT_NODES_H #define VISUAL_SCRIPT_NODES_H #include "visual_script.h" class VisualScriptFunction : public VisualScriptNode { OBJ_TYPE(VisualScriptFunction,VisualScriptNode) struct Argument { String name; Variant::Type type; }; Vector arguments; bool stack_less; int stack_size; ScriptInstance::RPCMode rpc_mode; 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 *p_list) const; public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "flow_control"; } void add_argument(Variant::Type p_type,const String& p_name,int p_index=-1); 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_stack_size(int p_size); int get_stack_size() const; void set_rpc_mode(ScriptInstance::RPCMode p_mode); ScriptInstance::RPCMode get_rpc_mode() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptFunction(); }; class VisualScriptOperator : public VisualScriptNode { OBJ_TYPE(VisualScriptOperator,VisualScriptNode) Variant::Type typed; Variant::Operator op; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { 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; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptOperator(); }; class VisualScriptVariableGet : public VisualScriptNode { OBJ_TYPE(VisualScriptVariableGet,VisualScriptNode) StringName variable; protected: virtual void _validate_property(PropertyInfo& property) const; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } void set_variable(StringName p_var); StringName get_variable() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptVariableGet(); }; class VisualScriptVariableSet : public VisualScriptNode { OBJ_TYPE(VisualScriptVariableSet,VisualScriptNode) StringName variable; protected: virtual void _validate_property(PropertyInfo& property) const; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } void set_variable(StringName p_var); StringName get_variable() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptVariableSet(); }; class VisualScriptConstant : public VisualScriptNode { OBJ_TYPE(VisualScriptConstant,VisualScriptNode) Variant::Type type; Variant value; protected: virtual void _validate_property(PropertyInfo& property) const; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { 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* instance(VisualScriptInstance* p_instance); VisualScriptConstant(); }; class VisualScriptPreload : public VisualScriptNode { OBJ_TYPE(VisualScriptPreload,VisualScriptNode) Ref preload; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } void set_preload(const Ref& p_value); Ref get_preload() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptPreload(); }; class VisualScriptIndexGet : public VisualScriptNode { OBJ_TYPE(VisualScriptIndexGet,VisualScriptNode) public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "operators"; } virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptIndexGet(); }; class VisualScriptIndexSet : public VisualScriptNode { OBJ_TYPE(VisualScriptIndexSet,VisualScriptNode) public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "operators"; } virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptIndexSet(); }; class VisualScriptGlobalConstant : public VisualScriptNode { OBJ_TYPE(VisualScriptGlobalConstant,VisualScriptNode) int index; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "constants"; } void set_global_constant(int p_which); int get_global_constant(); virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptGlobalConstant(); }; class VisualScriptClassConstant : public VisualScriptNode { OBJ_TYPE(VisualScriptClassConstant,VisualScriptNode) StringName base_type; StringName name; protected: static void _bind_methods(); virtual void _validate_property(PropertyInfo& property) const; public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { 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* instance(VisualScriptInstance* p_instance); VisualScriptClassConstant(); }; class VisualScriptBasicTypeConstant : public VisualScriptNode { OBJ_TYPE(VisualScriptBasicTypeConstant,VisualScriptNode) Variant::Type type; StringName name; protected: static void _bind_methods(); virtual void _validate_property(PropertyInfo& property) const; public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { 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* instance(VisualScriptInstance* p_instance); VisualScriptBasicTypeConstant(); }; class VisualScriptMathConstant : public VisualScriptNode { OBJ_TYPE(VisualScriptMathConstant,VisualScriptNode) public: enum MathConstant { MATH_CONSTANT_ONE, MATH_CONSTANT_PI, MATH_CONSTANT_2PI, MATH_CONSTANT_HALF_PI, MATH_CONSTANT_E, MATH_CONSTANT_SQRT2, 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; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "constants"; } void set_math_constant(MathConstant p_which); MathConstant get_math_constant(); virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptMathConstant(); }; VARIANT_ENUM_CAST( VisualScriptMathConstant::MathConstant ) class VisualScriptEngineSingleton : public VisualScriptNode { OBJ_TYPE(VisualScriptEngineSingleton,VisualScriptNode) String singleton; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } void set_singleton(const String &p_string); String get_singleton(); virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptEngineSingleton(); }; class VisualScriptSceneNode : public VisualScriptNode { OBJ_TYPE(VisualScriptSceneNode,VisualScriptNode) NodePath path; protected: virtual void _validate_property(PropertyInfo& property) const; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } void set_node_path(const NodePath &p_path); NodePath get_node_path(); virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptSceneNode(); }; class VisualScriptSceneTree : public VisualScriptNode { OBJ_TYPE(VisualScriptSceneTree,VisualScriptNode) protected: virtual void _validate_property(PropertyInfo& property) const; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptSceneTree(); }; class VisualScriptResourcePath : public VisualScriptNode { OBJ_TYPE(VisualScriptResourcePath,VisualScriptNode) String path; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } void set_resource_path(const String &p_path); String get_resource_path(); virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptResourcePath(); }; class VisualScriptSelf : public VisualScriptNode { OBJ_TYPE(VisualScriptSelf,VisualScriptNode) protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const { return "data"; } virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptSelf(); }; class VisualScriptCustomNode: public VisualScriptNode { OBJ_TYPE(VisualScriptCustomNode,VisualScriptNode) protected: virtual bool _use_builtin_script() const { return true; } static void _bind_methods(); 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; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptCustomNode(); }; class VisualScriptSubCall: public VisualScriptNode { OBJ_TYPE(VisualScriptSubCall,VisualScriptNode) protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptSubCall(); }; class VisualScriptComment: public VisualScriptNode { OBJ_TYPE(VisualScriptComment,VisualScriptNode) String title; String description; Size2 size; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; void set_title(const String& p_title); String get_title() const; void set_description(const String& p_description); String get_description() const; void set_size(const Size2& p_size); Size2 get_size() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptComment(); }; class VisualScriptConstructor: public VisualScriptNode { OBJ_TYPE(VisualScriptConstructor,VisualScriptNode) Variant::Type type; MethodInfo constructor; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; 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* instance(VisualScriptInstance* p_instance); VisualScriptConstructor(); }; class VisualScriptLocalVar: public VisualScriptNode { OBJ_TYPE(VisualScriptLocalVar,VisualScriptNode) StringName name; Variant::Type type; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; 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* instance(VisualScriptInstance* p_instance); VisualScriptLocalVar(); }; class VisualScriptLocalVarSet: public VisualScriptNode { OBJ_TYPE(VisualScriptLocalVarSet,VisualScriptNode) StringName name; Variant::Type type; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; 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* instance(VisualScriptInstance* p_instance); VisualScriptLocalVarSet(); }; class VisualScriptInputAction: public VisualScriptNode { OBJ_TYPE(VisualScriptInputAction,VisualScriptNode) public: enum Mode { MODE_PRESSED, MODE_RELEASED, MODE_JUST_PRESSED, MODE_JUST_RELEASED, }; StringName name; Mode mode; protected: virtual void _validate_property(PropertyInfo& property) const; static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; 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* instance(VisualScriptInstance* p_instance); VisualScriptInputAction(); }; VARIANT_ENUM_CAST( VisualScriptInputAction::Mode ) class VisualScriptDeconstruct: public VisualScriptNode { OBJ_TYPE(VisualScriptDeconstruct,VisualScriptNode) struct Element { StringName name; Variant::Type type; }; Vector elements; void _update_elements(); Variant::Type type; InputEvent::Type input_type; void _set_elem_cache(const Array& p_elements); Array _get_elem_cache() const; virtual void _validate_property(PropertyInfo& property) const; protected: static void _bind_methods(); public: virtual int get_output_sequence_port_count() const; virtual bool has_input_sequence_port() const; virtual String get_output_sequence_port_text(int p_port) const; virtual int get_input_value_port_count() const; virtual int get_output_value_port_count() const; virtual PropertyInfo get_input_value_port_info(int p_idx) const; virtual PropertyInfo get_output_value_port_info(int p_idx) const; virtual String get_caption() const; virtual String get_text() const; virtual String get_category() const; void set_deconstruct_type(Variant::Type p_type); Variant::Type get_deconstruct_type() const; void set_deconstruct_input_type(InputEvent::Type p_input_type); InputEvent::Type get_deconstruct_input_type() const; virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance); VisualScriptDeconstruct(); }; void register_visual_script_nodes(); void unregister_visual_script_nodes(); #endif // VISUAL_SCRIPT_NODES_H