mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
WIP visual scripting, not working yet but you can check out stuff
This commit is contained in:
5
modules/visual_script/SCsub
Normal file
5
modules/visual_script/SCsub
Normal file
@@ -0,0 +1,5 @@
|
||||
Import('env')
|
||||
|
||||
env.add_source_files(env.modules_sources,"*.cpp")
|
||||
|
||||
Export('env')
|
||||
11
modules/visual_script/config.py
Normal file
11
modules/visual_script/config.py
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
def can_build(platform):
|
||||
return True
|
||||
|
||||
|
||||
def configure(env):
|
||||
pass
|
||||
|
||||
|
||||
|
||||
96
modules/visual_script/register_types.cpp
Normal file
96
modules/visual_script/register_types.cpp
Normal file
@@ -0,0 +1,96 @@
|
||||
/*************************************************************************/
|
||||
/* register_types.cpp */
|
||||
/*************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* http://www.godotengine.org */
|
||||
/*************************************************************************/
|
||||
/* Copyright (c) 2007-2016 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. */
|
||||
/*************************************************************************/
|
||||
#include "register_types.h"
|
||||
|
||||
#include "visual_script.h"
|
||||
#include "visual_script_editor.h"
|
||||
#include "io/resource_loader.h"
|
||||
#include "visual_script_nodes.h"
|
||||
#include "visual_script_func_nodes.h"
|
||||
#include "visual_script_builtin_funcs.h"
|
||||
#include "visual_script_flow_control.h"
|
||||
|
||||
|
||||
VisualScriptLanguage *visual_script_language=NULL;
|
||||
|
||||
|
||||
void register_visual_script_types() {
|
||||
|
||||
ObjectTypeDB::register_type<VisualScript>();
|
||||
ObjectTypeDB::register_virtual_type<VisualScriptNode>();
|
||||
ObjectTypeDB::register_type<VisualScriptFunction>();
|
||||
ObjectTypeDB::register_type<VisualScriptOperator>();
|
||||
ObjectTypeDB::register_type<VisualScriptVariable>();
|
||||
ObjectTypeDB::register_type<VisualScriptConstant>();
|
||||
ObjectTypeDB::register_type<VisualScriptIndexGet>();
|
||||
ObjectTypeDB::register_type<VisualScriptIndexSet>();
|
||||
ObjectTypeDB::register_type<VisualScriptGlobalConstant>();
|
||||
ObjectTypeDB::register_type<VisualScriptMathConstant>();
|
||||
ObjectTypeDB::register_type<VisualScriptSingleton>();
|
||||
ObjectTypeDB::register_type<VisualScriptSceneNode>();
|
||||
|
||||
ObjectTypeDB::register_type<VisualScriptFunctionCall>();
|
||||
ObjectTypeDB::register_type<VisualScriptPropertySet>();
|
||||
ObjectTypeDB::register_type<VisualScriptPropertyGet>();
|
||||
ObjectTypeDB::register_type<VisualScriptScriptCall>();
|
||||
ObjectTypeDB::register_type<VisualScriptEmitSignal>();
|
||||
|
||||
ObjectTypeDB::register_type<VisualScriptReturn>();
|
||||
ObjectTypeDB::register_type<VisualScriptCondition>();
|
||||
ObjectTypeDB::register_type<VisualScriptWhile>();
|
||||
ObjectTypeDB::register_type<VisualScriptIterator>();
|
||||
ObjectTypeDB::register_type<VisualScriptSequence>();
|
||||
|
||||
ObjectTypeDB::register_type<VisualScriptBuiltinFunc>();
|
||||
|
||||
visual_script_language=memnew( VisualScriptLanguage );
|
||||
//script_language_gd->init();
|
||||
ScriptServer::register_language(visual_script_language);
|
||||
|
||||
register_visual_script_nodes();
|
||||
register_visual_script_func_nodes();
|
||||
register_visual_script_builtin_func_node();
|
||||
register_visual_script_flow_control_nodes();
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
VisualScriptEditor::register_editor();
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
void unregister_visual_script_types() {
|
||||
|
||||
|
||||
ScriptServer::unregister_language(visual_script_language);
|
||||
|
||||
if (visual_script_language)
|
||||
memdelete( visual_script_language );
|
||||
|
||||
}
|
||||
30
modules/visual_script/register_types.h
Normal file
30
modules/visual_script/register_types.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/*************************************************************************/
|
||||
/* register_types.h */
|
||||
/*************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* http://www.godotengine.org */
|
||||
/*************************************************************************/
|
||||
/* Copyright (c) 2007-2016 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. */
|
||||
/*************************************************************************/
|
||||
void register_visual_script_types();
|
||||
void unregister_visual_script_types();
|
||||
1156
modules/visual_script/visual_script.cpp
Normal file
1156
modules/visual_script/visual_script.cpp
Normal file
File diff suppressed because it is too large
Load Diff
318
modules/visual_script/visual_script.h
Normal file
318
modules/visual_script/visual_script.h
Normal file
@@ -0,0 +1,318 @@
|
||||
#ifndef VSCRIPT_H
|
||||
#define VSCRIPT_H
|
||||
|
||||
#include "script_language.h"
|
||||
|
||||
|
||||
class VScriptInstance;
|
||||
class VisualScriptNodeInstance;
|
||||
class VisualScript;
|
||||
|
||||
class VisualScriptNode : public Resource {
|
||||
OBJ_TYPE(VisualScriptNode,Resource)
|
||||
|
||||
friend class VisualScript;
|
||||
|
||||
Set<VisualScript*> scripts_used;
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
Ref<VisualScript> get_visual_script() const;
|
||||
|
||||
virtual int get_output_sequence_port_count() const=0;
|
||||
virtual bool has_input_sequence_port() const=0;
|
||||
|
||||
virtual String get_output_sequence_port_text(int p_port) const=0;
|
||||
|
||||
virtual int get_input_value_port_count() const=0;
|
||||
virtual int get_output_value_port_count() const=0;
|
||||
|
||||
|
||||
virtual PropertyInfo get_input_value_port_info(int p_idx) const=0;
|
||||
virtual PropertyInfo get_output_value_port_info(int p_idx) const=0;
|
||||
|
||||
virtual String get_caption() const=0;
|
||||
virtual String get_text() const=0;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance)=0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptNodeInstance {
|
||||
public:
|
||||
|
||||
virtual int step()=0; //do a step, return which sequence port to go out
|
||||
|
||||
virtual Variant get_input_value(int p_idx)=0;
|
||||
virtual Variant get_output_value(int p_idx)=0;
|
||||
|
||||
virtual VisualScriptNode* get_node()=0;
|
||||
|
||||
virtual ~VisualScriptNodeInstance();
|
||||
};
|
||||
|
||||
|
||||
class VisualScript : public Script {
|
||||
|
||||
OBJ_TYPE( VisualScript, Script )
|
||||
|
||||
RES_BASE_EXTENSION("vs");
|
||||
|
||||
public:
|
||||
|
||||
struct SequenceConnection {
|
||||
|
||||
union {
|
||||
|
||||
struct {
|
||||
uint64_t from_node : 24;
|
||||
uint64_t from_output : 16;
|
||||
uint64_t to_node : 24;
|
||||
};
|
||||
uint64_t id;
|
||||
};
|
||||
|
||||
bool operator<(const SequenceConnection& p_connection) const {
|
||||
|
||||
return id<p_connection.id;
|
||||
}
|
||||
};
|
||||
|
||||
struct DataConnection {
|
||||
|
||||
union {
|
||||
|
||||
struct {
|
||||
uint64_t from_node : 24;
|
||||
uint64_t from_port : 8;
|
||||
uint64_t to_node : 24;
|
||||
uint64_t to_port : 8;
|
||||
};
|
||||
uint64_t id;
|
||||
};
|
||||
|
||||
bool operator<(const DataConnection& p_connection) const {
|
||||
|
||||
return id<p_connection.id;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private:
|
||||
|
||||
StringName base_type;
|
||||
struct Argument {
|
||||
String name;
|
||||
Variant::Type type;
|
||||
};
|
||||
|
||||
struct Function {
|
||||
struct NodeData {
|
||||
Point2 pos;
|
||||
Ref<VisualScriptNode> node;
|
||||
};
|
||||
|
||||
Map<int,NodeData> nodes;
|
||||
|
||||
Set<SequenceConnection> sequence_connections;
|
||||
|
||||
Set<DataConnection> data_connections;
|
||||
|
||||
int function_id;
|
||||
|
||||
Function() { function_id=-1; }
|
||||
|
||||
};
|
||||
|
||||
struct Variable {
|
||||
PropertyInfo info;
|
||||
Variant default_value;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Map<StringName,Function> functions;
|
||||
Map<StringName,Variable> variables;
|
||||
Map<StringName,Vector<Argument> > custom_signals;
|
||||
|
||||
void _set_variable_info(const StringName& p_name,const Dictionary& p_info);
|
||||
Dictionary _get_variable_info(const StringName& p_name) const;
|
||||
|
||||
|
||||
void _set_data(const Dictionary& p_data);
|
||||
Dictionary _get_data() const;
|
||||
|
||||
protected:
|
||||
|
||||
void _node_ports_changed(int p_id);
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
|
||||
void add_function(const StringName& p_name);
|
||||
bool has_function(const StringName& p_name) const;
|
||||
void remove_function(const StringName& p_name);
|
||||
void rename_function(const StringName& p_name,const StringName& p_new_name);
|
||||
void get_function_list(List<StringName> *r_functions) const;
|
||||
int get_function_node_id(const StringName& p_name) const;
|
||||
|
||||
|
||||
void add_node(const StringName& p_func,int p_id,const Ref<VisualScriptNode>& p_node,const Point2& p_pos=Point2());
|
||||
void remove_node(const StringName& p_func,int p_id);
|
||||
Ref<VisualScriptNode> get_node(const StringName& p_func,int p_id) const;
|
||||
void set_node_pos(const StringName& p_func,int p_id,const Point2& p_pos);
|
||||
Point2 get_node_pos(const StringName& p_func,int p_id) const;
|
||||
void get_node_list(const StringName& p_func,List<int> *r_nodes) const;
|
||||
|
||||
void sequence_connect(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node);
|
||||
void sequence_disconnect(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node);
|
||||
bool has_sequence_connection(const StringName& p_func,int p_from_node,int p_from_output,int p_to_node) const;
|
||||
void get_sequence_connection_list(const StringName& p_func,List<SequenceConnection> *r_connection) const;
|
||||
|
||||
void data_connect(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port);
|
||||
void data_disconnect(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port);
|
||||
bool has_data_connection(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port) const;
|
||||
void get_data_connection_list(const StringName& p_func,List<DataConnection> *r_connection) const;
|
||||
|
||||
void add_variable(const StringName& p_name,const Variant& p_default_value=Variant());
|
||||
bool has_variable(const StringName& p_name) const;
|
||||
void remove_variable(const StringName& p_name);
|
||||
void set_variable_default_value(const StringName& p_name,const Variant& p_value);
|
||||
Variant get_variable_default_value(const StringName& p_name) const;
|
||||
void set_variable_info(const StringName& p_name,const PropertyInfo& p_info);
|
||||
PropertyInfo get_variable_info(const StringName& p_name) const;
|
||||
void get_variable_list(List<StringName> *r_variables);
|
||||
void rename_variable(const StringName& p_name,const StringName& p_new_name);
|
||||
|
||||
|
||||
void add_custom_signal(const StringName& p_name);
|
||||
bool has_custom_signal(const StringName& p_name) const;
|
||||
void custom_signal_add_argument(const StringName& p_func,Variant::Type p_type,const String& p_name,int p_index=-1);
|
||||
void custom_signal_set_argument_type(const StringName& p_func,int p_argidx,Variant::Type p_type);
|
||||
Variant::Type custom_signal_get_argument_type(const StringName& p_func,int p_argidx) const;
|
||||
void custom_signal_set_argument_name(const StringName& p_func,int p_argidx,const String& p_name);
|
||||
String custom_signal_get_argument_name(const StringName& p_func,int p_argidx) const;
|
||||
void custom_signal_remove_argument(const StringName& p_func,int p_argidx);
|
||||
int custom_signal_get_argument_count(const StringName& p_func) const;
|
||||
void custom_signal_swap_argument(const StringName& p_func,int p_argidx,int p_with_argidx);
|
||||
void remove_custom_signal(const StringName& p_name);
|
||||
void rename_custom_signal(const StringName& p_name,const StringName& p_new_name);
|
||||
|
||||
void get_custom_signal_list(List<StringName> *r_custom_signals) const;
|
||||
|
||||
int get_available_id() const;
|
||||
|
||||
void set_instance_base_type(const StringName& p_type);
|
||||
|
||||
virtual bool can_instance() const;
|
||||
|
||||
virtual StringName get_instance_base_type() const;
|
||||
virtual ScriptInstance* instance_create(Object *p_this);
|
||||
virtual bool instance_has(const Object *p_this) const;
|
||||
|
||||
|
||||
virtual bool has_source_code() const;
|
||||
virtual String get_source_code() const;
|
||||
virtual void set_source_code(const String& p_code);
|
||||
virtual Error reload(bool p_keep_state=false);
|
||||
|
||||
virtual bool is_tool() const;
|
||||
|
||||
virtual String get_node_type() const;
|
||||
|
||||
virtual ScriptLanguage *get_language() const;
|
||||
|
||||
virtual bool has_script_signal(const StringName& p_signal) const;
|
||||
virtual void get_script_signal_list(List<MethodInfo> *r_signals) const;
|
||||
|
||||
virtual bool get_property_default_value(const StringName& p_property,Variant& r_value) const;
|
||||
virtual void get_method_list(List<MethodInfo> *p_list) const;
|
||||
|
||||
|
||||
VisualScript();
|
||||
~VisualScript();
|
||||
};
|
||||
|
||||
|
||||
typedef Ref<VisualScriptNode> (*VisualScriptNodeRegisterFunc)(const String& p_type);
|
||||
|
||||
class VisualScriptLanguage : public ScriptLanguage {
|
||||
|
||||
Map<String,VisualScriptNodeRegisterFunc> register_funcs;
|
||||
public:
|
||||
|
||||
static VisualScriptLanguage* singleton;
|
||||
|
||||
virtual String get_name() const;
|
||||
|
||||
/* LANGUAGE FUNCTIONS */
|
||||
virtual void init();
|
||||
virtual String get_type() const;
|
||||
virtual String get_extension() const;
|
||||
virtual Error execute_file(const String& p_path) ;
|
||||
virtual void finish();
|
||||
|
||||
/* EDITOR FUNCTIONS */
|
||||
virtual void get_reserved_words(List<String> *p_words) const;
|
||||
virtual void get_comment_delimiters(List<String> *p_delimiters) const;
|
||||
virtual void get_string_delimiters(List<String> *p_delimiters) const;
|
||||
virtual String get_template(const String& p_class_name, const String& p_base_class_name) const;
|
||||
virtual bool validate(const String& p_script, int &r_line_error,int &r_col_error,String& r_test_error, const String& p_path="",List<String> *r_functions=NULL) const;
|
||||
virtual Script *create_script() const;
|
||||
virtual bool has_named_classes() const;
|
||||
virtual int find_function(const String& p_function,const String& p_code) const;
|
||||
virtual String make_function(const String& p_class,const String& p_name,const StringArray& p_args) const;
|
||||
virtual void auto_indent_code(String& p_code,int p_from_line,int p_to_line) const;
|
||||
virtual void add_global_constant(const StringName& p_variable,const Variant& p_value);
|
||||
|
||||
|
||||
/* DEBUGGER FUNCTIONS */
|
||||
|
||||
virtual String debug_get_error() const;
|
||||
virtual int debug_get_stack_level_count() const;
|
||||
virtual int debug_get_stack_level_line(int p_level) const;
|
||||
virtual String debug_get_stack_level_function(int p_level) const;
|
||||
virtual String debug_get_stack_level_source(int p_level) const;
|
||||
virtual void debug_get_stack_level_locals(int p_level,List<String> *p_locals, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1);
|
||||
virtual void debug_get_stack_level_members(int p_level,List<String> *p_members, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1);
|
||||
virtual void debug_get_globals(List<String> *p_locals, List<Variant> *p_values, int p_max_subitems=-1,int p_max_depth=-1);
|
||||
virtual String debug_parse_stack_level_expression(int p_level,const String& p_expression,int p_max_subitems=-1,int p_max_depth=-1);
|
||||
|
||||
|
||||
virtual void reload_all_scripts();
|
||||
virtual void reload_tool_script(const Ref<Script>& p_script,bool p_soft_reload);
|
||||
/* LOADER FUNCTIONS */
|
||||
|
||||
virtual void get_recognized_extensions(List<String> *p_extensions) const;
|
||||
virtual void get_public_functions(List<MethodInfo> *p_functions) const;
|
||||
virtual void get_public_constants(List<Pair<String,Variant> > *p_constants) const;
|
||||
|
||||
virtual void profiling_start();
|
||||
virtual void profiling_stop();
|
||||
|
||||
virtual int profiling_get_accumulated_data(ProfilingInfo *p_info_arr,int p_info_max);
|
||||
virtual int profiling_get_frame_data(ProfilingInfo *p_info_arr,int p_info_max);
|
||||
|
||||
void add_register_func(const String& p_name,VisualScriptNodeRegisterFunc p_func);
|
||||
Ref<VisualScriptNode> create_node_from_name(const String& p_name);
|
||||
void get_registered_node_names(List<String> *r_names);
|
||||
|
||||
|
||||
VisualScriptLanguage();
|
||||
|
||||
};
|
||||
|
||||
//aid for registering
|
||||
template<class T>
|
||||
static Ref<VisualScriptNode> create_node_generic(const String& p_name) {
|
||||
|
||||
Ref<T> node;
|
||||
node.instance();
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // VSCRIPT_H
|
||||
641
modules/visual_script/visual_script_builtin_funcs.cpp
Normal file
641
modules/visual_script/visual_script_builtin_funcs.cpp
Normal file
@@ -0,0 +1,641 @@
|
||||
#include "visual_script_builtin_funcs.h"
|
||||
|
||||
|
||||
const char* VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX]={
|
||||
"sin",
|
||||
"cos",
|
||||
"tan",
|
||||
"sinh",
|
||||
"cosh",
|
||||
"tanh",
|
||||
"asin",
|
||||
"acos",
|
||||
"atan",
|
||||
"atan2",
|
||||
"sqrt",
|
||||
"fmod",
|
||||
"fposmod",
|
||||
"floor",
|
||||
"ceil",
|
||||
"round",
|
||||
"abs",
|
||||
"sign",
|
||||
"pow",
|
||||
"log",
|
||||
"exp",
|
||||
"is_nan",
|
||||
"is_inf",
|
||||
"ease",
|
||||
"decimals",
|
||||
"stepify",
|
||||
"lerp",
|
||||
"dectime",
|
||||
"randomize",
|
||||
"randi",
|
||||
"randf",
|
||||
"rand_range",
|
||||
"seed",
|
||||
"rand_seed",
|
||||
"deg2rad",
|
||||
"rad2deg",
|
||||
"linear2db",
|
||||
"db2linear",
|
||||
"max",
|
||||
"min",
|
||||
"clamp",
|
||||
"nearest_po2",
|
||||
"weakref",
|
||||
"funcref",
|
||||
"convert",
|
||||
"typeof",
|
||||
"type_exists",
|
||||
"str",
|
||||
"print",
|
||||
"printerr",
|
||||
"printraw",
|
||||
"var2str",
|
||||
"str2var",
|
||||
"var2bytes",
|
||||
"bytes2var",
|
||||
};
|
||||
|
||||
|
||||
|
||||
int VisualScriptBuiltinFunc::get_output_sequence_port_count() const {
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool VisualScriptBuiltinFunc::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptBuiltinFunc::get_input_value_port_count() const{
|
||||
|
||||
|
||||
switch(func) {
|
||||
|
||||
case MATH_RANDOMIZE:
|
||||
case MATH_RAND:
|
||||
case MATH_RANDF:
|
||||
return 0;
|
||||
case MATH_SIN:
|
||||
case MATH_COS:
|
||||
case MATH_TAN:
|
||||
case MATH_SINH:
|
||||
case MATH_COSH:
|
||||
case MATH_TANH:
|
||||
case MATH_ASIN:
|
||||
case MATH_ACOS:
|
||||
case MATH_ATAN:
|
||||
case MATH_SQRT:
|
||||
case MATH_FLOOR:
|
||||
case MATH_CEIL:
|
||||
case MATH_ROUND:
|
||||
case MATH_ABS:
|
||||
case MATH_SIGN:
|
||||
case MATH_LOG:
|
||||
case MATH_EXP:
|
||||
case MATH_ISNAN:
|
||||
case MATH_ISINF:
|
||||
case MATH_DECIMALS:
|
||||
case MATH_SEED:
|
||||
case MATH_RANDSEED:
|
||||
case MATH_DEG2RAD:
|
||||
case MATH_RAD2DEG:
|
||||
case MATH_LINEAR2DB:
|
||||
case MATH_DB2LINEAR:
|
||||
case LOGIC_NEAREST_PO2:
|
||||
case OBJ_WEAKREF:
|
||||
case TYPE_OF:
|
||||
case TEXT_STR:
|
||||
case TEXT_PRINT:
|
||||
case TEXT_PRINTERR:
|
||||
case TEXT_PRINTRAW:
|
||||
case VAR_TO_STR:
|
||||
case STR_TO_VAR:
|
||||
case VAR_TO_BYTES:
|
||||
case BYTES_TO_VAR:
|
||||
case TYPE_EXISTS:
|
||||
return 1;
|
||||
case MATH_ATAN2:
|
||||
case MATH_FMOD:
|
||||
case MATH_FPOSMOD:
|
||||
case MATH_POW:
|
||||
case MATH_EASE:
|
||||
case MATH_STEPIFY:
|
||||
case MATH_RANDOM:
|
||||
case LOGIC_MAX:
|
||||
case LOGIC_MIN:
|
||||
case FUNC_FUNCREF:
|
||||
case TYPE_CONVERT:
|
||||
return 2;
|
||||
case MATH_LERP:
|
||||
case MATH_DECTIME:
|
||||
case LOGIC_CLAMP:
|
||||
return 3;
|
||||
case FUNC_MAX:{}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
int VisualScriptBuiltinFunc::get_output_value_port_count() const{
|
||||
|
||||
switch(func) {
|
||||
case MATH_RANDOMIZE:
|
||||
case TEXT_PRINT:
|
||||
case TEXT_PRINTERR:
|
||||
case TEXT_PRINTRAW:
|
||||
case MATH_SEED:
|
||||
return 0;
|
||||
case MATH_RANDSEED:
|
||||
return 2;
|
||||
default:
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
String VisualScriptBuiltinFunc::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
return String();
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const{
|
||||
|
||||
switch(func) {
|
||||
|
||||
case MATH_SIN:
|
||||
case MATH_COS:
|
||||
case MATH_TAN:
|
||||
case MATH_SINH:
|
||||
case MATH_COSH:
|
||||
case MATH_TANH:
|
||||
case MATH_ASIN:
|
||||
case MATH_ACOS:
|
||||
case MATH_ATAN:
|
||||
case MATH_ATAN2:
|
||||
case MATH_SQRT: {
|
||||
return PropertyInfo(Variant::REAL,"num");
|
||||
} break;
|
||||
case MATH_FMOD:
|
||||
case MATH_FPOSMOD: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"x");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"y");
|
||||
} break;
|
||||
case MATH_FLOOR:
|
||||
case MATH_CEIL:
|
||||
case MATH_ROUND:
|
||||
case MATH_ABS:
|
||||
case MATH_SIGN: {
|
||||
return PropertyInfo(Variant::REAL,"num");
|
||||
|
||||
} break;
|
||||
|
||||
case MATH_POW: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"x");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"y");
|
||||
} break;
|
||||
case MATH_LOG:
|
||||
case MATH_EXP:
|
||||
case MATH_ISNAN:
|
||||
case MATH_ISINF: {
|
||||
return PropertyInfo(Variant::REAL,"num");
|
||||
} break;
|
||||
case MATH_EASE: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"s");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"curve");
|
||||
} break;
|
||||
case MATH_DECIMALS: {
|
||||
return PropertyInfo(Variant::REAL,"step");
|
||||
} break;
|
||||
case MATH_STEPIFY: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"s");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"steps");
|
||||
} break;
|
||||
case MATH_LERP: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"from");
|
||||
else if (p_idx==1)
|
||||
return PropertyInfo(Variant::REAL,"to");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"weight");
|
||||
|
||||
} break;
|
||||
case MATH_DECTIME: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"value");
|
||||
else if (p_idx==1)
|
||||
return PropertyInfo(Variant::REAL,"amount");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"step");
|
||||
} break;
|
||||
case MATH_RANDOMIZE: {
|
||||
|
||||
} break;
|
||||
case MATH_RAND: {
|
||||
|
||||
} break;
|
||||
case MATH_RANDF: {
|
||||
|
||||
} break;
|
||||
case MATH_RANDOM: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"from");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"to");
|
||||
} break;
|
||||
case MATH_SEED: {
|
||||
return PropertyInfo(Variant::INT,"seed");
|
||||
} break;
|
||||
case MATH_RANDSEED: {
|
||||
return PropertyInfo(Variant::INT,"seed");
|
||||
} break;
|
||||
case MATH_DEG2RAD: {
|
||||
return PropertyInfo(Variant::REAL,"deg");
|
||||
} break;
|
||||
case MATH_RAD2DEG: {
|
||||
return PropertyInfo(Variant::REAL,"rad");
|
||||
} break;
|
||||
case MATH_LINEAR2DB: {
|
||||
return PropertyInfo(Variant::REAL,"nrg");
|
||||
} break;
|
||||
case MATH_DB2LINEAR: {
|
||||
return PropertyInfo(Variant::REAL,"db");
|
||||
} break;
|
||||
case LOGIC_MAX: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"a");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"b");
|
||||
} break;
|
||||
case LOGIC_MIN: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"a");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"b");
|
||||
} break;
|
||||
case LOGIC_CLAMP: {
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"a");
|
||||
else if (p_idx==0)
|
||||
return PropertyInfo(Variant::REAL,"min");
|
||||
else
|
||||
return PropertyInfo(Variant::REAL,"max");
|
||||
} break;
|
||||
case LOGIC_NEAREST_PO2: {
|
||||
return PropertyInfo(Variant::INT,"num");
|
||||
} break;
|
||||
case OBJ_WEAKREF: {
|
||||
|
||||
return PropertyInfo(Variant::OBJECT,"source");
|
||||
|
||||
} break;
|
||||
case FUNC_FUNCREF: {
|
||||
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::OBJECT,"instance");
|
||||
else
|
||||
return PropertyInfo(Variant::STRING,"funcname");
|
||||
|
||||
} break;
|
||||
case TYPE_CONVERT: {
|
||||
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::NIL,"what");
|
||||
else
|
||||
return PropertyInfo(Variant::STRING,"type");
|
||||
} break;
|
||||
case TYPE_OF: {
|
||||
return PropertyInfo(Variant::NIL,"what");
|
||||
|
||||
} break;
|
||||
case TYPE_EXISTS: {
|
||||
|
||||
return PropertyInfo(Variant::STRING,"type");
|
||||
|
||||
} break;
|
||||
case TEXT_STR: {
|
||||
|
||||
return PropertyInfo(Variant::NIL,"value");
|
||||
|
||||
|
||||
} break;
|
||||
case TEXT_PRINT: {
|
||||
|
||||
return PropertyInfo(Variant::NIL,"value");
|
||||
|
||||
} break;
|
||||
case TEXT_PRINTERR: {
|
||||
return PropertyInfo(Variant::NIL,"value");
|
||||
|
||||
} break;
|
||||
case TEXT_PRINTRAW: {
|
||||
|
||||
return PropertyInfo(Variant::NIL,"value");
|
||||
|
||||
} break;
|
||||
case VAR_TO_STR: {
|
||||
return PropertyInfo(Variant::NIL,"var");
|
||||
|
||||
} break;
|
||||
case STR_TO_VAR: {
|
||||
|
||||
return PropertyInfo(Variant::STRING,"string");
|
||||
} break;
|
||||
case VAR_TO_BYTES: {
|
||||
return PropertyInfo(Variant::NIL,"var");
|
||||
|
||||
} break;
|
||||
case BYTES_TO_VAR: {
|
||||
|
||||
return PropertyInfo(Variant::RAW_ARRAY,"bytes");
|
||||
} break;
|
||||
case FUNC_MAX:{}
|
||||
}
|
||||
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) const{
|
||||
|
||||
Variant::Type t=Variant::NIL;
|
||||
switch(func) {
|
||||
|
||||
case MATH_SIN:
|
||||
case MATH_COS:
|
||||
case MATH_TAN:
|
||||
case MATH_SINH:
|
||||
case MATH_COSH:
|
||||
case MATH_TANH:
|
||||
case MATH_ASIN:
|
||||
case MATH_ACOS:
|
||||
case MATH_ATAN:
|
||||
case MATH_ATAN2:
|
||||
case MATH_SQRT:
|
||||
case MATH_FMOD:
|
||||
case MATH_FPOSMOD:
|
||||
case MATH_FLOOR:
|
||||
case MATH_CEIL:
|
||||
t=Variant::REAL;
|
||||
case MATH_ROUND: {
|
||||
t=Variant::INT;
|
||||
} break;
|
||||
case MATH_ABS: {
|
||||
t=Variant::NIL;
|
||||
} break;
|
||||
case MATH_SIGN: {
|
||||
t=Variant::NIL;
|
||||
} break;
|
||||
case MATH_POW:
|
||||
case MATH_LOG:
|
||||
case MATH_EXP: {
|
||||
t=Variant::REAL;
|
||||
} break;
|
||||
case MATH_ISNAN:
|
||||
case MATH_ISINF: {
|
||||
t=Variant::BOOL;
|
||||
} break;
|
||||
case MATH_EASE: {
|
||||
t=Variant::REAL;
|
||||
} break;
|
||||
case MATH_DECIMALS: {
|
||||
t=Variant::INT;
|
||||
} break;
|
||||
case MATH_STEPIFY:
|
||||
case MATH_LERP:
|
||||
case MATH_DECTIME: {
|
||||
t=Variant::REAL;
|
||||
|
||||
} break;
|
||||
case MATH_RANDOMIZE: {
|
||||
|
||||
} break;
|
||||
case MATH_RAND: {
|
||||
|
||||
t=Variant::INT;
|
||||
} break;
|
||||
case MATH_RANDF:
|
||||
case MATH_RANDOM: {
|
||||
t=Variant::REAL;
|
||||
} break;
|
||||
case MATH_SEED: {
|
||||
|
||||
} break;
|
||||
case MATH_RANDSEED: {
|
||||
|
||||
if (p_idx==0)
|
||||
return PropertyInfo(Variant::INT,"rnd");
|
||||
else
|
||||
return PropertyInfo(Variant::INT,"seed");
|
||||
} break;
|
||||
case MATH_DEG2RAD:
|
||||
case MATH_RAD2DEG:
|
||||
case MATH_LINEAR2DB:
|
||||
case MATH_DB2LINEAR: {
|
||||
t=Variant::REAL;
|
||||
} break;
|
||||
case LOGIC_MAX:
|
||||
case LOGIC_MIN:
|
||||
case LOGIC_CLAMP: {
|
||||
|
||||
|
||||
} break;
|
||||
|
||||
case LOGIC_NEAREST_PO2: {
|
||||
t=Variant::NIL;
|
||||
} break;
|
||||
case OBJ_WEAKREF: {
|
||||
|
||||
t=Variant::OBJECT;
|
||||
|
||||
} break;
|
||||
case FUNC_FUNCREF: {
|
||||
|
||||
t=Variant::OBJECT;
|
||||
|
||||
} break;
|
||||
case TYPE_CONVERT: {
|
||||
|
||||
|
||||
|
||||
} break;
|
||||
case TYPE_OF: {
|
||||
t=Variant::INT;
|
||||
|
||||
} break;
|
||||
case TYPE_EXISTS: {
|
||||
|
||||
t=Variant::BOOL;
|
||||
|
||||
} break;
|
||||
case TEXT_STR: {
|
||||
|
||||
t=Variant::STRING;
|
||||
|
||||
} break;
|
||||
case TEXT_PRINT: {
|
||||
|
||||
|
||||
} break;
|
||||
case TEXT_PRINTERR: {
|
||||
|
||||
} break;
|
||||
case TEXT_PRINTRAW: {
|
||||
|
||||
} break;
|
||||
case VAR_TO_STR: {
|
||||
t=Variant::STRING;
|
||||
} break;
|
||||
case STR_TO_VAR: {
|
||||
|
||||
} break;
|
||||
case VAR_TO_BYTES: {
|
||||
t=Variant::RAW_ARRAY;
|
||||
|
||||
} break;
|
||||
case BYTES_TO_VAR: {
|
||||
|
||||
|
||||
} break;
|
||||
case FUNC_MAX:{}
|
||||
}
|
||||
|
||||
return PropertyInfo(t,"");
|
||||
}
|
||||
|
||||
String VisualScriptBuiltinFunc::get_caption() const {
|
||||
|
||||
return "BuiltinFunc";
|
||||
}
|
||||
|
||||
String VisualScriptBuiltinFunc::get_text() const {
|
||||
|
||||
return func_name[func];
|
||||
}
|
||||
|
||||
void VisualScriptBuiltinFunc::set_func(BuiltinFunc p_which) {
|
||||
|
||||
ERR_FAIL_INDEX(p_which,FUNC_MAX);
|
||||
func=p_which;
|
||||
_change_notify();
|
||||
emit_signal("ports_changed");
|
||||
}
|
||||
|
||||
VisualScriptBuiltinFunc::BuiltinFunc VisualScriptBuiltinFunc::get_func() {
|
||||
return func;
|
||||
}
|
||||
|
||||
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptBuiltinFunc::instance(VScriptInstance* p_instance) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void VisualScriptBuiltinFunc::_bind_methods() {
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_func","which"),&VisualScriptBuiltinFunc::set_func);
|
||||
ObjectTypeDB::bind_method(_MD("get_func"),&VisualScriptBuiltinFunc::get_func);
|
||||
|
||||
String cc;
|
||||
|
||||
for(int i=0;i<FUNC_MAX;i++) {
|
||||
|
||||
if (i>0)
|
||||
cc+=",";
|
||||
cc+=func_name[i];
|
||||
}
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT,"function",PROPERTY_HINT_ENUM,cc),_SCS("set_func"),_SCS("get_func"));
|
||||
}
|
||||
|
||||
VisualScriptBuiltinFunc::VisualScriptBuiltinFunc() {
|
||||
|
||||
func=MATH_SIN;
|
||||
}
|
||||
|
||||
template<VisualScriptBuiltinFunc::BuiltinFunc func>
|
||||
static Ref<VisualScriptNode> create_builtin_func_node(const String& p_name) {
|
||||
|
||||
Ref<VisualScriptBuiltinFunc> node;
|
||||
node.instance();
|
||||
node->set_func(func);
|
||||
return node;
|
||||
}
|
||||
|
||||
void register_visual_script_builtin_func_node() {
|
||||
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/sin",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SIN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/cos",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_COS>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/tan",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_TAN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/sinh",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SINH>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/cosh",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_COSH>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/tanh",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_TANH>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/asin",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ASIN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/acos",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ACOS>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/atan",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ATAN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/atan2",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ATAN2>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/sqrt",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SQRT>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/fmod",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_FMOD>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/fposmod",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_FPOSMOD>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/floor",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_FLOOR>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/ceil",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_CEIL>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/round",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ROUND>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/abs",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ABS>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/sign",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SIGN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/pow",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_POW>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/log",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_LOG>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/exp",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_EXP>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/isnan",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ISNAN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/isinf",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_ISINF>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/ease",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_EASE>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/decimals",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DECIMALS>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/stepify",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_STEPIFY>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/lerp",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_LERP>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/dectime",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DECTIME>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/randomize",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOMIZE>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/rand",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RAND>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/randf",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/random",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOM>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/seed",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SEED>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/randseed",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDSEED>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/deg2rad",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DEG2RAD>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/rad2deg",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RAD2DEG>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/linear2db",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_LINEAR2DB>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/db2linear",create_builtin_func_node<VisualScriptBuiltinFunc::MATH_DB2LINEAR>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/max",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_MAX>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/min",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_MIN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/clamp",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_CLAMP>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/nearest_po2",create_builtin_func_node<VisualScriptBuiltinFunc::LOGIC_NEAREST_PO2>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/weakref",create_builtin_func_node<VisualScriptBuiltinFunc::OBJ_WEAKREF>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/funcref",create_builtin_func_node<VisualScriptBuiltinFunc::FUNC_FUNCREF>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/convert",create_builtin_func_node<VisualScriptBuiltinFunc::TYPE_CONVERT>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/typeof",create_builtin_func_node<VisualScriptBuiltinFunc::TYPE_OF>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/type_exists",create_builtin_func_node<VisualScriptBuiltinFunc::TYPE_EXISTS>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/str",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_STR>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/print",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINT>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/printerr",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTERR>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/printraw",create_builtin_func_node<VisualScriptBuiltinFunc::TEXT_PRINTRAW>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/var2str",create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_STR>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/str2var",create_builtin_func_node<VisualScriptBuiltinFunc::STR_TO_VAR>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/var2bytes",create_builtin_func_node<VisualScriptBuiltinFunc::VAR_TO_BYTES>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/builtin/bytes2var",create_builtin_func_node<VisualScriptBuiltinFunc::BYTES_TO_VAR>);
|
||||
|
||||
}
|
||||
109
modules/visual_script/visual_script_builtin_funcs.h
Normal file
109
modules/visual_script/visual_script_builtin_funcs.h
Normal file
@@ -0,0 +1,109 @@
|
||||
#ifndef VISUAL_SCRIPT_BUILTIN_FUNCS_H
|
||||
#define VISUAL_SCRIPT_BUILTIN_FUNCS_H
|
||||
|
||||
#include "visual_script.h"
|
||||
|
||||
|
||||
class VisualScriptBuiltinFunc : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptBuiltinFunc,VisualScriptNode)
|
||||
public:
|
||||
|
||||
enum BuiltinFunc {
|
||||
MATH_SIN,
|
||||
MATH_COS,
|
||||
MATH_TAN,
|
||||
MATH_SINH,
|
||||
MATH_COSH,
|
||||
MATH_TANH,
|
||||
MATH_ASIN,
|
||||
MATH_ACOS,
|
||||
MATH_ATAN,
|
||||
MATH_ATAN2,
|
||||
MATH_SQRT,
|
||||
MATH_FMOD,
|
||||
MATH_FPOSMOD,
|
||||
MATH_FLOOR,
|
||||
MATH_CEIL,
|
||||
MATH_ROUND,
|
||||
MATH_ABS,
|
||||
MATH_SIGN,
|
||||
MATH_POW,
|
||||
MATH_LOG,
|
||||
MATH_EXP,
|
||||
MATH_ISNAN,
|
||||
MATH_ISINF,
|
||||
MATH_EASE,
|
||||
MATH_DECIMALS,
|
||||
MATH_STEPIFY,
|
||||
MATH_LERP,
|
||||
MATH_DECTIME,
|
||||
MATH_RANDOMIZE,
|
||||
MATH_RAND,
|
||||
MATH_RANDF,
|
||||
MATH_RANDOM,
|
||||
MATH_SEED,
|
||||
MATH_RANDSEED,
|
||||
MATH_DEG2RAD,
|
||||
MATH_RAD2DEG,
|
||||
MATH_LINEAR2DB,
|
||||
MATH_DB2LINEAR,
|
||||
LOGIC_MAX,
|
||||
LOGIC_MIN,
|
||||
LOGIC_CLAMP,
|
||||
LOGIC_NEAREST_PO2,
|
||||
OBJ_WEAKREF,
|
||||
FUNC_FUNCREF,
|
||||
TYPE_CONVERT,
|
||||
TYPE_OF,
|
||||
TYPE_EXISTS,
|
||||
TEXT_STR,
|
||||
TEXT_PRINT,
|
||||
TEXT_PRINTERR,
|
||||
TEXT_PRINTRAW,
|
||||
VAR_TO_STR,
|
||||
STR_TO_VAR,
|
||||
VAR_TO_BYTES,
|
||||
BYTES_TO_VAR,
|
||||
FUNC_MAX
|
||||
};
|
||||
|
||||
private:
|
||||
static const char* func_name[FUNC_MAX];
|
||||
BuiltinFunc func;
|
||||
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;
|
||||
|
||||
void set_func(BuiltinFunc p_which);
|
||||
BuiltinFunc get_func();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptBuiltinFunc();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptBuiltinFunc::BuiltinFunc)
|
||||
|
||||
|
||||
void register_visual_script_builtin_func_node();
|
||||
|
||||
|
||||
#endif // VISUAL_SCRIPT_BUILTIN_FUNCS_H
|
||||
1956
modules/visual_script/visual_script_editor.cpp
Normal file
1956
modules/visual_script/visual_script_editor.cpp
Normal file
File diff suppressed because it is too large
Load Diff
147
modules/visual_script/visual_script_editor.h
Normal file
147
modules/visual_script/visual_script_editor.h
Normal file
@@ -0,0 +1,147 @@
|
||||
#ifndef VisualSCRIPT_EDITOR_H
|
||||
#define VisualSCRIPT_EDITOR_H
|
||||
|
||||
#include "tools/editor/plugins/script_editor_plugin.h"
|
||||
#include "visual_script.h"
|
||||
#include "tools/editor/property_editor.h"
|
||||
#include "scene/gui/graph_edit.h"
|
||||
#include "tools/editor/create_dialog.h"
|
||||
|
||||
class VisualScriptEditorSignalEdit;
|
||||
class VisualScriptEditorVariableEdit;
|
||||
|
||||
|
||||
|
||||
class VisualScriptEditor : public ScriptEditorBase {
|
||||
OBJ_TYPE(VisualScriptEditor,ScriptEditorBase)
|
||||
|
||||
enum {
|
||||
TYPE_SEQUENCE=1000,
|
||||
INDEX_BASE_SEQUENCE=1024
|
||||
|
||||
|
||||
};
|
||||
|
||||
Ref<VisualScript> script;
|
||||
|
||||
Button *base_type_select;
|
||||
|
||||
HSplitContainer *main_hsplit;
|
||||
VSplitContainer *left_vsplit;
|
||||
|
||||
GraphEdit *graph;
|
||||
|
||||
VisualScriptEditorSignalEdit *signal_editor;
|
||||
|
||||
AcceptDialog *edit_signal_dialog;
|
||||
PropertyEditor *edit_signal_edit;
|
||||
|
||||
|
||||
VisualScriptEditorVariableEdit *variable_editor;
|
||||
|
||||
AcceptDialog *edit_variable_dialog;
|
||||
PropertyEditor *edit_variable_edit;
|
||||
|
||||
UndoRedo *undo_redo;
|
||||
|
||||
Tree *members;
|
||||
Tree *nodes;
|
||||
|
||||
CreateDialog *select_base_type;
|
||||
|
||||
struct VirtualInMenu {
|
||||
String name;
|
||||
Variant::Type ret;
|
||||
bool ret_variant;
|
||||
Vector< Pair<Variant::Type,String> > args;
|
||||
};
|
||||
|
||||
Map<int,VirtualInMenu> virtuals_in_menu;
|
||||
|
||||
PopupMenu *new_function_menu;
|
||||
|
||||
|
||||
StringName edited_func;
|
||||
|
||||
void _update_graph_connections();
|
||||
void _update_graph(int p_only_id=-1);
|
||||
|
||||
bool updating_members;
|
||||
|
||||
void _update_members();
|
||||
|
||||
StringName selected;
|
||||
|
||||
String _validate_name(const String& p_name) const;
|
||||
|
||||
|
||||
void _node_selected(Node* p_node);
|
||||
|
||||
void _change_base_type_callback();
|
||||
void _change_base_type();
|
||||
void _member_selected();
|
||||
void _member_edited();
|
||||
void _override_pressed(int p_id);
|
||||
|
||||
void _begin_node_move();
|
||||
void _end_node_move();
|
||||
void _move_node(String func,int p_id,const Vector2& p_to);
|
||||
|
||||
void _node_moved(Vector2 p_from,Vector2 p_to, int p_id);
|
||||
void _remove_node(int p_id);
|
||||
void _graph_connected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot);
|
||||
void _graph_disconnected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot);
|
||||
void _node_ports_changed(const String& p_func,int p_id);
|
||||
void _available_node_doubleclicked();
|
||||
|
||||
void _update_available_nodes();
|
||||
|
||||
void _member_button(Object *p_item, int p_column, int p_button);
|
||||
|
||||
|
||||
String revert_on_drag;
|
||||
|
||||
void _input(const InputEvent& p_event);
|
||||
void _on_nodes_delete();
|
||||
void _on_nodes_duplicate();
|
||||
|
||||
Variant get_drag_data_fw(const Point2& p_point,Control* p_from);
|
||||
bool can_drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from) const;
|
||||
void drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
virtual void apply_code();
|
||||
virtual Ref<Script> get_edited_script() const;
|
||||
virtual Vector<String> get_functions();
|
||||
virtual void set_edited_script(const Ref<Script>& p_script);
|
||||
virtual void reload_text();
|
||||
virtual String get_name();
|
||||
virtual Ref<Texture> get_icon();
|
||||
virtual bool is_unsaved();
|
||||
virtual Variant get_edit_state();
|
||||
virtual void set_edit_state(const Variant& p_state);
|
||||
virtual void goto_line(int p_line);
|
||||
virtual void trim_trailing_whitespace();
|
||||
virtual void ensure_focus();
|
||||
virtual void tag_saved_version();
|
||||
virtual void reload(bool p_soft);
|
||||
virtual void get_breakpoints(List<int> *p_breakpoints);
|
||||
virtual bool goto_method(const String& p_method);
|
||||
virtual void add_callback(const String& p_function,StringArray p_args);
|
||||
virtual void update_settings();
|
||||
|
||||
virtual void set_tooltip_request_func(String p_method,Object* p_obj);
|
||||
virtual Control *get_edit_menu();
|
||||
|
||||
static void register_editor();
|
||||
|
||||
VisualScriptEditor();
|
||||
~VisualScriptEditor();
|
||||
};
|
||||
|
||||
#endif // VisualSCRIPT_EDITOR_H
|
||||
418
modules/visual_script/visual_script_flow_control.cpp
Normal file
418
modules/visual_script/visual_script_flow_control.cpp
Normal file
@@ -0,0 +1,418 @@
|
||||
#include "visual_script_flow_control.h"
|
||||
|
||||
//////////////////////////////////////////
|
||||
////////////////RETURN////////////////////
|
||||
//////////////////////////////////////////
|
||||
|
||||
int VisualScriptReturn::get_output_sequence_port_count() const {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool VisualScriptReturn::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptReturn::get_input_value_port_count() const{
|
||||
|
||||
return with_value?1:0;
|
||||
}
|
||||
int VisualScriptReturn::get_output_value_port_count() const{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
String VisualScriptReturn::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
return String();
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptReturn::get_input_value_port_info(int p_idx) const{
|
||||
|
||||
PropertyInfo pinfo;
|
||||
pinfo.name="result";
|
||||
pinfo.type=type;
|
||||
return pinfo;
|
||||
}
|
||||
PropertyInfo VisualScriptReturn::get_output_value_port_info(int p_idx) const{
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
String VisualScriptReturn::get_caption() const {
|
||||
|
||||
return "Return";
|
||||
}
|
||||
|
||||
String VisualScriptReturn::get_text() const {
|
||||
|
||||
return get_name();
|
||||
}
|
||||
|
||||
void VisualScriptReturn::set_return_type(Variant::Type p_type) {
|
||||
|
||||
if (type==p_type)
|
||||
return;
|
||||
type=p_type;
|
||||
emit_signal("ports_changed");
|
||||
|
||||
}
|
||||
|
||||
Variant::Type VisualScriptReturn::get_return_type() const{
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
void VisualScriptReturn::set_enable_return_value(bool p_enable) {
|
||||
if (with_value==p_enable)
|
||||
return;
|
||||
|
||||
with_value=p_enable;
|
||||
emit_signal("ports_changed");
|
||||
}
|
||||
|
||||
bool VisualScriptReturn::is_return_value_enabled() const {
|
||||
|
||||
return with_value;
|
||||
}
|
||||
|
||||
void VisualScriptReturn::_bind_methods() {
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_return_type","type"),&VisualScriptReturn::set_return_type);
|
||||
ObjectTypeDB::bind_method(_MD("get_return_type"),&VisualScriptReturn::get_return_type);
|
||||
ObjectTypeDB::bind_method(_MD("set_enable_return_value","enable"),&VisualScriptReturn::set_enable_return_value);
|
||||
ObjectTypeDB::bind_method(_MD("is_return_value_enabled"),&VisualScriptReturn::is_return_value_enabled);
|
||||
|
||||
String argt="Variant";
|
||||
for(int i=1;i<Variant::VARIANT_MAX;i++) {
|
||||
argt+=","+Variant::get_type_name(Variant::Type(i));
|
||||
}
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"return_value/enabled"),_SCS("set_enable_return_value"),_SCS("is_return_value_enabled"));
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT,"return_value/type",PROPERTY_HINT_ENUM,argt),_SCS("set_return_type"),_SCS("get_return_type"));
|
||||
|
||||
}
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptReturn::instance(VScriptInstance* p_instance) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VisualScriptReturn::VisualScriptReturn() {
|
||||
|
||||
with_value=false;
|
||||
type=Variant::NIL;
|
||||
}
|
||||
|
||||
template<bool with_value>
|
||||
static Ref<VisualScriptNode> create_return_node(const String& p_name) {
|
||||
|
||||
Ref<VisualScriptReturn> node;
|
||||
node.instance();
|
||||
node->set_enable_return_value(with_value);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////
|
||||
////////////////CONDITION/////////////////
|
||||
//////////////////////////////////////////
|
||||
|
||||
int VisualScriptCondition::get_output_sequence_port_count() const {
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
bool VisualScriptCondition::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptCondition::get_input_value_port_count() const{
|
||||
|
||||
return 1;
|
||||
}
|
||||
int VisualScriptCondition::get_output_value_port_count() const{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
String VisualScriptCondition::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
if (p_port==0)
|
||||
return "true";
|
||||
else
|
||||
return "false";
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptCondition::get_input_value_port_info(int p_idx) const{
|
||||
|
||||
PropertyInfo pinfo;
|
||||
pinfo.name="cond";
|
||||
pinfo.type=Variant::BOOL;
|
||||
return pinfo;
|
||||
}
|
||||
PropertyInfo VisualScriptCondition::get_output_value_port_info(int p_idx) const{
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
String VisualScriptCondition::get_caption() const {
|
||||
|
||||
return "Condition";
|
||||
}
|
||||
|
||||
String VisualScriptCondition::get_text() const {
|
||||
|
||||
return "if (cond) is: ";
|
||||
}
|
||||
|
||||
|
||||
void VisualScriptCondition::_bind_methods() {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptCondition::instance(VScriptInstance* p_instance) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VisualScriptCondition::VisualScriptCondition() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////
|
||||
////////////////WHILE/////////////////
|
||||
//////////////////////////////////////////
|
||||
|
||||
int VisualScriptWhile::get_output_sequence_port_count() const {
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
bool VisualScriptWhile::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptWhile::get_input_value_port_count() const{
|
||||
|
||||
return 1;
|
||||
}
|
||||
int VisualScriptWhile::get_output_value_port_count() const{
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
String VisualScriptWhile::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
if (p_port==0)
|
||||
return "repeat";
|
||||
else
|
||||
return "exit";
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptWhile::get_input_value_port_info(int p_idx) const{
|
||||
|
||||
PropertyInfo pinfo;
|
||||
pinfo.name="cond";
|
||||
pinfo.type=Variant::BOOL;
|
||||
return pinfo;
|
||||
}
|
||||
PropertyInfo VisualScriptWhile::get_output_value_port_info(int p_idx) const{
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
String VisualScriptWhile::get_caption() const {
|
||||
|
||||
return "While";
|
||||
}
|
||||
|
||||
String VisualScriptWhile::get_text() const {
|
||||
|
||||
return "while (cond): ";
|
||||
}
|
||||
|
||||
|
||||
void VisualScriptWhile::_bind_methods() {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptWhile::instance(VScriptInstance* p_instance) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VisualScriptWhile::VisualScriptWhile() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////
|
||||
////////////////ITERATOR/////////////////
|
||||
//////////////////////////////////////////
|
||||
|
||||
int VisualScriptIterator::get_output_sequence_port_count() const {
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
bool VisualScriptIterator::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptIterator::get_input_value_port_count() const{
|
||||
|
||||
return 1;
|
||||
}
|
||||
int VisualScriptIterator::get_output_value_port_count() const{
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
String VisualScriptIterator::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
if (p_port==0)
|
||||
return "each";
|
||||
else
|
||||
return "exit";
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptIterator::get_input_value_port_info(int p_idx) const{
|
||||
|
||||
PropertyInfo pinfo;
|
||||
pinfo.name="input";
|
||||
pinfo.type=Variant::NIL;
|
||||
return pinfo;
|
||||
}
|
||||
PropertyInfo VisualScriptIterator::get_output_value_port_info(int p_idx) const{
|
||||
PropertyInfo pinfo;
|
||||
pinfo.name="elem";
|
||||
pinfo.type=Variant::NIL;
|
||||
return pinfo;
|
||||
}
|
||||
String VisualScriptIterator::get_caption() const {
|
||||
|
||||
return "Iterator";
|
||||
}
|
||||
|
||||
String VisualScriptIterator::get_text() const {
|
||||
|
||||
return "for (elem) in (input): ";
|
||||
}
|
||||
|
||||
|
||||
void VisualScriptIterator::_bind_methods() {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptIterator::instance(VScriptInstance* p_instance) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VisualScriptIterator::VisualScriptIterator() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////
|
||||
////////////////SEQUENCE/////////////////
|
||||
//////////////////////////////////////////
|
||||
|
||||
int VisualScriptSequence::get_output_sequence_port_count() const {
|
||||
|
||||
return steps;
|
||||
}
|
||||
|
||||
bool VisualScriptSequence::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptSequence::get_input_value_port_count() const{
|
||||
|
||||
return 0;
|
||||
}
|
||||
int VisualScriptSequence::get_output_value_port_count() const{
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
String VisualScriptSequence::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
return itos(p_port+1);
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptSequence::get_input_value_port_info(int p_idx) const{
|
||||
return PropertyInfo();
|
||||
}
|
||||
PropertyInfo VisualScriptSequence::get_output_value_port_info(int p_idx) const{
|
||||
return PropertyInfo(Variant::INT,"current");
|
||||
}
|
||||
String VisualScriptSequence::get_caption() const {
|
||||
|
||||
return "Sequence";
|
||||
}
|
||||
|
||||
String VisualScriptSequence::get_text() const {
|
||||
|
||||
return "in order: ";
|
||||
}
|
||||
|
||||
void VisualScriptSequence::set_steps(int p_steps) {
|
||||
|
||||
ERR_FAIL_COND(p_steps<1);
|
||||
if (steps==p_steps)
|
||||
return;
|
||||
|
||||
steps=p_steps;
|
||||
emit_signal("ports_changed");
|
||||
|
||||
}
|
||||
|
||||
int VisualScriptSequence::get_steps() const {
|
||||
|
||||
return steps;
|
||||
}
|
||||
|
||||
void VisualScriptSequence::_bind_methods() {
|
||||
|
||||
ObjectTypeDB::bind_method(_MD("set_steps","steps"),&VisualScriptSequence::set_steps);
|
||||
ObjectTypeDB::bind_method(_MD("get_steps"),&VisualScriptSequence::get_steps);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT,"steps",PROPERTY_HINT_RANGE,"1,64,1"),_SCS("set_steps"),_SCS("get_steps"));
|
||||
|
||||
}
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptSequence::instance(VScriptInstance* p_instance) {
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
VisualScriptSequence::VisualScriptSequence() {
|
||||
|
||||
steps=1;
|
||||
}
|
||||
|
||||
void register_visual_script_flow_control_nodes() {
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/return",create_return_node<false>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/return_with_value",create_return_node<true>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/condition",create_node_generic<VisualScriptCondition>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/while",create_node_generic<VisualScriptWhile>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/iterator",create_node_generic<VisualScriptIterator>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/sequence",create_node_generic<VisualScriptSequence>);
|
||||
|
||||
}
|
||||
196
modules/visual_script/visual_script_flow_control.h
Normal file
196
modules/visual_script/visual_script_flow_control.h
Normal file
@@ -0,0 +1,196 @@
|
||||
#ifndef VISUAL_SCRIPT_FLOW_CONTROL_H
|
||||
#define VISUAL_SCRIPT_FLOW_CONTROL_H
|
||||
|
||||
#include "visual_script.h"
|
||||
|
||||
class VisualScriptReturn : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptReturn,VisualScriptNode)
|
||||
|
||||
|
||||
Variant::Type type;
|
||||
bool with_value;
|
||||
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;
|
||||
|
||||
void set_return_type(Variant::Type);
|
||||
Variant::Type get_return_type() const;
|
||||
|
||||
void set_enable_return_value(bool p_enable);
|
||||
bool is_return_value_enabled() const;
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptReturn();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptCondition : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptCondition,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 VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptCondition();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptWhile : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptWhile,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 VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptWhile();
|
||||
};
|
||||
|
||||
|
||||
|
||||
class VisualScriptIterator : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptIterator,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 VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptIterator();
|
||||
};
|
||||
|
||||
|
||||
|
||||
class VisualScriptSequence : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptSequence,VisualScriptNode)
|
||||
|
||||
|
||||
int steps;
|
||||
|
||||
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;
|
||||
|
||||
void set_steps(int p_steps);
|
||||
int get_steps() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptSequence();
|
||||
};
|
||||
|
||||
void register_visual_script_flow_control_nodes();
|
||||
|
||||
|
||||
|
||||
#endif // VISUAL_SCRIPT_FLOW_CONTROL_H
|
||||
1584
modules/visual_script/visual_script_func_nodes.cpp
Normal file
1584
modules/visual_script/visual_script_func_nodes.cpp
Normal file
File diff suppressed because it is too large
Load Diff
325
modules/visual_script/visual_script_func_nodes.h
Normal file
325
modules/visual_script/visual_script_func_nodes.h
Normal file
@@ -0,0 +1,325 @@
|
||||
#ifndef VISUAL_SCRIPT_FUNC_NODES_H
|
||||
#define VISUAL_SCRIPT_FUNC_NODES_H
|
||||
|
||||
#include "visual_script.h"
|
||||
|
||||
|
||||
class VisualScriptFunctionCall : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptFunctionCall,VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
CALL_MODE_NODE_PATH,
|
||||
CALL_MODE_INSTANCE,
|
||||
};
|
||||
private:
|
||||
|
||||
CallMode call_mode;
|
||||
StringName base_type;
|
||||
NodePath base_path;
|
||||
StringName function;
|
||||
int use_default_args;
|
||||
|
||||
Node *_get_base_node() const;
|
||||
StringName _get_base_type() const;
|
||||
|
||||
void _update_defargs();
|
||||
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;
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_function(const StringName& p_type);
|
||||
StringName get_function() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
NodePath get_base_path() const;
|
||||
|
||||
void set_call_mode(CallMode p_mode);
|
||||
CallMode get_call_mode() const;
|
||||
|
||||
void set_use_default_args(int p_amount);
|
||||
int get_use_default_args() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptFunctionCall();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptFunctionCall::CallMode );
|
||||
|
||||
|
||||
class VisualScriptPropertySet : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptPropertySet,VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
CALL_MODE_NODE_PATH,
|
||||
CALL_MODE_INSTANCE,
|
||||
};
|
||||
private:
|
||||
|
||||
CallMode call_mode;
|
||||
StringName base_type;
|
||||
NodePath base_path;
|
||||
StringName property;
|
||||
bool use_builtin_value;
|
||||
Variant builtin_value;
|
||||
|
||||
Node *_get_base_node() const;
|
||||
StringName _get_base_type() const;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_property(const StringName& p_type);
|
||||
StringName get_property() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
NodePath get_base_path() const;
|
||||
|
||||
void set_call_mode(CallMode p_mode);
|
||||
CallMode get_call_mode() const;
|
||||
|
||||
void set_use_builtin_value(bool p_use);
|
||||
bool is_using_builtin_value() const;
|
||||
|
||||
void set_builtin_value(const Variant &p_value);
|
||||
Variant get_builtin_value() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptPropertySet();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptPropertySet::CallMode );
|
||||
|
||||
|
||||
class VisualScriptPropertyGet : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptPropertyGet,VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
CALL_MODE_NODE_PATH,
|
||||
CALL_MODE_INSTANCE,
|
||||
};
|
||||
private:
|
||||
|
||||
CallMode call_mode;
|
||||
StringName base_type;
|
||||
NodePath base_path;
|
||||
StringName property;
|
||||
|
||||
|
||||
Node *_get_base_node() const;
|
||||
StringName _get_base_type() const;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_property(const StringName& p_type);
|
||||
StringName get_property() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
NodePath get_base_path() const;
|
||||
|
||||
void set_call_mode(CallMode p_mode);
|
||||
CallMode get_call_mode() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptPropertyGet();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptPropertyGet::CallMode );
|
||||
|
||||
|
||||
|
||||
class VisualScriptScriptCall : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptScriptCall,VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
CALL_MODE_NODE_PATH,
|
||||
};
|
||||
private:
|
||||
|
||||
CallMode call_mode;
|
||||
NodePath base_path;
|
||||
StringName function;
|
||||
|
||||
|
||||
Node *_get_base_node() const;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void set_function(const StringName& p_type);
|
||||
StringName get_function() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
NodePath get_base_path() const;
|
||||
|
||||
void set_call_mode(CallMode p_mode);
|
||||
CallMode get_call_mode() const;
|
||||
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptScriptCall();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptScriptCall::CallMode );
|
||||
|
||||
|
||||
|
||||
|
||||
class VisualScriptEmitSignal : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptEmitSignal,VisualScriptNode)
|
||||
|
||||
private:
|
||||
|
||||
StringName name;
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void set_signal(const StringName& p_type);
|
||||
StringName get_signal() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptEmitSignal();
|
||||
};
|
||||
|
||||
|
||||
|
||||
void register_visual_script_func_nodes();
|
||||
|
||||
#endif // VISUAL_SCRIPT_FUNC_NODES_H
|
||||
1297
modules/visual_script/visual_script_nodes.cpp
Normal file
1297
modules/visual_script/visual_script_nodes.cpp
Normal file
File diff suppressed because it is too large
Load Diff
394
modules/visual_script/visual_script_nodes.h
Normal file
394
modules/visual_script/visual_script_nodes.h
Normal file
@@ -0,0 +1,394 @@
|
||||
#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<Argument> arguments;
|
||||
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;
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptFunction();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptOperator : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptOperator,VisualScriptNode)
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void set_operator(Variant::Operator p_op);
|
||||
Variant::Operator get_operator() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptOperator();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptVariable : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptVariable,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;
|
||||
|
||||
void set_variable(StringName p_var);
|
||||
StringName get_variable() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptVariable();
|
||||
};
|
||||
|
||||
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;
|
||||
|
||||
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(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptConstant();
|
||||
};
|
||||
|
||||
|
||||
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 VisualScriptNodeInstance* instance(VScriptInstance* 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 VisualScriptNodeInstance* instance(VScriptInstance* 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;
|
||||
|
||||
void set_global_constant(int p_which);
|
||||
int get_global_constant();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptGlobalConstant();
|
||||
};
|
||||
|
||||
|
||||
|
||||
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];
|
||||
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;
|
||||
|
||||
void set_math_constant(MathConstant p_which);
|
||||
MathConstant get_math_constant();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptMathConstant();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST( VisualScriptMathConstant::MathConstant )
|
||||
|
||||
class VisualScriptSingleton : public VisualScriptNode {
|
||||
|
||||
OBJ_TYPE(VisualScriptSingleton,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;
|
||||
|
||||
void set_singleton(const String &p_string);
|
||||
String get_singleton();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptSingleton();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
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;
|
||||
|
||||
void set_node_path(const NodePath &p_path);
|
||||
NodePath get_node_path();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VScriptInstance* p_instance);
|
||||
|
||||
VisualScriptSceneNode();
|
||||
};
|
||||
|
||||
|
||||
|
||||
void register_visual_script_nodes();
|
||||
|
||||
#endif // VISUAL_SCRIPT_NODES_H
|
||||
Reference in New Issue
Block a user