You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
-Reworked constant nodes better
-Added simple switch node, removed InputEventFilter
This commit is contained in:
@@ -603,70 +603,60 @@ VisualScriptSequence::VisualScriptSequence() {
|
||||
////////////////EVENT TYPE FILTER///////////
|
||||
//////////////////////////////////////////
|
||||
|
||||
static const char* event_type_names[InputEvent::TYPE_MAX]={
|
||||
"None",
|
||||
"Key",
|
||||
"MouseMotion",
|
||||
"MouseButton",
|
||||
"JoystickMotion",
|
||||
"JoystickButton",
|
||||
"ScreenTouch",
|
||||
"ScreenDrag",
|
||||
"Action"
|
||||
};
|
||||
int VisualScriptSwitch::get_output_sequence_port_count() const {
|
||||
|
||||
int VisualScriptInputSelector::get_output_sequence_port_count() const {
|
||||
|
||||
return InputEvent::TYPE_MAX;
|
||||
return case_values.size();
|
||||
}
|
||||
|
||||
bool VisualScriptInputSelector::has_input_sequence_port() const{
|
||||
bool VisualScriptSwitch::has_input_sequence_port() const{
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int VisualScriptInputSelector::get_input_value_port_count() const{
|
||||
int VisualScriptSwitch::get_input_value_port_count() const{
|
||||
|
||||
|
||||
return 1;
|
||||
}
|
||||
int VisualScriptInputSelector::get_output_value_port_count() const{
|
||||
int VisualScriptSwitch::get_output_value_port_count() const{
|
||||
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
String VisualScriptInputSelector::get_output_sequence_port_text(int p_port) const {
|
||||
String VisualScriptSwitch::get_output_sequence_port_text(int p_port) const {
|
||||
|
||||
return event_type_names[p_port];
|
||||
if (case_values[p_port].value.get_type()==Variant::NIL)
|
||||
return "null";
|
||||
return case_values[p_port].value;
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptInputSelector::get_input_value_port_info(int p_idx) const{
|
||||
PropertyInfo VisualScriptSwitch::get_input_value_port_info(int p_idx) const{
|
||||
|
||||
return PropertyInfo(Variant::INPUT_EVENT,"event");
|
||||
return PropertyInfo(Variant::NIL,"input");
|
||||
}
|
||||
|
||||
PropertyInfo VisualScriptInputSelector::get_output_value_port_info(int p_idx) const{
|
||||
PropertyInfo VisualScriptSwitch::get_output_value_port_info(int p_idx) const{
|
||||
|
||||
return PropertyInfo(Variant::INPUT_EVENT,"");
|
||||
return PropertyInfo();
|
||||
}
|
||||
|
||||
|
||||
String VisualScriptInputSelector::get_caption() const {
|
||||
String VisualScriptSwitch::get_caption() const {
|
||||
|
||||
return "InputSelector";
|
||||
return "Switch";
|
||||
}
|
||||
|
||||
String VisualScriptInputSelector::get_text() const {
|
||||
String VisualScriptSwitch::get_text() const {
|
||||
|
||||
return "";
|
||||
return "'input' is:";
|
||||
}
|
||||
|
||||
|
||||
class VisualScriptNodeInstanceInputSelector : public VisualScriptNodeInstance {
|
||||
class VisualScriptNodeInstanceSwitch : public VisualScriptNodeInstance {
|
||||
public:
|
||||
|
||||
VisualScriptInstance* instance;
|
||||
InputEvent::Type type;
|
||||
Vector<Variant> case_values;
|
||||
|
||||
//virtual int get_working_memory_size() const { return 0; }
|
||||
//virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
|
||||
@@ -680,31 +670,114 @@ public:
|
||||
return 0;
|
||||
}
|
||||
|
||||
InputEvent event = *p_inputs[0];
|
||||
for(int i=0;i<case_values.size();i++) {
|
||||
|
||||
*p_outputs[0] = event;
|
||||
if (*p_inputs[0]==case_values[i]) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return event.type;
|
||||
return STEP_NO_ADVANCE_BIT;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
VisualScriptNodeInstance* VisualScriptInputSelector::instance(VisualScriptInstance* p_instance) {
|
||||
VisualScriptNodeInstance* VisualScriptSwitch::instance(VisualScriptInstance* p_instance) {
|
||||
|
||||
VisualScriptNodeInstanceInputSelector * instance = memnew(VisualScriptNodeInstanceInputSelector );
|
||||
VisualScriptNodeInstanceSwitch * instance = memnew(VisualScriptNodeInstanceSwitch );
|
||||
instance->instance=p_instance;
|
||||
instance->case_values.resize(case_values.size());
|
||||
for(int i=0;i<case_values.size();i++) {
|
||||
instance->case_values[i]=case_values[i].value;
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
bool VisualScriptSwitch::_set(const StringName& p_name, const Variant& p_value) {
|
||||
|
||||
if (String(p_name)=="case_count") {
|
||||
case_values.resize(p_value);
|
||||
_change_notify();
|
||||
ports_changed_notify();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (String(p_name).begins_with("case/")) {
|
||||
|
||||
int idx = String(p_name).get_slice("/",1).to_int();
|
||||
ERR_FAIL_INDEX_V(idx,case_values.size(),false);
|
||||
String what = String(p_name).get_slice("/",2);
|
||||
|
||||
if (what=="type") {
|
||||
case_values[idx].type=Variant::Type(int(p_value));
|
||||
Variant::CallError ce;
|
||||
case_values[idx].value=Variant::construct(case_values[idx].type,NULL,0,ce);
|
||||
_change_notify();
|
||||
ports_changed_notify();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (what=="value") {
|
||||
case_values[idx].value=p_value;
|
||||
ports_changed_notify();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool VisualScriptSwitch::_get(const StringName& p_name,Variant &r_ret) const {
|
||||
|
||||
if (String(p_name)=="case_count") {
|
||||
r_ret=case_values.size();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (String(p_name).begins_with("case/")) {
|
||||
|
||||
int idx = String(p_name).get_slice("/",1).to_int();
|
||||
ERR_FAIL_INDEX_V(idx,case_values.size(),false);
|
||||
String what = String(p_name).get_slice("/",2);
|
||||
|
||||
if (what=="type") {
|
||||
r_ret=case_values[idx].type;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (what=="value") {
|
||||
r_ret=case_values[idx].value;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
void VisualScriptSwitch::_get_property_list( List<PropertyInfo> *p_list) const {
|
||||
|
||||
p_list->push_back(PropertyInfo(Variant::INT,"case_count",PROPERTY_HINT_RANGE,"0,128"));
|
||||
|
||||
String argt="Any";
|
||||
for(int i=1;i<Variant::VARIANT_MAX;i++) {
|
||||
argt+=","+Variant::get_type_name(Variant::Type(i));
|
||||
}
|
||||
|
||||
for(int i=0;i<case_values.size();i++) {
|
||||
p_list->push_back(PropertyInfo(Variant::INT,"case/"+itos(i)+"/type",PROPERTY_HINT_ENUM,argt));
|
||||
p_list->push_back(PropertyInfo(case_values[i].type,"case/"+itos(i)+"/value"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void VisualScriptInputSelector::_bind_methods() {
|
||||
void VisualScriptSwitch::_bind_methods() {
|
||||
|
||||
|
||||
}
|
||||
|
||||
VisualScriptInputSelector::VisualScriptInputSelector() {
|
||||
VisualScriptSwitch::VisualScriptSwitch() {
|
||||
|
||||
|
||||
}
|
||||
@@ -1359,6 +1432,19 @@ bool VisualScriptInputFilter::_get(const StringName& p_name,Variant &r_ret) cons
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static const char* event_type_names[InputEvent::TYPE_MAX]={
|
||||
"None",
|
||||
"Key",
|
||||
"MouseMotion",
|
||||
"MouseButton",
|
||||
"JoystickMotion",
|
||||
"JoystickButton",
|
||||
"ScreenTouch",
|
||||
"ScreenDrag",
|
||||
"Action"
|
||||
};
|
||||
|
||||
void VisualScriptInputFilter::_get_property_list( List<PropertyInfo> *p_list) const {
|
||||
|
||||
p_list->push_back(PropertyInfo(Variant::INT,"filter_count",PROPERTY_HINT_RANGE,"0,64"));
|
||||
@@ -1866,7 +1952,7 @@ void register_visual_script_flow_control_nodes() {
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/while",create_node_generic<VisualScriptWhile>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/iterator",create_node_generic<VisualScriptIterator>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/sequence",create_node_generic<VisualScriptSequence>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/input_select",create_node_generic<VisualScriptInputSelector>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/switch",create_node_generic<VisualScriptSwitch>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/input_filter",create_node_generic<VisualScriptInputFilter>);
|
||||
VisualScriptLanguage::singleton->add_register_func("flow_control/type_cast",create_node_generic<VisualScriptTypeCast>);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user