mirror of
https://github.com/godotengine/godot-visual-script.git
synced 2025-12-31 21:48:42 +03:00
A Whole New World (clang-format edition)
I can show you the code Pretty, with proper whitespace Tell me, coder, now when did You last write readable code? I can open your eyes Make you see your bad indent Force you to respect the style The core devs agreed upon A whole new world A new fantastic code format A de facto standard With some sugar Enforced with clang-format A whole new world A dazzling style we all dreamed of And when we read it through It's crystal clear That now we're in a whole new world of code
This commit is contained in:
@@ -28,23 +28,21 @@
|
||||
/*************************************************************************/
|
||||
#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.h"
|
||||
#include "visual_script_builtin_funcs.h"
|
||||
#include "visual_script_flow_control.h"
|
||||
#include "visual_script_yield_nodes.h"
|
||||
#include "visual_script_editor.h"
|
||||
#include "visual_script_expression.h"
|
||||
#include "visual_script_flow_control.h"
|
||||
#include "visual_script_func_nodes.h"
|
||||
#include "visual_script_nodes.h"
|
||||
#include "visual_script_yield_nodes.h"
|
||||
|
||||
|
||||
VisualScriptLanguage *visual_script_language=NULL;
|
||||
|
||||
VisualScriptLanguage *visual_script_language = NULL;
|
||||
|
||||
void register_visual_script_types() {
|
||||
|
||||
visual_script_language=memnew( VisualScriptLanguage );
|
||||
visual_script_language = memnew(VisualScriptLanguage);
|
||||
//script_language_gd->init();
|
||||
ScriptServer::register_language(visual_script_language);
|
||||
|
||||
@@ -78,7 +76,6 @@ void register_visual_script_types() {
|
||||
ClassDB::register_class<VisualScriptPreload>();
|
||||
ClassDB::register_class<VisualScriptTypeCast>();
|
||||
|
||||
|
||||
ClassDB::register_class<VisualScriptFunctionCall>();
|
||||
ClassDB::register_class<VisualScriptPropertySet>();
|
||||
ClassDB::register_class<VisualScriptPropertyGet>();
|
||||
@@ -91,14 +88,13 @@ void register_visual_script_types() {
|
||||
ClassDB::register_class<VisualScriptIterator>();
|
||||
ClassDB::register_class<VisualScriptSequence>();
|
||||
ClassDB::register_class<VisualScriptInputFilter>();
|
||||
ClassDB::register_class<VisualScriptSwitch >();
|
||||
ClassDB::register_class<VisualScriptSwitch>();
|
||||
|
||||
ClassDB::register_class<VisualScriptYield>();
|
||||
ClassDB::register_class<VisualScriptYieldSignal>();
|
||||
|
||||
ClassDB::register_class<VisualScriptBuiltinFunc>();
|
||||
|
||||
|
||||
ClassDB::register_class<VisualScriptExpression>();
|
||||
|
||||
register_visual_script_nodes();
|
||||
@@ -111,13 +107,10 @@ void register_visual_script_types() {
|
||||
#ifdef TOOLS_ENABLED
|
||||
VisualScriptEditor::register_editor();
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
void unregister_visual_script_types() {
|
||||
|
||||
|
||||
unregister_visual_script_nodes();
|
||||
|
||||
ScriptServer::unregister_language(visual_script_language);
|
||||
@@ -126,6 +119,5 @@ void unregister_visual_script_types() {
|
||||
VisualScriptEditor::free_clipboard();
|
||||
#endif
|
||||
if (visual_script_language)
|
||||
memdelete( visual_script_language );
|
||||
|
||||
memdelete(visual_script_language);
|
||||
}
|
||||
|
||||
1827
visual_script.cpp
1827
visual_script.cpp
File diff suppressed because it is too large
Load Diff
425
visual_script.h
425
visual_script.h
@@ -29,19 +29,19 @@
|
||||
#ifndef VSCRIPT_H
|
||||
#define VSCRIPT_H
|
||||
|
||||
#include "script_language.h"
|
||||
#include "os/thread.h"
|
||||
#include "script_language.h"
|
||||
|
||||
class VisualScriptInstance;
|
||||
class VisualScriptNodeInstance;
|
||||
class VisualScript;
|
||||
|
||||
class VisualScriptNode : public Resource {
|
||||
GDCLASS(VisualScriptNode,Resource)
|
||||
GDCLASS(VisualScriptNode, Resource)
|
||||
|
||||
friend class VisualScript;
|
||||
friend class VisualScript;
|
||||
|
||||
Set<VisualScript*> scripts_used;
|
||||
Set<VisualScript *> scripts_used;
|
||||
|
||||
Array default_input_values;
|
||||
bool breakpoint;
|
||||
@@ -50,41 +50,40 @@ friend class VisualScript;
|
||||
Array _get_default_input_values() const;
|
||||
|
||||
void validate_input_default_values();
|
||||
protected:
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
void ports_changed_notify();
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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 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 String get_output_sequence_port_text(int p_port) const = 0;
|
||||
|
||||
virtual bool has_mixed_input_and_sequence_ports() const { return false; }
|
||||
|
||||
virtual int get_input_value_port_count() const=0;
|
||||
virtual int get_output_value_port_count() 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 PropertyInfo get_input_value_port_info(int p_idx) const=0;
|
||||
virtual PropertyInfo get_output_value_port_info(int p_idx) const=0;
|
||||
|
||||
void set_default_input_value(int p_port,const Variant& p_value);
|
||||
void set_default_input_value(int p_port, const Variant &p_value);
|
||||
Variant get_default_input_value(int p_port) const;
|
||||
|
||||
virtual String get_caption() const=0;
|
||||
virtual String get_text() const=0;
|
||||
virtual String get_category() const=0;
|
||||
virtual String get_caption() const = 0;
|
||||
virtual String get_text() const = 0;
|
||||
virtual String get_category() const = 0;
|
||||
|
||||
//used by editor, this is not really saved
|
||||
void set_breakpoint(bool p_breakpoint);
|
||||
bool is_breakpoint() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance)=0;
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance) = 0;
|
||||
|
||||
struct TypeGuess {
|
||||
|
||||
@@ -93,32 +92,32 @@ public:
|
||||
StringName GDCLASS;
|
||||
Ref<Script> script;
|
||||
|
||||
TypeGuess() { type=Variant::NIL; ev_type=InputEvent::NONE; }
|
||||
TypeGuess() {
|
||||
type = Variant::NIL;
|
||||
ev_type = InputEvent::NONE;
|
||||
}
|
||||
};
|
||||
|
||||
virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
|
||||
virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const;
|
||||
|
||||
VisualScriptNode();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptNodeInstance {
|
||||
friend class VisualScriptInstance;
|
||||
friend class VisualScriptLanguage; //for debugger
|
||||
|
||||
friend class VisualScriptInstance;
|
||||
friend class VisualScriptLanguage; //for debugger
|
||||
|
||||
enum { //input argument addressing
|
||||
INPUT_SHIFT=1<<24,
|
||||
INPUT_MASK=INPUT_SHIFT-1,
|
||||
INPUT_DEFAULT_VALUE_BIT=INPUT_SHIFT, // from unassigned input port, using default value (edited by user)
|
||||
INPUT_SHIFT = 1 << 24,
|
||||
INPUT_MASK = INPUT_SHIFT - 1,
|
||||
INPUT_DEFAULT_VALUE_BIT = INPUT_SHIFT, // from unassigned input port, using default value (edited by user)
|
||||
};
|
||||
|
||||
|
||||
int id;
|
||||
int sequence_index;
|
||||
VisualScriptNodeInstance **sequence_outputs;
|
||||
int sequence_output_count;
|
||||
Vector<VisualScriptNodeInstance*> dependencies;
|
||||
Vector<VisualScriptNodeInstance *> dependencies;
|
||||
int *input_ports;
|
||||
int input_port_count;
|
||||
int *output_ports;
|
||||
@@ -129,7 +128,6 @@ friend class VisualScriptLanguage; //for debugger
|
||||
VisualScriptNode *base;
|
||||
|
||||
public:
|
||||
|
||||
enum StartMode {
|
||||
START_MODE_BEGIN_SEQUENCE,
|
||||
START_MODE_CONTINUE_SEQUENCE,
|
||||
@@ -137,44 +135,42 @@ public:
|
||||
};
|
||||
|
||||
enum {
|
||||
STEP_SHIFT=1<<24,
|
||||
STEP_MASK=STEP_SHIFT-1,
|
||||
STEP_FLAG_PUSH_STACK_BIT=STEP_SHIFT, //push bit to stack
|
||||
STEP_FLAG_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)
|
||||
STEP_SHIFT = 1 << 24,
|
||||
STEP_MASK = STEP_SHIFT - 1,
|
||||
STEP_FLAG_PUSH_STACK_BIT = STEP_SHIFT, //push bit to stack
|
||||
STEP_FLAG_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)
|
||||
|
||||
FLOW_STACK_PUSHED_BIT=1<<30, //in flow stack, means bit was pushed (must go back here if end of sequence)
|
||||
FLOW_STACK_MASK=FLOW_STACK_PUSHED_BIT-1
|
||||
FLOW_STACK_PUSHED_BIT = 1 << 30, //in flow stack, means bit was pushed (must go back here if end of sequence)
|
||||
FLOW_STACK_MASK = FLOW_STACK_PUSHED_BIT - 1
|
||||
|
||||
};
|
||||
|
||||
_FORCE_INLINE_ int get_input_port_count() const { return input_port_count; }
|
||||
_FORCE_INLINE_ int get_output_port_count() const { return output_port_count; }
|
||||
_FORCE_INLINE_ int get_sequence_output_count() const { return sequence_output_count; }
|
||||
_FORCE_INLINE_ int get_input_port_count() const { return input_port_count; }
|
||||
_FORCE_INLINE_ int get_output_port_count() const { return output_port_count; }
|
||||
_FORCE_INLINE_ int get_sequence_output_count() const { return sequence_output_count; }
|
||||
|
||||
_FORCE_INLINE_ int get_id() const { return id; }
|
||||
_FORCE_INLINE_ int get_id() const { return id; }
|
||||
|
||||
virtual int get_working_memory_size() const { return 0; }
|
||||
|
||||
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str)=0; //do a step, return which sequence port to go out
|
||||
virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Variant::CallError &r_error, String &r_error_str) = 0; //do a step, return which sequence port to go out
|
||||
|
||||
Ref<VisualScriptNode> get_base_node() { return Ref<VisualScriptNode>( base ); }
|
||||
Ref<VisualScriptNode> get_base_node() { return Ref<VisualScriptNode>(base); }
|
||||
|
||||
VisualScriptNodeInstance();
|
||||
virtual ~VisualScriptNodeInstance();
|
||||
};
|
||||
|
||||
|
||||
class VisualScript : public Script {
|
||||
|
||||
GDCLASS( VisualScript, Script )
|
||||
GDCLASS(VisualScript, Script)
|
||||
|
||||
RES_BASE_EXTENSION("vs");
|
||||
|
||||
public:
|
||||
|
||||
struct SequenceConnection {
|
||||
|
||||
union {
|
||||
@@ -187,9 +183,9 @@ public:
|
||||
uint64_t id;
|
||||
};
|
||||
|
||||
bool operator<(const SequenceConnection& p_connection) const {
|
||||
bool operator<(const SequenceConnection &p_connection) const {
|
||||
|
||||
return id<p_connection.id;
|
||||
return id < p_connection.id;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -206,15 +202,14 @@ public:
|
||||
uint64_t id;
|
||||
};
|
||||
|
||||
bool operator<(const DataConnection& p_connection) const {
|
||||
bool operator<(const DataConnection &p_connection) const {
|
||||
|
||||
return id<p_connection.id;
|
||||
return id < p_connection.id;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private:
|
||||
friend class VisualScriptInstance;
|
||||
friend class VisualScriptInstance;
|
||||
|
||||
StringName base_type;
|
||||
struct Argument {
|
||||
@@ -228,7 +223,7 @@ friend class VisualScriptInstance;
|
||||
Ref<VisualScriptNode> node;
|
||||
};
|
||||
|
||||
Map<int,NodeData> nodes;
|
||||
Map<int, NodeData> nodes;
|
||||
|
||||
Set<SequenceConnection> sequence_connections;
|
||||
|
||||
@@ -238,9 +233,7 @@ friend class VisualScriptInstance;
|
||||
|
||||
Vector2 scroll;
|
||||
|
||||
|
||||
Function() { function_id=-1; }
|
||||
|
||||
Function() { function_id = -1; }
|
||||
};
|
||||
|
||||
struct Variable {
|
||||
@@ -249,109 +242,101 @@ friend class VisualScriptInstance;
|
||||
bool _export;
|
||||
};
|
||||
|
||||
Map<StringName, Function> functions;
|
||||
Map<StringName, Variable> variables;
|
||||
Map<StringName, Vector<Argument> > custom_signals;
|
||||
|
||||
|
||||
Map<StringName,Function> functions;
|
||||
Map<StringName,Variable> variables;
|
||||
Map<StringName,Vector<Argument> > custom_signals;
|
||||
|
||||
Map<Object*,VisualScriptInstance*> instances;
|
||||
Map<Object *, VisualScriptInstance *> instances;
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
Set<PlaceHolderScriptInstance*> placeholders;
|
||||
Set<PlaceHolderScriptInstance *> placeholders;
|
||||
//void _update_placeholder(PlaceHolderScriptInstance *p_placeholder);
|
||||
virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder);
|
||||
void _update_placeholders();
|
||||
#endif
|
||||
|
||||
void _set_variable_info(const StringName& p_name,const Dictionary& p_info);
|
||||
Dictionary _get_variable_info(const StringName& p_name) const;
|
||||
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);
|
||||
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 set_function_scroll(const StringName& p_name, const Vector2& p_scroll);
|
||||
Vector2 get_function_scroll(const StringName& p_name) const;
|
||||
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 set_function_scroll(const StringName &p_name, const Vector2 &p_scroll);
|
||||
Vector2 get_function_scroll(const StringName &p_name) const;
|
||||
void get_function_list(List<StringName> *r_functions) const;
|
||||
int get_function_node_id(const StringName& p_name) 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);
|
||||
bool has_node(const StringName &p_func, int p_id) const;
|
||||
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 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);
|
||||
bool has_node(const StringName& p_func,int p_id) const;
|
||||
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 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;
|
||||
bool is_input_value_port_connected(const StringName &p_name, int p_node, int p_port) const;
|
||||
bool get_input_value_port_connection_source(const StringName &p_name, int p_node, int p_port, int *r_node, int *r_port) 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;
|
||||
bool is_input_value_port_connected(const StringName& p_name,int p_node,int p_port) const;
|
||||
bool get_input_value_port_connection_source(const StringName& p_name,int p_node,int p_port,int *r_node,int *r_port) const;
|
||||
|
||||
void add_variable(const StringName& p_name,const Variant& p_default_value=Variant(),bool p_export=false);
|
||||
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 set_variable_export(const StringName& p_name,bool p_export);
|
||||
bool get_variable_export(const StringName& p_name) const;
|
||||
void add_variable(const StringName &p_name, const Variant &p_default_value = Variant(), bool p_export = false);
|
||||
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 set_variable_export(const StringName &p_name, bool p_export);
|
||||
bool get_variable_export(const StringName &p_name) const;
|
||||
void get_variable_list(List<StringName> *r_variables) const;
|
||||
void rename_variable(const StringName& p_name,const StringName& p_new_name);
|
||||
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 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);
|
||||
void set_instance_base_type(const StringName &p_type);
|
||||
|
||||
virtual bool can_instance() const;
|
||||
|
||||
virtual Ref<Script> get_base_script() const;
|
||||
virtual StringName get_instance_base_type() const;
|
||||
virtual ScriptInstance* instance_create(Object *p_this);
|
||||
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 void set_source_code(const String &p_code);
|
||||
virtual Error reload(bool p_keep_state = false);
|
||||
|
||||
virtual bool is_tool() const;
|
||||
|
||||
@@ -359,14 +344,14 @@ public:
|
||||
|
||||
virtual ScriptLanguage *get_language() const;
|
||||
|
||||
virtual bool has_script_signal(const StringName& p_signal) 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 bool get_property_default_value(const StringName &p_property, Variant &r_value) const;
|
||||
virtual void get_script_method_list(List<MethodInfo> *p_list) const;
|
||||
|
||||
virtual bool has_method(const StringName& p_method) const;
|
||||
virtual MethodInfo get_method_info(const StringName& p_method) const;
|
||||
virtual bool has_method(const StringName &p_method) const;
|
||||
virtual MethodInfo get_method_info(const StringName &p_method) const;
|
||||
|
||||
virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
|
||||
|
||||
@@ -378,13 +363,12 @@ public:
|
||||
~VisualScript();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptInstance : public ScriptInstance {
|
||||
Object *owner;
|
||||
Ref<VisualScript> script;
|
||||
|
||||
Map<StringName,Variant> variables; //using variable path, not script
|
||||
Map<int,VisualScriptNodeInstance*> instances;
|
||||
Map<StringName, Variant> variables; //using variable path, not script
|
||||
Map<int, VisualScriptNodeInstance *> instances;
|
||||
|
||||
struct Function {
|
||||
int node;
|
||||
@@ -398,50 +382,48 @@ class VisualScriptInstance : public ScriptInstance {
|
||||
bool valid;
|
||||
};
|
||||
|
||||
Map<StringName,Function> functions;
|
||||
Map<StringName, Function> functions;
|
||||
|
||||
Vector<Variant> default_values;
|
||||
int max_input_args,max_output_args;
|
||||
int max_input_args, max_output_args;
|
||||
|
||||
StringName source;
|
||||
|
||||
void _dependency_step(VisualScriptNodeInstance* node, int p_pass, int *pass_stack, const Variant **input_args, Variant **output_args, Variant *variant_stack, Variant::CallError& r_error, String& error_str, VisualScriptNodeInstance **r_error_node);
|
||||
Variant _call_internal(const StringName& p_method, void* p_stack,int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield,Variant::CallError &r_error);
|
||||
|
||||
void _dependency_step(VisualScriptNodeInstance *node, int p_pass, int *pass_stack, const Variant **input_args, Variant **output_args, Variant *variant_stack, Variant::CallError &r_error, String &error_str, VisualScriptNodeInstance **r_error_node);
|
||||
Variant _call_internal(const StringName &p_method, void *p_stack, int p_stack_size, VisualScriptNodeInstance *p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield, Variant::CallError &r_error);
|
||||
|
||||
//Map<StringName,Function> functions;
|
||||
friend class VisualScriptFunctionState; //for yield
|
||||
friend class VisualScriptLanguage; //for debugger
|
||||
friend class VisualScriptFunctionState; //for yield
|
||||
friend class VisualScriptLanguage; //for debugger
|
||||
public:
|
||||
virtual bool set(const StringName& p_name, const Variant& p_value);
|
||||
virtual bool get(const StringName& p_name, Variant &r_ret) const;
|
||||
virtual bool set(const StringName &p_name, const Variant &p_value);
|
||||
virtual bool get(const StringName &p_name, Variant &r_ret) const;
|
||||
virtual void get_property_list(List<PropertyInfo> *p_properties) const;
|
||||
virtual Variant::Type get_property_type(const StringName& p_name,bool *r_is_valid=NULL) const;
|
||||
virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = NULL) const;
|
||||
|
||||
virtual void get_method_list(List<MethodInfo> *p_list) const;
|
||||
virtual bool has_method(const StringName& p_method) const;
|
||||
virtual Variant call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error);
|
||||
virtual bool has_method(const StringName &p_method) const;
|
||||
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Variant::CallError &r_error);
|
||||
virtual void notification(int p_notification);
|
||||
|
||||
bool set_variable(const StringName& p_variable,const Variant& p_value) {
|
||||
bool set_variable(const StringName &p_variable, const Variant &p_value) {
|
||||
|
||||
Map<StringName,Variant>::Element *E=variables.find(p_variable);
|
||||
Map<StringName, Variant>::Element *E = variables.find(p_variable);
|
||||
if (!E)
|
||||
return false;
|
||||
|
||||
E->get()=p_value;
|
||||
E->get() = p_value;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool get_variable(const StringName& p_variable,Variant* r_variable) const {
|
||||
bool get_variable(const StringName &p_variable, Variant *r_variable) const {
|
||||
|
||||
const Map<StringName,Variant>::Element *E=variables.find(p_variable);
|
||||
const Map<StringName, Variant>::Element *E = variables.find(p_variable);
|
||||
if (!E)
|
||||
return false;
|
||||
|
||||
*r_variable=E->get();
|
||||
*r_variable = E->get();
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
virtual Ref<Script> get_script() const;
|
||||
@@ -449,22 +431,21 @@ public:
|
||||
_FORCE_INLINE_ VisualScript *get_script_ptr() { return script.ptr(); }
|
||||
_FORCE_INLINE_ Object *get_owner_ptr() { return owner; }
|
||||
|
||||
void create(const Ref<VisualScript>& p_script,Object *p_owner);
|
||||
void create(const Ref<VisualScript> &p_script, Object *p_owner);
|
||||
|
||||
virtual ScriptLanguage *get_language();
|
||||
|
||||
virtual RPCMode get_rpc_mode(const StringName& p_method) const;
|
||||
virtual RPCMode get_rset_mode(const StringName& p_variable) const;
|
||||
virtual RPCMode get_rpc_mode(const StringName &p_method) const;
|
||||
virtual RPCMode get_rset_mode(const StringName &p_variable) const;
|
||||
|
||||
VisualScriptInstance();
|
||||
~VisualScriptInstance();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptFunctionState : public Reference {
|
||||
|
||||
GDCLASS(VisualScriptFunctionState,Reference);
|
||||
friend class VisualScriptInstance;
|
||||
GDCLASS(VisualScriptFunctionState, Reference);
|
||||
friend class VisualScriptInstance;
|
||||
|
||||
ObjectID instance_id;
|
||||
ObjectID script_id;
|
||||
@@ -477,36 +458,34 @@ friend class VisualScriptInstance;
|
||||
int flow_stack_pos;
|
||||
int pass;
|
||||
|
||||
Variant _signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
|
||||
Variant _signal_callback(const Variant **p_args, int p_argcount, Variant::CallError &r_error);
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
void connect_to_signal(Object* p_obj,const String& p_signal,Array p_binds);
|
||||
public:
|
||||
void connect_to_signal(Object *p_obj, const String &p_signal, Array p_binds);
|
||||
bool is_valid() const;
|
||||
Variant resume(Array p_args);
|
||||
VisualScriptFunctionState();
|
||||
~VisualScriptFunctionState();
|
||||
};
|
||||
|
||||
|
||||
typedef Ref<VisualScriptNode> (*VisualScriptNodeRegisterFunc)(const String& p_type);
|
||||
typedef Ref<VisualScriptNode> (*VisualScriptNodeRegisterFunc)(const String &p_type);
|
||||
|
||||
class VisualScriptLanguage : public ScriptLanguage {
|
||||
|
||||
Map<String,VisualScriptNodeRegisterFunc> register_funcs;
|
||||
Map<String, VisualScriptNodeRegisterFunc> register_funcs;
|
||||
|
||||
struct CallLevel {
|
||||
|
||||
Variant *stack;
|
||||
Variant **work_mem;
|
||||
const StringName *function;
|
||||
VisualScriptInstance *instance;
|
||||
int *current_id;
|
||||
|
||||
Variant *stack;
|
||||
Variant **work_mem;
|
||||
const StringName *function;
|
||||
VisualScriptInstance *instance;
|
||||
int *current_id;
|
||||
};
|
||||
|
||||
|
||||
int _debug_parse_err_node;
|
||||
String _debug_parse_err_file;
|
||||
String _debug_error;
|
||||
@@ -520,52 +499,52 @@ public:
|
||||
StringName _step;
|
||||
StringName _subcall;
|
||||
|
||||
static VisualScriptLanguage* singleton;
|
||||
static VisualScriptLanguage *singleton;
|
||||
|
||||
Mutex *lock;
|
||||
|
||||
bool debug_break(const String& p_error,bool p_allow_continue=true);
|
||||
bool debug_break_parse(const String& p_file, int p_node,const String& p_error);
|
||||
bool debug_break(const String &p_error, bool p_allow_continue = true);
|
||||
bool debug_break_parse(const String &p_file, int p_node, const String &p_error);
|
||||
|
||||
_FORCE_INLINE_ void enter_function(VisualScriptInstance *p_instance,const StringName* p_function, Variant *p_stack, Variant **p_work_mem,int *current_id) {
|
||||
_FORCE_INLINE_ void enter_function(VisualScriptInstance *p_instance, const StringName *p_function, Variant *p_stack, Variant **p_work_mem, int *current_id) {
|
||||
|
||||
if (Thread::get_main_ID()!=Thread::get_caller_ID())
|
||||
return; //no support for other threads than main for now
|
||||
if (Thread::get_main_ID() != Thread::get_caller_ID())
|
||||
return; //no support for other threads than main for now
|
||||
|
||||
if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0)
|
||||
ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() +1 );
|
||||
if (ScriptDebugger::get_singleton()->get_lines_left() > 0 && ScriptDebugger::get_singleton()->get_depth() >= 0)
|
||||
ScriptDebugger::get_singleton()->set_depth(ScriptDebugger::get_singleton()->get_depth() + 1);
|
||||
|
||||
if (_debug_call_stack_pos >= _debug_max_call_stack) {
|
||||
//stack overflow
|
||||
_debug_error="Stack Overflow (Stack Size: "+itos(_debug_max_call_stack)+")";
|
||||
ScriptDebugger::get_singleton()->debug(this);
|
||||
return;
|
||||
}
|
||||
if (_debug_call_stack_pos >= _debug_max_call_stack) {
|
||||
//stack overflow
|
||||
_debug_error = "Stack Overflow (Stack Size: " + itos(_debug_max_call_stack) + ")";
|
||||
ScriptDebugger::get_singleton()->debug(this);
|
||||
return;
|
||||
}
|
||||
|
||||
_call_stack[_debug_call_stack_pos].stack=p_stack;
|
||||
_call_stack[_debug_call_stack_pos].instance=p_instance;
|
||||
_call_stack[_debug_call_stack_pos].function=p_function;
|
||||
_call_stack[_debug_call_stack_pos].work_mem=p_work_mem;
|
||||
_call_stack[_debug_call_stack_pos].current_id=current_id;
|
||||
_debug_call_stack_pos++;
|
||||
_call_stack[_debug_call_stack_pos].stack = p_stack;
|
||||
_call_stack[_debug_call_stack_pos].instance = p_instance;
|
||||
_call_stack[_debug_call_stack_pos].function = p_function;
|
||||
_call_stack[_debug_call_stack_pos].work_mem = p_work_mem;
|
||||
_call_stack[_debug_call_stack_pos].current_id = current_id;
|
||||
_debug_call_stack_pos++;
|
||||
}
|
||||
|
||||
_FORCE_INLINE_ void exit_function() {
|
||||
|
||||
if (Thread::get_main_ID()!=Thread::get_caller_ID())
|
||||
return; //no support for other threads than main for now
|
||||
if (Thread::get_main_ID() != Thread::get_caller_ID())
|
||||
return; //no support for other threads than main for now
|
||||
|
||||
if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0)
|
||||
ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() -1 );
|
||||
if (ScriptDebugger::get_singleton()->get_lines_left() > 0 && ScriptDebugger::get_singleton()->get_depth() >= 0)
|
||||
ScriptDebugger::get_singleton()->set_depth(ScriptDebugger::get_singleton()->get_depth() - 1);
|
||||
|
||||
if (_debug_call_stack_pos==0) {
|
||||
if (_debug_call_stack_pos == 0) {
|
||||
|
||||
_debug_error="Stack Underflow (Engine Bug)";
|
||||
ScriptDebugger::get_singleton()->debug(this);
|
||||
return;
|
||||
}
|
||||
_debug_error = "Stack Underflow (Engine Bug)";
|
||||
ScriptDebugger::get_singleton()->debug(this);
|
||||
return;
|
||||
}
|
||||
|
||||
_debug_call_stack_pos--;
|
||||
_debug_call_stack_pos--;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
@@ -576,22 +555,21 @@ public:
|
||||
virtual void init();
|
||||
virtual String get_type() const;
|
||||
virtual String get_extension() const;
|
||||
virtual Error execute_file(const String& p_path) ;
|
||||
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 Ref<Script> 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 Ref<Script> 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 PoolStringArray& 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);
|
||||
|
||||
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 PoolStringArray &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 */
|
||||
|
||||
@@ -600,45 +578,40 @@ public:
|
||||
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 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);
|
||||
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 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);
|
||||
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 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();
|
||||
~VisualScriptLanguage();
|
||||
|
||||
};
|
||||
|
||||
//aid for registering
|
||||
template<class T>
|
||||
static Ref<VisualScriptNode> create_node_generic(const String& p_name) {
|
||||
template <class T>
|
||||
static Ref<VisualScriptNode> create_node_generic(const String &p_name) {
|
||||
|
||||
Ref<T> node;
|
||||
node.instance();
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif // VSCRIPT_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -31,12 +31,10 @@
|
||||
|
||||
#include "visual_script.h"
|
||||
|
||||
|
||||
class VisualScriptBuiltinFunc : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptBuiltinFunc,VisualScriptNode)
|
||||
GDCLASS(VisualScriptBuiltinFunc, VisualScriptNode)
|
||||
public:
|
||||
|
||||
enum BuiltinFunc {
|
||||
MATH_SIN,
|
||||
MATH_COS,
|
||||
@@ -100,27 +98,25 @@ public:
|
||||
|
||||
static int get_func_argument_count(BuiltinFunc p_func);
|
||||
static String get_func_name(BuiltinFunc p_func);
|
||||
static void exec_func(BuiltinFunc p_func, const Variant** p_inputs, Variant* r_return, Variant::CallError& r_error, String& r_error_str);
|
||||
static BuiltinFunc find_function(const String& p_string);
|
||||
static void exec_func(BuiltinFunc p_func, const Variant **p_inputs, Variant *r_return, Variant::CallError &r_error, String &r_error_str);
|
||||
static BuiltinFunc find_function(const String &p_string);
|
||||
|
||||
private:
|
||||
static const char* func_name[FUNC_MAX];
|
||||
static const char *func_name[FUNC_MAX];
|
||||
BuiltinFunc func;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -131,15 +127,13 @@ public:
|
||||
void set_func(BuiltinFunc p_which);
|
||||
BuiltinFunc get_func();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptBuiltinFunc();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptBuiltinFunc::BuiltinFunc)
|
||||
|
||||
|
||||
void register_visual_script_builtin_func_node();
|
||||
|
||||
|
||||
#endif // VISUAL_SCRIPT_BUILTIN_FUNCS_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,26 +29,23 @@
|
||||
#ifndef VISUALSCRIPT_EDITOR_H
|
||||
#define VISUALSCRIPT_EDITOR_H
|
||||
|
||||
#include "editor/plugins/script_editor_plugin.h"
|
||||
#include "visual_script.h"
|
||||
#include "editor/property_editor.h"
|
||||
#include "scene/gui/graph_edit.h"
|
||||
#include "editor/create_dialog.h"
|
||||
#include "editor/plugins/script_editor_plugin.h"
|
||||
#include "editor/property_editor.h"
|
||||
#include "editor/property_selector.h"
|
||||
#include "scene/gui/graph_edit.h"
|
||||
#include "visual_script.h"
|
||||
class VisualScriptEditorSignalEdit;
|
||||
class VisualScriptEditorVariableEdit;
|
||||
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
|
||||
|
||||
class VisualScriptEditor : public ScriptEditorBase {
|
||||
GDCLASS(VisualScriptEditor,ScriptEditorBase)
|
||||
GDCLASS(VisualScriptEditor, ScriptEditorBase)
|
||||
|
||||
enum {
|
||||
TYPE_SEQUENCE=1000,
|
||||
INDEX_BASE_SEQUENCE=1024
|
||||
|
||||
TYPE_SEQUENCE = 1000,
|
||||
INDEX_BASE_SEQUENCE = 1024
|
||||
|
||||
};
|
||||
|
||||
@@ -115,7 +112,7 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
|
||||
bool updating_graph;
|
||||
|
||||
void _show_hint(const String& p_hint);
|
||||
void _show_hint(const String &p_hint);
|
||||
void _hide_timer();
|
||||
|
||||
CreateDialog *select_base_type;
|
||||
@@ -124,18 +121,17 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
String name;
|
||||
Variant::Type ret;
|
||||
bool ret_variant;
|
||||
Vector< Pair<Variant::Type,String> > args;
|
||||
Vector<Pair<Variant::Type, String> > args;
|
||||
};
|
||||
|
||||
Map<int,VirtualInMenu> virtuals_in_menu;
|
||||
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);
|
||||
void _update_graph(int p_only_id = -1);
|
||||
|
||||
bool updating_members;
|
||||
|
||||
@@ -143,12 +139,12 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
|
||||
StringName selected;
|
||||
|
||||
String _validate_name(const String& p_name) const;
|
||||
String _validate_name(const String &p_name) const;
|
||||
|
||||
struct Clipboard {
|
||||
|
||||
Map<int,Ref<VisualScriptNode> > nodes;
|
||||
Map<int,Vector2 > nodes_positions;
|
||||
Map<int, Ref<VisualScriptNode> > nodes;
|
||||
Map<int, Vector2> nodes_positions;
|
||||
|
||||
Set<VisualScript::SequenceConnection> sequence_connections;
|
||||
Set<VisualScript::DataConnection> data_connections;
|
||||
@@ -164,15 +160,14 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
Vector2 port_action_pos;
|
||||
int port_action_new_node;
|
||||
void _port_action_menu(int p_option);
|
||||
void _selected_connect_node_method_or_setget(const String& p_text);
|
||||
|
||||
void _selected_connect_node_method_or_setget(const String &p_text);
|
||||
|
||||
int error_line;
|
||||
|
||||
void _node_selected(Node* p_node);
|
||||
void _node_selected(Node *p_node);
|
||||
void _center_on_node(int p_id);
|
||||
|
||||
void _node_filter_changed(const String& p_text);
|
||||
void _node_filter_changed(const String &p_text);
|
||||
void _change_base_type_callback();
|
||||
void _change_base_type();
|
||||
void _member_selected();
|
||||
@@ -181,82 +176,78 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
|
||||
void _begin_node_move();
|
||||
void _end_node_move();
|
||||
void _move_node(String func,int p_id,const Vector2& p_to);
|
||||
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 _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 _graph_connect_to_empty(const String& p_from,int p_from_slot,const Vector2& p_release_pos);
|
||||
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 _graph_connect_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_pos);
|
||||
|
||||
void _node_ports_changed(const String& p_func,int p_id);
|
||||
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);
|
||||
|
||||
void _expression_text_changed(const String& p_text,int p_id);
|
||||
|
||||
void _expression_text_changed(const String &p_text, int p_id);
|
||||
|
||||
String revert_on_drag;
|
||||
|
||||
void _input(const InputEvent& p_event);
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
int editing_id;
|
||||
int editing_input;
|
||||
|
||||
void _default_value_changed();
|
||||
void _default_value_edited(Node * p_button,int p_id,int p_input_port);
|
||||
void _default_value_edited(Node *p_button, int p_id, int p_input_port);
|
||||
|
||||
void _menu_option(int p_what);
|
||||
|
||||
void _graph_ofs_changed(const Vector2& p_ofs);
|
||||
void _comment_node_resized(const Vector2& p_new_size,int p_node);
|
||||
void _graph_ofs_changed(const Vector2 &p_ofs);
|
||||
void _comment_node_resized(const Vector2 &p_new_size, int p_node);
|
||||
|
||||
int selecting_method_id;
|
||||
void _selected_method(const String& p_method);
|
||||
void _selected_method(const String &p_method);
|
||||
|
||||
void _draw_color_over_button(Object* obj,Color p_color);
|
||||
void _button_resource_previewed(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud);
|
||||
|
||||
VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node,int p_port_action_output,Set<int> &visited_nodes);
|
||||
void _draw_color_over_button(Object *obj, Color p_color);
|
||||
void _button_resource_previewed(const String &p_path, const Ref<Texture> &p_preview, Variant p_ud);
|
||||
|
||||
VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node, int p_port_action_output, Set<int> &visited_nodes);
|
||||
|
||||
protected:
|
||||
|
||||
void _notification(int p_what);
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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 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,bool p_with_error=false);
|
||||
virtual void set_edit_state(const Variant &p_state);
|
||||
virtual void goto_line(int p_line, bool p_with_error = false);
|
||||
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,PoolStringArray p_args);
|
||||
virtual bool goto_method(const String &p_method);
|
||||
virtual void add_callback(const String &p_function, PoolStringArray p_args);
|
||||
virtual void update_settings();
|
||||
virtual void set_debugger_active(bool p_active);
|
||||
virtual void set_tooltip_request_func(String p_method,Object* p_obj);
|
||||
virtual void set_tooltip_request_func(String p_method, Object *p_obj);
|
||||
virtual Control *get_edit_menu();
|
||||
virtual bool can_lose_focus_on_node_selection() { return false; }
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,15 +34,15 @@
|
||||
|
||||
class VisualScriptExpression : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptExpression,VisualScriptNode)
|
||||
friend class VisualScriptNodeInstanceExpression;
|
||||
GDCLASS(VisualScriptExpression, VisualScriptNode)
|
||||
friend class VisualScriptNodeInstanceExpression;
|
||||
|
||||
struct Input {
|
||||
|
||||
Variant::Type type;
|
||||
String name;
|
||||
|
||||
Input() { type=Variant::NIL; }
|
||||
Input() { type = Variant::NIL; }
|
||||
};
|
||||
|
||||
Vector<Input> inputs;
|
||||
@@ -97,28 +97,25 @@ friend class VisualScriptNodeInstanceExpression;
|
||||
TK_MAX
|
||||
};
|
||||
|
||||
static const char* token_name[TK_MAX];
|
||||
static const char *token_name[TK_MAX];
|
||||
struct Token {
|
||||
|
||||
TokenType type;
|
||||
Variant value;
|
||||
};
|
||||
|
||||
|
||||
void _set_error(const String& p_err) {
|
||||
void _set_error(const String &p_err) {
|
||||
if (error_set)
|
||||
return;
|
||||
error_str=p_err;
|
||||
error_set=true;
|
||||
error_str = p_err;
|
||||
error_set = true;
|
||||
}
|
||||
|
||||
Error _get_token(Token& r_token);
|
||||
Error _get_token(Token &r_token);
|
||||
|
||||
String error_str;
|
||||
bool error_set;
|
||||
|
||||
|
||||
|
||||
struct ENode {
|
||||
|
||||
enum Type {
|
||||
@@ -139,8 +136,12 @@ friend class VisualScriptNodeInstanceExpression;
|
||||
|
||||
Type type;
|
||||
|
||||
ENode() { next=NULL; }
|
||||
virtual ~ENode() { if (next) { memdelete(next); } }
|
||||
ENode() { next = NULL; }
|
||||
virtual ~ENode() {
|
||||
if (next) {
|
||||
memdelete(next);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct Expression {
|
||||
@@ -152,22 +153,21 @@ friend class VisualScriptNodeInstanceExpression;
|
||||
};
|
||||
};
|
||||
|
||||
ENode* _parse_expression();
|
||||
ENode *_parse_expression();
|
||||
|
||||
struct InputNode : public ENode {
|
||||
|
||||
int index;
|
||||
InputNode() {
|
||||
type=TYPE_INPUT;
|
||||
type = TYPE_INPUT;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct ConstantNode : public ENode {
|
||||
|
||||
Variant value;
|
||||
ConstantNode() {
|
||||
type=TYPE_CONSTANT;
|
||||
type = TYPE_CONSTANT;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -175,119 +175,104 @@ friend class VisualScriptNodeInstanceExpression;
|
||||
|
||||
Variant::Operator op;
|
||||
|
||||
ENode* nodes[2];
|
||||
ENode *nodes[2];
|
||||
|
||||
OperatorNode() {
|
||||
type=TYPE_OPERATOR;
|
||||
type = TYPE_OPERATOR;
|
||||
}
|
||||
};
|
||||
|
||||
struct SelfNode : public ENode {
|
||||
|
||||
|
||||
SelfNode() {
|
||||
type=TYPE_SELF;
|
||||
type = TYPE_SELF;
|
||||
}
|
||||
};
|
||||
|
||||
struct IndexNode : public ENode {
|
||||
ENode*base;
|
||||
ENode*index;
|
||||
ENode *base;
|
||||
ENode *index;
|
||||
|
||||
IndexNode() {
|
||||
type=TYPE_INDEX;
|
||||
type = TYPE_INDEX;
|
||||
}
|
||||
};
|
||||
|
||||
struct NamedIndexNode : public ENode {
|
||||
ENode*base;
|
||||
ENode *base;
|
||||
StringName name;
|
||||
|
||||
NamedIndexNode() {
|
||||
type=TYPE_NAMED_INDEX;
|
||||
type = TYPE_NAMED_INDEX;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct ConstructorNode : public ENode {
|
||||
Variant::Type data_type;
|
||||
Vector<ENode*> arguments;
|
||||
Vector<ENode *> arguments;
|
||||
|
||||
ConstructorNode() {
|
||||
type=TYPE_CONSTRUCTOR;
|
||||
type = TYPE_CONSTRUCTOR;
|
||||
}
|
||||
};
|
||||
|
||||
struct CallNode : public ENode {
|
||||
ENode*base;
|
||||
ENode *base;
|
||||
StringName method;
|
||||
Vector<ENode*> arguments;
|
||||
Vector<ENode *> arguments;
|
||||
|
||||
CallNode() {
|
||||
type=TYPE_CALL;
|
||||
type = TYPE_CALL;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct ArrayNode : public ENode {
|
||||
Vector<ENode*> array;
|
||||
Vector<ENode *> array;
|
||||
ArrayNode() {
|
||||
type=TYPE_ARRAY;
|
||||
type = TYPE_ARRAY;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct DictionaryNode : public ENode {
|
||||
Vector<ENode*> dict;
|
||||
Vector<ENode *> dict;
|
||||
DictionaryNode() {
|
||||
type=TYPE_DICTIONARY;
|
||||
type = TYPE_DICTIONARY;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct BuiltinFuncNode : public ENode {
|
||||
VisualScriptBuiltinFunc::BuiltinFunc func;
|
||||
Vector<ENode*> arguments;
|
||||
Vector<ENode *> arguments;
|
||||
BuiltinFuncNode() {
|
||||
type=TYPE_BUILTIN_FUNC;
|
||||
type = TYPE_BUILTIN_FUNC;
|
||||
}
|
||||
};
|
||||
|
||||
template<class T>
|
||||
T* alloc_node() {
|
||||
T* node = memnew(T);
|
||||
node->next=nodes;
|
||||
nodes=node;
|
||||
template <class T>
|
||||
T *alloc_node() {
|
||||
T *node = memnew(T);
|
||||
node->next = nodes;
|
||||
nodes = node;
|
||||
return node;
|
||||
}
|
||||
|
||||
ENode *root;
|
||||
ENode *nodes;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
@@ -295,14 +280,12 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "operators"; }
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptExpression();
|
||||
~VisualScriptExpression();
|
||||
};
|
||||
|
||||
|
||||
void register_visual_script_expression_node();
|
||||
|
||||
|
||||
#endif // VISUALSCRIPTEXPRESSION_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -33,27 +33,23 @@
|
||||
|
||||
class VisualScriptReturn : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptReturn,VisualScriptNode)
|
||||
|
||||
GDCLASS(VisualScriptReturn, VisualScriptNode)
|
||||
|
||||
Variant::Type type;
|
||||
bool with_value;
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -67,35 +63,27 @@ public:
|
||||
void set_enable_return_value(bool p_enable);
|
||||
bool is_return_value_enabled() const;
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptReturn();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptCondition : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptCondition,VisualScriptNode)
|
||||
|
||||
|
||||
GDCLASS(VisualScriptCondition, VisualScriptNode)
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -103,35 +91,27 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "flow_control"; }
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptCondition();
|
||||
};
|
||||
|
||||
|
||||
class VisualScriptWhile : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptWhile,VisualScriptNode)
|
||||
|
||||
|
||||
GDCLASS(VisualScriptWhile, VisualScriptNode)
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -139,36 +119,27 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "flow_control"; }
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptWhile();
|
||||
};
|
||||
|
||||
|
||||
|
||||
class VisualScriptIterator : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptIterator,VisualScriptNode)
|
||||
|
||||
|
||||
GDCLASS(VisualScriptIterator, VisualScriptNode)
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -176,37 +147,29 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "flow_control"; }
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptIterator();
|
||||
};
|
||||
|
||||
|
||||
|
||||
class VisualScriptSequence : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptSequence,VisualScriptNode)
|
||||
|
||||
GDCLASS(VisualScriptSequence, VisualScriptNode)
|
||||
|
||||
int steps;
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -217,47 +180,41 @@ public:
|
||||
void set_steps(int p_steps);
|
||||
int get_steps() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptSequence();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class VisualScriptSwitch : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptSwitch,VisualScriptNode)
|
||||
GDCLASS(VisualScriptSwitch, VisualScriptNode)
|
||||
|
||||
struct Case {
|
||||
Variant::Type type;
|
||||
Case() { type=Variant::NIL; }
|
||||
Case() { type = Variant::NIL; }
|
||||
};
|
||||
|
||||
Vector<Case> case_values;
|
||||
|
||||
friend class VisualScriptNodeInstanceSwitch;
|
||||
protected:
|
||||
friend class VisualScriptNodeInstanceSwitch;
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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 bool has_mixed_input_and_sequence_ports() const { return true; }
|
||||
|
||||
|
||||
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;
|
||||
|
||||
@@ -265,40 +222,31 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "flow_control"; }
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptSwitch();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class VisualScriptInputFilter : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptInputFilter,VisualScriptNode)
|
||||
GDCLASS(VisualScriptInputFilter, VisualScriptNode)
|
||||
|
||||
Vector<InputEvent> filters;
|
||||
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
@@ -306,40 +254,30 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "flow_control"; }
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptInputFilter();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class VisualScriptTypeCast : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptTypeCast,VisualScriptNode)
|
||||
|
||||
GDCLASS(VisualScriptTypeCast, VisualScriptNode)
|
||||
|
||||
StringName base_type;
|
||||
String script;
|
||||
|
||||
protected:
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -347,23 +285,17 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "flow_control"; }
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
void set_base_type(const StringName &p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_base_script(const String& p_path);
|
||||
void set_base_script(const String &p_path);
|
||||
String get_base_script() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptTypeCast();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
void register_visual_script_flow_control_nodes();
|
||||
|
||||
|
||||
|
||||
#endif // VISUAL_SCRIPT_FLOW_CONTROL_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -31,10 +31,9 @@
|
||||
|
||||
#include "visual_script.h"
|
||||
|
||||
|
||||
class VisualScriptFunctionCall : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptFunctionCall,VisualScriptNode)
|
||||
GDCLASS(VisualScriptFunctionCall, VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
@@ -53,7 +52,6 @@ public:
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
CallMode call_mode;
|
||||
StringName base_type;
|
||||
String base_script;
|
||||
@@ -65,34 +63,29 @@ private:
|
||||
StringName singleton;
|
||||
bool validate;
|
||||
|
||||
|
||||
Node *_get_base_node() const;
|
||||
StringName _get_base_type() const;
|
||||
|
||||
MethodInfo method_cache;
|
||||
void _update_method_cache();
|
||||
|
||||
void _set_argument_cache(const Dictionary& p_args);
|
||||
void _set_argument_cache(const Dictionary &p_args);
|
||||
Dictionary _get_argument_cache() const;
|
||||
|
||||
protected:
|
||||
virtual void _validate_property(PropertyInfo& property) const;
|
||||
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;
|
||||
|
||||
@@ -103,22 +96,21 @@ public:
|
||||
void set_basic_type(Variant::Type p_type);
|
||||
Variant::Type get_basic_type() const;
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
void set_base_type(const StringName &p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_base_script(const String& p_path);
|
||||
void set_base_script(const String &p_path);
|
||||
String get_base_script() const;
|
||||
|
||||
void set_singleton(const StringName& p_type);
|
||||
void set_singleton(const StringName &p_type);
|
||||
StringName get_singleton() const;
|
||||
|
||||
void set_function(const StringName& p_type);
|
||||
void set_function(const StringName &p_type);
|
||||
StringName get_function() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
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;
|
||||
|
||||
@@ -131,21 +123,19 @@ public:
|
||||
void set_rpc_call_mode(RPCCallMode p_mode);
|
||||
RPCCallMode get_rpc_call_mode() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
|
||||
virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const;
|
||||
|
||||
VisualScriptFunctionCall();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptFunctionCall::CallMode );
|
||||
VARIANT_ENUM_CAST(VisualScriptFunctionCall::RPCCallMode );
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptFunctionCall::CallMode);
|
||||
VARIANT_ENUM_CAST(VisualScriptFunctionCall::RPCCallMode);
|
||||
|
||||
class VisualScriptPropertySet : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptPropertySet,VisualScriptNode)
|
||||
GDCLASS(VisualScriptPropertySet, VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
@@ -153,14 +143,13 @@ public:
|
||||
CALL_MODE_INSTANCE,
|
||||
CALL_MODE_BASIC_TYPE,
|
||||
|
||||
|
||||
};
|
||||
private:
|
||||
|
||||
private:
|
||||
PropertyInfo type_cache;
|
||||
|
||||
CallMode call_mode;
|
||||
Variant::Type basic_type;
|
||||
Variant::Type basic_type;
|
||||
StringName base_type;
|
||||
String base_script;
|
||||
NodePath base_path;
|
||||
@@ -174,28 +163,23 @@ private:
|
||||
|
||||
void _update_cache();
|
||||
|
||||
void _set_type_cache(const Dictionary& p_type);
|
||||
void _set_type_cache(const Dictionary &p_type);
|
||||
Dictionary _get_type_cache() const;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void _validate_property(PropertyInfo& property) const;
|
||||
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;
|
||||
|
||||
@@ -203,10 +187,10 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "functions"; }
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
void set_base_type(const StringName &p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_base_script(const String& p_path);
|
||||
void set_base_script(const String &p_path);
|
||||
String get_base_script() const;
|
||||
|
||||
void set_basic_type(Variant::Type p_type);
|
||||
@@ -215,28 +199,26 @@ public:
|
||||
void set_event_type(InputEvent::Type p_type);
|
||||
InputEvent::Type get_event_type() const;
|
||||
|
||||
void set_property(const StringName& p_type);
|
||||
void set_property(const StringName &p_type);
|
||||
StringName get_property() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
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(VisualScriptInstance* p_instance);
|
||||
virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
virtual TypeGuess guess_output_type(TypeGuess *p_inputs, int p_output) const;
|
||||
|
||||
VisualScriptPropertySet();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptPropertySet::CallMode );
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptPropertySet::CallMode);
|
||||
|
||||
class VisualScriptPropertyGet : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptPropertyGet,VisualScriptNode)
|
||||
GDCLASS(VisualScriptPropertyGet, VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
@@ -245,8 +227,8 @@ public:
|
||||
CALL_MODE_BASIC_TYPE,
|
||||
|
||||
};
|
||||
private:
|
||||
|
||||
private:
|
||||
Variant::Type type_cache;
|
||||
|
||||
CallMode call_mode;
|
||||
@@ -267,23 +249,19 @@ private:
|
||||
Variant::Type _get_type_cache() const;
|
||||
|
||||
protected:
|
||||
virtual void _validate_property(PropertyInfo& property) const;
|
||||
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;
|
||||
|
||||
@@ -291,10 +269,10 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "functions"; }
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
void set_base_type(const StringName &p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_base_script(const String& p_path);
|
||||
void set_base_script(const String &p_path);
|
||||
String get_base_script() const;
|
||||
|
||||
void set_basic_type(Variant::Type p_type);
|
||||
@@ -303,55 +281,43 @@ public:
|
||||
void set_event_type(InputEvent::Type p_type);
|
||||
InputEvent::Type get_event_type() const;
|
||||
|
||||
void set_property(const StringName& p_type);
|
||||
void set_property(const StringName &p_type);
|
||||
StringName get_property() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
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(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptPropertyGet();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptPropertyGet::CallMode );
|
||||
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptPropertyGet::CallMode);
|
||||
|
||||
class VisualScriptEmitSignal : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptEmitSignal,VisualScriptNode)
|
||||
GDCLASS(VisualScriptEmitSignal, VisualScriptNode)
|
||||
|
||||
private:
|
||||
|
||||
StringName name;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void _validate_property(PropertyInfo& property) const;
|
||||
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;
|
||||
|
||||
@@ -359,19 +325,14 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "functions"; }
|
||||
|
||||
void set_signal(const StringName& p_type);
|
||||
void set_signal(const StringName &p_type);
|
||||
StringName get_signal() const;
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
|
||||
|
||||
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptEmitSignal();
|
||||
};
|
||||
|
||||
|
||||
|
||||
void register_visual_script_func_nodes();
|
||||
|
||||
#endif // VISUAL_SCRIPT_FUNC_NODES_H
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -28,9 +28,9 @@
|
||||
/*************************************************************************/
|
||||
#include "visual_script_yield_nodes.h"
|
||||
|
||||
#include "scene/main/scene_main_loop.h"
|
||||
#include "os/os.h"
|
||||
#include "scene/main/node.h"
|
||||
#include "scene/main/scene_main_loop.h"
|
||||
#include "visual_script_nodes.h"
|
||||
|
||||
//////////////////////////////////////////
|
||||
@@ -42,16 +42,16 @@ int VisualScriptYield::get_output_sequence_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool VisualScriptYield::has_input_sequence_port() const{
|
||||
bool VisualScriptYield::has_input_sequence_port() const {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptYield::get_input_value_port_count() const{
|
||||
int VisualScriptYield::get_input_value_port_count() const {
|
||||
|
||||
return 0;
|
||||
}
|
||||
int VisualScriptYield::get_output_value_port_count() const{
|
||||
int VisualScriptYield::get_output_value_port_count() const {
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -61,20 +61,19 @@ String VisualScriptYield::get_output_sequence_port_text(int p_port) const {
|
||||
return String();
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptYield::get_input_value_port_info(int p_idx) const{
|
||||
PropertyInfo VisualScriptYield::get_input_value_port_info(int p_idx) const {
|
||||
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptYield::get_output_value_port_info(int p_idx) const{
|
||||
PropertyInfo VisualScriptYield::get_output_value_port_info(int p_idx) const {
|
||||
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
|
||||
String VisualScriptYield::get_caption() const {
|
||||
|
||||
return yield_mode==YIELD_RETURN?"Yield":"Wait";
|
||||
return yield_mode == YIELD_RETURN ? "Yield" : "Wait";
|
||||
}
|
||||
|
||||
String VisualScriptYield::get_text() const {
|
||||
@@ -82,17 +81,15 @@ String VisualScriptYield::get_text() const {
|
||||
switch (yield_mode) {
|
||||
case YIELD_RETURN: return ""; break;
|
||||
case YIELD_FRAME: return "Next Frame"; break;
|
||||
case YIELD_FIXED_FRAME: return "Next Fixed Frame"; break;
|
||||
case YIELD_WAIT: return rtos(wait_time)+" sec(s)"; break;
|
||||
case YIELD_FIXED_FRAME: return "Next Fixed Frame"; break;
|
||||
case YIELD_WAIT: return rtos(wait_time) + " sec(s)"; break;
|
||||
}
|
||||
|
||||
return String();
|
||||
}
|
||||
|
||||
|
||||
class VisualScriptNodeInstanceYield : public VisualScriptNodeInstance {
|
||||
public:
|
||||
|
||||
VisualScriptYield::YieldMode mode;
|
||||
float wait_time;
|
||||
|
||||
@@ -100,18 +97,17 @@ public:
|
||||
//virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
|
||||
//virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; }
|
||||
|
||||
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
|
||||
virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Variant::CallError &r_error, String &r_error_str) {
|
||||
|
||||
if (p_start_mode==START_MODE_RESUME_YIELD) {
|
||||
if (p_start_mode == START_MODE_RESUME_YIELD) {
|
||||
return 0; //resuming yield
|
||||
} else {
|
||||
//yield
|
||||
|
||||
|
||||
SceneTree *tree = OS::get_singleton()->get_main_loop()->cast_to<SceneTree>();
|
||||
if (!tree) {
|
||||
r_error_str="Main Loop is not SceneTree";
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str = "Main Loop is not SceneTree";
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -119,99 +115,92 @@ public:
|
||||
state.instance();
|
||||
|
||||
int ret = STEP_YIELD_BIT;
|
||||
switch(mode) {
|
||||
|
||||
case VisualScriptYield::YIELD_RETURN: ret=STEP_EXIT_FUNCTION_BIT; break; //return the yield
|
||||
case VisualScriptYield::YIELD_FRAME: state->connect_to_signal(tree,"idle_frame",Array()); break;
|
||||
case VisualScriptYield::YIELD_FIXED_FRAME: state->connect_to_signal(tree,"fixed_frame",Array()); break;
|
||||
case VisualScriptYield::YIELD_WAIT: state->connect_to_signal(tree->create_timer(wait_time).ptr(),"timeout",Array()); break;
|
||||
switch (mode) {
|
||||
|
||||
case VisualScriptYield::YIELD_RETURN:
|
||||
ret = STEP_EXIT_FUNCTION_BIT;
|
||||
break; //return the yield
|
||||
case VisualScriptYield::YIELD_FRAME: state->connect_to_signal(tree, "idle_frame", Array()); break;
|
||||
case VisualScriptYield::YIELD_FIXED_FRAME: state->connect_to_signal(tree, "fixed_frame", Array()); break;
|
||||
case VisualScriptYield::YIELD_WAIT: state->connect_to_signal(tree->create_timer(wait_time).ptr(), "timeout", Array()); break;
|
||||
}
|
||||
|
||||
*p_working_mem=state;
|
||||
*p_working_mem = state;
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptYield::instance(VisualScriptInstance* p_instance) {
|
||||
VisualScriptNodeInstance *VisualScriptYield::instance(VisualScriptInstance *p_instance) {
|
||||
|
||||
VisualScriptNodeInstanceYield * instance = memnew(VisualScriptNodeInstanceYield );
|
||||
VisualScriptNodeInstanceYield *instance = memnew(VisualScriptNodeInstanceYield);
|
||||
//instance->instance=p_instance;
|
||||
instance->mode=yield_mode;
|
||||
instance->wait_time=wait_time;
|
||||
instance->mode = yield_mode;
|
||||
instance->wait_time = wait_time;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void VisualScriptYield::set_yield_mode(YieldMode p_mode) {
|
||||
|
||||
if (yield_mode==p_mode)
|
||||
if (yield_mode == p_mode)
|
||||
return;
|
||||
yield_mode=p_mode;
|
||||
yield_mode = p_mode;
|
||||
ports_changed_notify();
|
||||
_change_notify();
|
||||
}
|
||||
|
||||
VisualScriptYield::YieldMode VisualScriptYield::get_yield_mode(){
|
||||
VisualScriptYield::YieldMode VisualScriptYield::get_yield_mode() {
|
||||
|
||||
return yield_mode;
|
||||
}
|
||||
|
||||
void VisualScriptYield::set_wait_time(float p_time) {
|
||||
|
||||
if (wait_time==p_time)
|
||||
if (wait_time == p_time)
|
||||
return;
|
||||
wait_time=p_time;
|
||||
wait_time = p_time;
|
||||
ports_changed_notify();
|
||||
|
||||
}
|
||||
|
||||
float VisualScriptYield::get_wait_time(){
|
||||
float VisualScriptYield::get_wait_time() {
|
||||
|
||||
return wait_time;
|
||||
}
|
||||
|
||||
void VisualScriptYield::_validate_property(PropertyInfo &property) const {
|
||||
|
||||
void VisualScriptYield::_validate_property(PropertyInfo& property) const {
|
||||
|
||||
|
||||
if (property.name=="wait_time") {
|
||||
if (yield_mode!=YIELD_WAIT) {
|
||||
property.usage=0;
|
||||
if (property.name == "wait_time") {
|
||||
if (yield_mode != YIELD_WAIT) {
|
||||
property.usage = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void VisualScriptYield::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_yield_mode","mode"),&VisualScriptYield::set_yield_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_yield_mode"),&VisualScriptYield::get_yield_mode);
|
||||
ClassDB::bind_method(D_METHOD("set_yield_mode", "mode"), &VisualScriptYield::set_yield_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_yield_mode"), &VisualScriptYield::get_yield_mode);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_wait_time","sec"),&VisualScriptYield::set_wait_time);
|
||||
ClassDB::bind_method(D_METHOD("get_wait_time"),&VisualScriptYield::get_wait_time);
|
||||
ClassDB::bind_method(D_METHOD("set_wait_time", "sec"), &VisualScriptYield::set_wait_time);
|
||||
ClassDB::bind_method(D_METHOD("get_wait_time"), &VisualScriptYield::get_wait_time);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT,"mode",PROPERTY_HINT_ENUM,"Frame,FixedFrame,Time",PROPERTY_USAGE_NOEDITOR),"set_yield_mode","get_yield_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL,"wait_time"),"set_wait_time","get_wait_time");
|
||||
|
||||
|
||||
BIND_CONSTANT( YIELD_FRAME );
|
||||
BIND_CONSTANT( YIELD_FIXED_FRAME );
|
||||
BIND_CONSTANT( YIELD_WAIT );
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "mode", PROPERTY_HINT_ENUM, "Frame,FixedFrame,Time", PROPERTY_USAGE_NOEDITOR), "set_yield_mode", "get_yield_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "wait_time"), "set_wait_time", "get_wait_time");
|
||||
|
||||
BIND_CONSTANT(YIELD_FRAME);
|
||||
BIND_CONSTANT(YIELD_FIXED_FRAME);
|
||||
BIND_CONSTANT(YIELD_WAIT);
|
||||
}
|
||||
|
||||
VisualScriptYield::VisualScriptYield() {
|
||||
|
||||
yield_mode=YIELD_FRAME;
|
||||
wait_time=1;
|
||||
|
||||
yield_mode = YIELD_FRAME;
|
||||
wait_time = 1;
|
||||
}
|
||||
|
||||
|
||||
template<VisualScriptYield::YieldMode MODE>
|
||||
static Ref<VisualScriptNode> create_yield_node(const String& p_name) {
|
||||
template <VisualScriptYield::YieldMode MODE>
|
||||
static Ref<VisualScriptNode> create_yield_node(const String &p_name) {
|
||||
|
||||
Ref<VisualScriptYield> node;
|
||||
node.instance();
|
||||
@@ -228,24 +217,24 @@ int VisualScriptYieldSignal::get_output_sequence_port_count() const {
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool VisualScriptYieldSignal::has_input_sequence_port() const{
|
||||
bool VisualScriptYieldSignal::has_input_sequence_port() const {
|
||||
|
||||
return true;
|
||||
}
|
||||
#ifdef TOOLS_ENABLED
|
||||
|
||||
static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const Ref<Script> &script) {
|
||||
static Node *_find_script_node(Node *p_edited_scene, Node *p_current_node, const Ref<Script> &script) {
|
||||
|
||||
if (p_edited_scene!=p_current_node && p_current_node->get_owner()!=p_edited_scene)
|
||||
if (p_edited_scene != p_current_node && p_current_node->get_owner() != p_edited_scene)
|
||||
return NULL;
|
||||
|
||||
Ref<Script> scr = p_current_node->get_script();
|
||||
|
||||
if (scr.is_valid() && scr==script)
|
||||
if (scr.is_valid() && scr == script)
|
||||
return p_current_node;
|
||||
|
||||
for(int i=0;i<p_current_node->get_child_count();i++) {
|
||||
Node *n = _find_script_node(p_edited_scene,p_current_node->get_child(i),script);
|
||||
for (int i = 0; i < p_current_node->get_child_count(); i++) {
|
||||
Node *n = _find_script_node(p_edited_scene, p_current_node->get_child(i), script);
|
||||
if (n)
|
||||
return n;
|
||||
}
|
||||
@@ -261,7 +250,7 @@ Node *VisualScriptYieldSignal::_get_base_node() const {
|
||||
if (!script.is_valid())
|
||||
return NULL;
|
||||
|
||||
MainLoop * main_loop = OS::get_singleton()->get_main_loop();
|
||||
MainLoop *main_loop = OS::get_singleton()->get_main_loop();
|
||||
if (!main_loop)
|
||||
return NULL;
|
||||
|
||||
@@ -275,7 +264,7 @@ Node *VisualScriptYieldSignal::_get_base_node() const {
|
||||
if (!edited_scene)
|
||||
return NULL;
|
||||
|
||||
Node* script_node = _find_script_node(edited_scene,edited_scene,script);
|
||||
Node *script_node = _find_script_node(edited_scene, edited_scene, script);
|
||||
|
||||
if (!script_node)
|
||||
return NULL;
|
||||
@@ -294,36 +283,32 @@ Node *VisualScriptYieldSignal::_get_base_node() const {
|
||||
|
||||
StringName VisualScriptYieldSignal::_get_base_type() const {
|
||||
|
||||
if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid())
|
||||
if (call_mode == CALL_MODE_SELF && get_visual_script().is_valid())
|
||||
return get_visual_script()->get_instance_base_type();
|
||||
else if (call_mode==CALL_MODE_NODE_PATH && get_visual_script().is_valid()) {
|
||||
else if (call_mode == CALL_MODE_NODE_PATH && get_visual_script().is_valid()) {
|
||||
Node *path = _get_base_node();
|
||||
if (path)
|
||||
return path->get_class();
|
||||
|
||||
}
|
||||
|
||||
return base_type;
|
||||
}
|
||||
|
||||
int VisualScriptYieldSignal::get_input_value_port_count() const{
|
||||
int VisualScriptYieldSignal::get_input_value_port_count() const {
|
||||
|
||||
if (call_mode==CALL_MODE_INSTANCE)
|
||||
if (call_mode == CALL_MODE_INSTANCE)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
|
||||
}
|
||||
int VisualScriptYieldSignal::get_output_value_port_count() const{
|
||||
|
||||
int VisualScriptYieldSignal::get_output_value_port_count() const {
|
||||
|
||||
MethodInfo sr;
|
||||
|
||||
if (!ClassDB::get_signal(_get_base_type(),signal,&sr))
|
||||
if (!ClassDB::get_signal(_get_base_type(), signal, &sr))
|
||||
return 0;
|
||||
|
||||
return sr.arguments.size();
|
||||
|
||||
}
|
||||
|
||||
String VisualScriptYieldSignal::get_output_sequence_port_text(int p_port) const {
|
||||
@@ -331,30 +316,27 @@ String VisualScriptYieldSignal::get_output_sequence_port_text(int p_port) const
|
||||
return String();
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptYieldSignal::get_input_value_port_info(int p_idx) const{
|
||||
PropertyInfo VisualScriptYieldSignal::get_input_value_port_info(int p_idx) const {
|
||||
|
||||
if (call_mode==CALL_MODE_INSTANCE)
|
||||
return PropertyInfo(Variant::OBJECT,"instance");
|
||||
if (call_mode == CALL_MODE_INSTANCE)
|
||||
return PropertyInfo(Variant::OBJECT, "instance");
|
||||
else
|
||||
return PropertyInfo();
|
||||
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptYieldSignal::get_output_value_port_info(int p_idx) const{
|
||||
PropertyInfo VisualScriptYieldSignal::get_output_value_port_info(int p_idx) const {
|
||||
|
||||
MethodInfo sr;
|
||||
|
||||
if (!ClassDB::get_signal(_get_base_type(),signal,&sr))
|
||||
if (!ClassDB::get_signal(_get_base_type(), signal, &sr))
|
||||
return PropertyInfo(); //no signal
|
||||
ERR_FAIL_INDEX_V(p_idx,sr.arguments.size(),PropertyInfo());
|
||||
ERR_FAIL_INDEX_V(p_idx, sr.arguments.size(), PropertyInfo());
|
||||
return sr.arguments[p_idx];
|
||||
|
||||
}
|
||||
|
||||
|
||||
String VisualScriptYieldSignal::get_caption() const {
|
||||
|
||||
static const char*cname[3]= {
|
||||
static const char *cname[3] = {
|
||||
"WaitSignal",
|
||||
"WaitNodeSignal",
|
||||
"WaitInstanceSigna;",
|
||||
@@ -365,52 +347,49 @@ String VisualScriptYieldSignal::get_caption() const {
|
||||
|
||||
String VisualScriptYieldSignal::get_text() const {
|
||||
|
||||
if (call_mode==CALL_MODE_SELF)
|
||||
return " "+String(signal)+"()";
|
||||
if (call_mode == CALL_MODE_SELF)
|
||||
return " " + String(signal) + "()";
|
||||
else
|
||||
return " "+_get_base_type()+"."+String(signal)+"()";
|
||||
|
||||
return " " + _get_base_type() + "." + String(signal) + "()";
|
||||
}
|
||||
|
||||
void VisualScriptYieldSignal::set_base_type(const StringName &p_type) {
|
||||
|
||||
void VisualScriptYieldSignal::set_base_type(const StringName& p_type) {
|
||||
|
||||
if (base_type==p_type)
|
||||
if (base_type == p_type)
|
||||
return;
|
||||
|
||||
base_type=p_type;
|
||||
base_type = p_type;
|
||||
|
||||
_change_notify();
|
||||
ports_changed_notify();
|
||||
}
|
||||
|
||||
StringName VisualScriptYieldSignal::get_base_type() const{
|
||||
StringName VisualScriptYieldSignal::get_base_type() const {
|
||||
|
||||
return base_type;
|
||||
}
|
||||
|
||||
void VisualScriptYieldSignal::set_signal(const StringName& p_type){
|
||||
void VisualScriptYieldSignal::set_signal(const StringName &p_type) {
|
||||
|
||||
if (signal==p_type)
|
||||
if (signal == p_type)
|
||||
return;
|
||||
|
||||
signal=p_type;
|
||||
signal = p_type;
|
||||
|
||||
_change_notify();
|
||||
ports_changed_notify();
|
||||
}
|
||||
StringName VisualScriptYieldSignal::get_signal() const {
|
||||
|
||||
|
||||
return signal;
|
||||
}
|
||||
|
||||
void VisualScriptYieldSignal::set_base_path(const NodePath& p_type) {
|
||||
void VisualScriptYieldSignal::set_base_path(const NodePath &p_type) {
|
||||
|
||||
if (base_path==p_type)
|
||||
if (base_path == p_type)
|
||||
return;
|
||||
|
||||
base_path=p_type;
|
||||
base_path = p_type;
|
||||
|
||||
_change_notify();
|
||||
ports_changed_notify();
|
||||
@@ -421,17 +400,15 @@ NodePath VisualScriptYieldSignal::get_base_path() const {
|
||||
return base_path;
|
||||
}
|
||||
|
||||
|
||||
void VisualScriptYieldSignal::set_call_mode(CallMode p_mode) {
|
||||
|
||||
if (call_mode==p_mode)
|
||||
if (call_mode == p_mode)
|
||||
return;
|
||||
|
||||
call_mode=p_mode;
|
||||
call_mode = p_mode;
|
||||
|
||||
_change_notify();
|
||||
ports_changed_notify();
|
||||
|
||||
}
|
||||
|
||||
VisualScriptYieldSignal::CallMode VisualScriptYieldSignal::get_call_mode() const {
|
||||
@@ -439,102 +416,89 @@ VisualScriptYieldSignal::CallMode VisualScriptYieldSignal::get_call_mode() const
|
||||
return call_mode;
|
||||
}
|
||||
|
||||
void VisualScriptYieldSignal::_validate_property(PropertyInfo &property) const {
|
||||
|
||||
void VisualScriptYieldSignal::_validate_property(PropertyInfo& property) const {
|
||||
|
||||
if (property.name=="signal/base_type") {
|
||||
if (call_mode!=CALL_MODE_INSTANCE) {
|
||||
property.usage=PROPERTY_USAGE_NOEDITOR;
|
||||
if (property.name == "signal/base_type") {
|
||||
if (call_mode != CALL_MODE_INSTANCE) {
|
||||
property.usage = PROPERTY_USAGE_NOEDITOR;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (property.name=="signal/node_path") {
|
||||
if (call_mode!=CALL_MODE_NODE_PATH) {
|
||||
property.usage=0;
|
||||
if (property.name == "signal/node_path") {
|
||||
if (call_mode != CALL_MODE_NODE_PATH) {
|
||||
property.usage = 0;
|
||||
} else {
|
||||
|
||||
Node *bnode = _get_base_node();
|
||||
if (bnode) {
|
||||
property.hint_string=bnode->get_path(); //convert to loong string
|
||||
property.hint_string = bnode->get_path(); //convert to loong string
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (property.name=="signal/signal") {
|
||||
property.hint=PROPERTY_HINT_ENUM;
|
||||
|
||||
if (property.name == "signal/signal") {
|
||||
property.hint = PROPERTY_HINT_ENUM;
|
||||
|
||||
List<MethodInfo> methods;
|
||||
|
||||
ClassDB::get_signal_list(_get_base_type(),&methods);
|
||||
ClassDB::get_signal_list(_get_base_type(), &methods);
|
||||
|
||||
List<String> mstring;
|
||||
for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
|
||||
for (List<MethodInfo>::Element *E = methods.front(); E; E = E->next()) {
|
||||
if (E->get().name.begins_with("_"))
|
||||
continue;
|
||||
mstring.push_back(E->get().name.get_slice(":",0));
|
||||
mstring.push_back(E->get().name.get_slice(":", 0));
|
||||
}
|
||||
|
||||
mstring.sort();
|
||||
|
||||
String ml;
|
||||
for (List<String>::Element *E=mstring.front();E;E=E->next()) {
|
||||
for (List<String>::Element *E = mstring.front(); E; E = E->next()) {
|
||||
|
||||
if (ml!=String())
|
||||
ml+=",";
|
||||
ml+=E->get();
|
||||
if (ml != String())
|
||||
ml += ",";
|
||||
ml += E->get();
|
||||
}
|
||||
|
||||
property.hint_string=ml;
|
||||
property.hint_string = ml;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void VisualScriptYieldSignal::_bind_methods() {
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_base_type","base_type"),&VisualScriptYieldSignal::set_base_type);
|
||||
ClassDB::bind_method(D_METHOD("get_base_type"),&VisualScriptYieldSignal::get_base_type);
|
||||
ClassDB::bind_method(D_METHOD("set_base_type", "base_type"), &VisualScriptYieldSignal::set_base_type);
|
||||
ClassDB::bind_method(D_METHOD("get_base_type"), &VisualScriptYieldSignal::get_base_type);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_signal","signal"),&VisualScriptYieldSignal::set_signal);
|
||||
ClassDB::bind_method(D_METHOD("get_signal"),&VisualScriptYieldSignal::get_signal);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_call_mode","mode"),&VisualScriptYieldSignal::set_call_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_call_mode"),&VisualScriptYieldSignal::get_call_mode);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_base_path","base_path"),&VisualScriptYieldSignal::set_base_path);
|
||||
ClassDB::bind_method(D_METHOD("get_base_path"),&VisualScriptYieldSignal::get_base_path);
|
||||
ClassDB::bind_method(D_METHOD("set_signal", "signal"), &VisualScriptYieldSignal::set_signal);
|
||||
ClassDB::bind_method(D_METHOD("get_signal"), &VisualScriptYieldSignal::get_signal);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_call_mode", "mode"), &VisualScriptYieldSignal::set_call_mode);
|
||||
ClassDB::bind_method(D_METHOD("get_call_mode"), &VisualScriptYieldSignal::get_call_mode);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_base_path", "base_path"), &VisualScriptYieldSignal::set_base_path);
|
||||
ClassDB::bind_method(D_METHOD("get_base_path"), &VisualScriptYieldSignal::get_base_path);
|
||||
|
||||
String bt;
|
||||
for(int i=0;i<Variant::VARIANT_MAX;i++) {
|
||||
if (i>0)
|
||||
bt+=",";
|
||||
for (int i = 0; i < Variant::VARIANT_MAX; i++) {
|
||||
if (i > 0)
|
||||
bt += ",";
|
||||
|
||||
bt+=Variant::get_type_name(Variant::Type(i));
|
||||
bt += Variant::get_type_name(Variant::Type(i));
|
||||
}
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT,"signal/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance"),"set_call_mode","get_call_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),"set_base_type","get_base_type");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"signal/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),"set_base_path","get_base_path");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/signal"),"set_signal","get_signal");
|
||||
|
||||
|
||||
BIND_CONSTANT( CALL_MODE_SELF );
|
||||
BIND_CONSTANT( CALL_MODE_NODE_PATH);
|
||||
BIND_CONSTANT( CALL_MODE_INSTANCE);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "signal/call_mode", PROPERTY_HINT_ENUM, "Self,Node Path,Instance"), "set_call_mode", "get_call_mode");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "signal/base_type", PROPERTY_HINT_TYPE_STRING, "Object"), "set_base_type", "get_base_type");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "signal/node_path", PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE), "set_base_path", "get_base_path");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::STRING, "signal/signal"), "set_signal", "get_signal");
|
||||
|
||||
BIND_CONSTANT(CALL_MODE_SELF);
|
||||
BIND_CONSTANT(CALL_MODE_NODE_PATH);
|
||||
BIND_CONSTANT(CALL_MODE_INSTANCE);
|
||||
}
|
||||
|
||||
class VisualScriptNodeInstanceYieldSignal : public VisualScriptNodeInstance {
|
||||
public:
|
||||
|
||||
|
||||
VisualScriptYieldSignal::CallMode call_mode;
|
||||
NodePath node_path;
|
||||
int output_args;
|
||||
@@ -543,97 +507,88 @@ public:
|
||||
VisualScriptYieldSignal *node;
|
||||
VisualScriptInstance *instance;
|
||||
|
||||
|
||||
|
||||
virtual int get_working_memory_size() const { return 1; }
|
||||
//virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
|
||||
//virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
|
||||
|
||||
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
|
||||
virtual int step(const Variant **p_inputs, Variant **p_outputs, StartMode p_start_mode, Variant *p_working_mem, Variant::CallError &r_error, String &r_error_str) {
|
||||
|
||||
if (p_start_mode==START_MODE_RESUME_YIELD) {
|
||||
if (p_start_mode == START_MODE_RESUME_YIELD) {
|
||||
return 0; //resuming yield
|
||||
} else {
|
||||
//yield
|
||||
|
||||
Object * object;
|
||||
Object *object;
|
||||
|
||||
switch(call_mode) {
|
||||
switch (call_mode) {
|
||||
|
||||
case VisualScriptYieldSignal::CALL_MODE_SELF: {
|
||||
|
||||
object=instance->get_owner_ptr();
|
||||
object = instance->get_owner_ptr();
|
||||
|
||||
} break;
|
||||
case VisualScriptYieldSignal::CALL_MODE_NODE_PATH: {
|
||||
|
||||
Node* node = instance->get_owner_ptr()->cast_to<Node>();
|
||||
Node *node = instance->get_owner_ptr()->cast_to<Node>();
|
||||
if (!node) {
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str="Base object is not a Node!";
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str = "Base object is not a Node!";
|
||||
return 0;
|
||||
}
|
||||
|
||||
Node* another = node->get_node(node_path);
|
||||
Node *another = node->get_node(node_path);
|
||||
if (!node) {
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str="Path does not lead Node!";
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str = "Path does not lead Node!";
|
||||
return 0;
|
||||
}
|
||||
|
||||
object=another;
|
||||
object = another;
|
||||
|
||||
} break;
|
||||
case VisualScriptYieldSignal::CALL_MODE_INSTANCE: {
|
||||
|
||||
object = *p_inputs[0];
|
||||
if (!object) {
|
||||
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str="Supplied instance input is null.";
|
||||
r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
r_error_str = "Supplied instance input is null.";
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
} break;
|
||||
|
||||
}
|
||||
|
||||
Ref<VisualScriptFunctionState> state;
|
||||
state.instance();
|
||||
|
||||
state->connect_to_signal(object,signal,Array());
|
||||
state->connect_to_signal(object, signal, Array());
|
||||
|
||||
*p_working_mem=state;
|
||||
*p_working_mem = state;
|
||||
|
||||
return STEP_YIELD_BIT;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptYieldSignal::instance(VisualScriptInstance* p_instance) {
|
||||
VisualScriptNodeInstance *VisualScriptYieldSignal::instance(VisualScriptInstance *p_instance) {
|
||||
|
||||
VisualScriptNodeInstanceYieldSignal * instance = memnew(VisualScriptNodeInstanceYieldSignal );
|
||||
instance->node=this;
|
||||
instance->instance=p_instance;
|
||||
instance->signal=signal;
|
||||
instance->call_mode=call_mode;
|
||||
instance->node_path=base_path;
|
||||
VisualScriptNodeInstanceYieldSignal *instance = memnew(VisualScriptNodeInstanceYieldSignal);
|
||||
instance->node = this;
|
||||
instance->instance = p_instance;
|
||||
instance->signal = signal;
|
||||
instance->call_mode = call_mode;
|
||||
instance->node_path = base_path;
|
||||
instance->output_args = get_output_value_port_count();
|
||||
return instance;
|
||||
}
|
||||
VisualScriptYieldSignal::VisualScriptYieldSignal() {
|
||||
|
||||
call_mode=CALL_MODE_SELF;
|
||||
base_type="Object";
|
||||
|
||||
call_mode = CALL_MODE_SELF;
|
||||
base_type = "Object";
|
||||
}
|
||||
|
||||
template<VisualScriptYieldSignal::CallMode cmode>
|
||||
static Ref<VisualScriptNode> create_yield_signal_node(const String& p_name) {
|
||||
template <VisualScriptYieldSignal::CallMode cmode>
|
||||
static Ref<VisualScriptNode> create_yield_signal_node(const String &p_name) {
|
||||
|
||||
Ref<VisualScriptYieldSignal> node;
|
||||
node.instance();
|
||||
@@ -643,12 +598,10 @@ static Ref<VisualScriptNode> create_yield_signal_node(const String& p_name) {
|
||||
|
||||
void register_visual_script_yield_nodes() {
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_frame",create_yield_node<VisualScriptYield::YIELD_FRAME>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_fixed_frame",create_yield_node<VisualScriptYield::YIELD_FIXED_FRAME>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_time",create_yield_node<VisualScriptYield::YIELD_WAIT>);
|
||||
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/yield",create_yield_node<VisualScriptYield::YIELD_RETURN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/yield_signal",create_node_generic<VisualScriptYieldSignal>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_frame", create_yield_node<VisualScriptYield::YIELD_FRAME>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_fixed_frame", create_yield_node<VisualScriptYield::YIELD_FIXED_FRAME>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_time", create_yield_node<VisualScriptYield::YIELD_WAIT>);
|
||||
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/yield", create_yield_node<VisualScriptYield::YIELD_RETURN>);
|
||||
VisualScriptLanguage::singleton->add_register_func("functions/yield_signal", create_node_generic<VisualScriptYieldSignal>);
|
||||
}
|
||||
|
||||
@@ -33,9 +33,8 @@
|
||||
|
||||
class VisualScriptYield : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptYield,VisualScriptNode)
|
||||
GDCLASS(VisualScriptYield, VisualScriptNode)
|
||||
public:
|
||||
|
||||
enum YieldMode {
|
||||
YIELD_RETURN,
|
||||
YIELD_FRAME,
|
||||
@@ -43,30 +42,25 @@ public:
|
||||
YIELD_WAIT
|
||||
|
||||
};
|
||||
private:
|
||||
|
||||
private:
|
||||
YieldMode yield_mode;
|
||||
float wait_time;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
virtual void _validate_property(PropertyInfo& property) const;
|
||||
virtual void _validate_property(PropertyInfo &property) const;
|
||||
|
||||
static void _bind_methods();
|
||||
public:
|
||||
|
||||
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;
|
||||
|
||||
@@ -80,15 +74,15 @@ public:
|
||||
void set_wait_time(float p_time);
|
||||
float get_wait_time();
|
||||
|
||||
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptYield();
|
||||
};
|
||||
VARIANT_ENUM_CAST( VisualScriptYield::YieldMode )
|
||||
VARIANT_ENUM_CAST(VisualScriptYield::YieldMode)
|
||||
|
||||
class VisualScriptYieldSignal : public VisualScriptNode {
|
||||
|
||||
GDCLASS(VisualScriptYieldSignal,VisualScriptNode)
|
||||
GDCLASS(VisualScriptYieldSignal, VisualScriptNode)
|
||||
public:
|
||||
enum CallMode {
|
||||
CALL_MODE_SELF,
|
||||
@@ -96,8 +90,8 @@ public:
|
||||
CALL_MODE_INSTANCE,
|
||||
|
||||
};
|
||||
private:
|
||||
|
||||
private:
|
||||
CallMode call_mode;
|
||||
StringName base_type;
|
||||
NodePath base_path;
|
||||
@@ -106,25 +100,20 @@ private:
|
||||
Node *_get_base_node() const;
|
||||
StringName _get_base_type() const;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void _validate_property(PropertyInfo& property) const;
|
||||
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;
|
||||
|
||||
@@ -132,24 +121,24 @@ public:
|
||||
virtual String get_text() const;
|
||||
virtual String get_category() const { return "functions"; }
|
||||
|
||||
void set_base_type(const StringName& p_type);
|
||||
void set_base_type(const StringName &p_type);
|
||||
StringName get_base_type() const;
|
||||
|
||||
void set_signal(const StringName& p_type);
|
||||
void set_signal(const StringName &p_type);
|
||||
StringName get_signal() const;
|
||||
|
||||
void set_base_path(const NodePath& p_type);
|
||||
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(VisualScriptInstance* p_instance);
|
||||
virtual VisualScriptNodeInstance *instance(VisualScriptInstance *p_instance);
|
||||
|
||||
VisualScriptYieldSignal();
|
||||
};
|
||||
|
||||
VARIANT_ENUM_CAST(VisualScriptYieldSignal::CallMode );
|
||||
VARIANT_ENUM_CAST(VisualScriptYieldSignal::CallMode);
|
||||
|
||||
void register_visual_script_yield_nodes();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user