1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-06 12:20:30 +00:00

Add xrange builtin function

Also update classes.xml in order to document xrange
This commit is contained in:
est31
2016-02-24 02:21:56 +01:00
parent bc87ce6236
commit f81153eb69
3 changed files with 127 additions and 0 deletions

View File

@@ -32,6 +32,7 @@
#include "reference.h"
#include "gd_script.h"
#include "func_ref.h"
#include "range_iterator.h"
#include "os/os.h"
#include "variant_parser.h"
#include "io/marshalls.h"
@@ -98,6 +99,7 @@ const char *GDFunctions::get_func_name(Function p_func) {
"var2bytes",
"bytes2var",
"range",
"xrange",
"load",
"inst2dict",
"dict2inst",
@@ -815,6 +817,81 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va
} break;
}
} break;
case GEN_XRANGE: {
switch(p_arg_count) {
case 0: {
r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
r_error.argument=1;
} break;
case 1: {
VALIDATE_ARG_NUM(0);
int count=*p_args[0];
Ref<RangeIterator> itr = Ref<RangeIterator>( memnew(RangeIterator) );
if (!*itr) {
ERR_EXPLAIN("Couldn't allocate iterator!");
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
ERR_FAIL();
}
(*itr)->set_range(count);
r_ret=Variant(itr);
return;
} break;
case 2: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
int from=*p_args[0];
int to=*p_args[1];
Ref<RangeIterator> itr = Ref<RangeIterator>( memnew(RangeIterator) );
if (!*itr) {
ERR_EXPLAIN("Couldn't allocate iterator!");
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
ERR_FAIL();
}
(*itr)->set_range(from, to);
r_ret=Variant(itr);
return;
} break;
case 3: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
VALIDATE_ARG_NUM(2);
int from=*p_args[0];
int to=*p_args[1];
int incr=*p_args[2];
if (incr==0) {
ERR_EXPLAIN("step argument is zero!");
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
ERR_FAIL();
}
Ref<RangeIterator> itr = Ref<RangeIterator>( memnew(RangeIterator) );
if (!*itr) {
ERR_EXPLAIN("Couldn't allocate iterator!");
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
ERR_FAIL();
}
(*itr)->set_range(from, to, incr);
r_ret=Variant(itr);
return;
} break;
default: {
r_error.error=Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS;
r_error.argument=3;
} break;
}
} break;
case RESOURCE_LOAD: {
VALIDATE_ARG_COUNT(1);
@@ -1433,6 +1510,12 @@ MethodInfo GDFunctions::get_info(Function p_func) {
mi.return_val.type=Variant::ARRAY;
return mi;
} break;
case GEN_XRANGE: {
MethodInfo mi("xrange",PropertyInfo(Variant::NIL,"..."));
mi.return_val.type=Variant::OBJECT;
return mi;
} break;
case RESOURCE_LOAD: {
MethodInfo mi("load",PropertyInfo(Variant::STRING,"path"));