Several performance improvements, mainly in loading and instancing scenes and resources.

A general speedup should be apparent, with even more peformance increase when compiling optimized.

WARNING: Tested and it seems to work, but if something breaks, please report.
This commit is contained in:
Juan Linietsky 2015-06-29 00:29:49 -03:00
parent 2b64f73b04
commit 95047562d7
62 changed files with 475 additions and 294 deletions

View file

@ -1772,6 +1772,7 @@ void _Thread::_start_func(void *ud) {
memdelete(tud); memdelete(tud);
Variant::CallError ce; Variant::CallError ce;
const Variant* arg[1]={&t->userdata}; const Variant* arg[1]={&t->userdata};
t->ret=t->target_instance->call(t->target_method,arg,1,ce); t->ret=t->target_instance->call(t->target_method,arg,1,ce);
if (ce.error!=Variant::CallError::CALL_OK) { if (ce.error!=Variant::CallError::CALL_OK) {
@ -1796,6 +1797,7 @@ void _Thread::_start_func(void *ud) {
default: {} default: {}
} }
ERR_EXPLAIN("Could not call function '"+t->target_method.operator String()+"'' starting thread ID: "+t->get_id()+" Reason: "+reason); ERR_EXPLAIN("Could not call function '"+t->target_method.operator String()+"'' starting thread ID: "+t->get_id()+" Reason: "+reason);
ERR_FAIL(); ERR_FAIL();
} }

View file

@ -1321,7 +1321,7 @@ Vector<String> Globals::get_optimizer_presets() const {
if (!E->get().name.begins_with("optimizer_presets/")) if (!E->get().name.begins_with("optimizer_presets/"))
continue; continue;
names.push_back(E->get().name.get_slice("/",1)); names.push_back(E->get().name.get_slicec('/',1));
} }
names.sort(); names.sort();

View file

@ -1016,10 +1016,10 @@ void Image::create( const char ** p_xpm ) {
String line_str=line_ptr; String line_str=line_ptr;
line_str.replace("\t"," "); line_str.replace("\t"," ");
size_width=line_str.get_slice(" ",0).to_int(); size_width=line_str.get_slicec(' ',0).to_int();
size_height=line_str.get_slice(" ",1).to_int(); size_height=line_str.get_slicec(' ',1).to_int();
colormap_size=line_str.get_slice(" ",2).to_int(); colormap_size=line_str.get_slicec(' ',2).to_int();
pixelchars=line_str.get_slice(" ",3).to_int(); pixelchars=line_str.get_slicec(' ',3).to_int();
ERR_FAIL_COND(colormap_size > 32766); ERR_FAIL_COND(colormap_size > 32766);
ERR_FAIL_COND(pixelchars > 5); ERR_FAIL_COND(pixelchars > 5);
ERR_FAIL_COND(size_width > 32767); ERR_FAIL_COND(size_width > 32767);

View file

@ -325,7 +325,7 @@ Error HTTPClient::poll(){
if (i==0 && responses[i].begins_with("HTTP")) { if (i==0 && responses[i].begins_with("HTTP")) {
String num = responses[i].get_slice(" ",1); String num = responses[i].get_slicec(' ',1);
response_num=num.to_int(); response_num=num.to_int();
} else { } else {

View file

@ -47,7 +47,7 @@ IP_Address::IP_Address(const String& p_string) {
} }
for(int i=0;i<4;i++) { for(int i=0;i<4;i++) {
field[i]=p_string.get_slice(".",i).to_int(); field[i]=p_string.get_slicec('.',i).to_int();
} }
} }

View file

@ -1819,7 +1819,7 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path,const RES& p_
Property p; Property p;
p.name_idx=get_string_index(F->get().name); p.name_idx=get_string_index(F->get().name);
p.value=E->get()->get(F->get().name); p.value=E->get()->get(F->get().name);
if (F->get().usage&PROPERTY_USAGE_STORE_IF_NONZERO && p.value.is_zero()) if ((F->get().usage&PROPERTY_USAGE_STORE_IF_NONZERO && p.value.is_zero())||(F->get().usage&PROPERTY_USAGE_STORE_IF_NONONE && p.value.is_one()) )
continue; continue;
p.pi=F->get(); p.pi=F->get();

View file

@ -1207,47 +1207,47 @@ Error ResourceInteractiveLoaderXML::parse_property(Variant& r_v, String &r_name)
r_v=Vector3( r_v=Vector3(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double(), data.get_slicec(',',1).to_double(),
data.get_slice(",",2).to_double() data.get_slicec(',',2).to_double()
); );
} else if (type=="vector2") { } else if (type=="vector2") {
r_v=Vector2( r_v=Vector2(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double() data.get_slicec(',',1).to_double()
); );
} else if (type=="plane") { } else if (type=="plane") {
r_v=Plane( r_v=Plane(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double(), data.get_slicec(',',1).to_double(),
data.get_slice(",",2).to_double(), data.get_slicec(',',2).to_double(),
data.get_slice(",",3).to_double() data.get_slicec(',',3).to_double()
); );
} else if (type=="quaternion") { } else if (type=="quaternion") {
r_v=Quat( r_v=Quat(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double(), data.get_slicec(',',1).to_double(),
data.get_slice(",",2).to_double(), data.get_slicec(',',2).to_double(),
data.get_slice(",",3).to_double() data.get_slicec(',',3).to_double()
); );
} else if (type=="rect2") { } else if (type=="rect2") {
r_v=Rect2( r_v=Rect2(
Vector2( Vector2(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double() data.get_slicec(',',1).to_double()
), ),
Vector2( Vector2(
data.get_slice(",",2).to_double(), data.get_slicec(',',2).to_double(),
data.get_slice(",",3).to_double() data.get_slicec(',',3).to_double()
) )
); );
@ -1256,14 +1256,14 @@ Error ResourceInteractiveLoaderXML::parse_property(Variant& r_v, String &r_name)
r_v=AABB( r_v=AABB(
Vector3( Vector3(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double(), data.get_slicec(',',1).to_double(),
data.get_slice(",",2).to_double() data.get_slicec(',',2).to_double()
), ),
Vector3( Vector3(
data.get_slice(",",3).to_double(), data.get_slicec(',',3).to_double(),
data.get_slice(",",4).to_double(), data.get_slicec(',',4).to_double(),
data.get_slice(",",5).to_double() data.get_slicec(',',5).to_double()
) )
); );
@ -1272,7 +1272,7 @@ Error ResourceInteractiveLoaderXML::parse_property(Variant& r_v, String &r_name)
Matrix32 m3; Matrix32 m3;
for (int i=0;i<3;i++) { for (int i=0;i<3;i++) {
for (int j=0;j<2;j++) { for (int j=0;j<2;j++) {
m3.elements[i][j]=data.get_slice(",",i*2+j).to_double(); m3.elements[i][j]=data.get_slicec(',',i*2+j).to_double();
} }
} }
r_v=m3; r_v=m3;
@ -1282,7 +1282,7 @@ Error ResourceInteractiveLoaderXML::parse_property(Variant& r_v, String &r_name)
Matrix3 m3; Matrix3 m3;
for (int i=0;i<3;i++) { for (int i=0;i<3;i++) {
for (int j=0;j<3;j++) { for (int j=0;j<3;j++) {
m3.elements[i][j]=data.get_slice(",",i*3+j).to_double(); m3.elements[i][j]=data.get_slicec(',',i*3+j).to_double();
} }
} }
r_v=m3; r_v=m3;
@ -1292,24 +1292,24 @@ Error ResourceInteractiveLoaderXML::parse_property(Variant& r_v, String &r_name)
Transform tr; Transform tr;
for (int i=0;i<3;i++) { for (int i=0;i<3;i++) {
for (int j=0;j<3;j++) { for (int j=0;j<3;j++) {
tr.basis.elements[i][j]=data.get_slice(",",i*3+j).to_double(); tr.basis.elements[i][j]=data.get_slicec(',',i*3+j).to_double();
} }
} }
tr.origin=Vector3( tr.origin=Vector3(
data.get_slice(",",9).to_double(), data.get_slicec(',',9).to_double(),
data.get_slice(",",10).to_double(), data.get_slicec(',',10).to_double(),
data.get_slice(",",11).to_double() data.get_slicec(',',11).to_double()
); );
r_v=tr; r_v=tr;
} else if (type=="color") { } else if (type=="color") {
r_v=Color( r_v=Color(
data.get_slice(",",0).to_double(), data.get_slicec(',',0).to_double(),
data.get_slice(",",1).to_double(), data.get_slicec(',',1).to_double(),
data.get_slice(",",2).to_double(), data.get_slicec(',',2).to_double(),
data.get_slice(",",3).to_double() data.get_slicec(',',3).to_double()
); );
} else if (type=="node_path") { } else if (type=="node_path") {
@ -1674,8 +1674,8 @@ void ResourceInteractiveLoaderXML::open(FileAccess *p_f) {
ERR_FAIL(); ERR_FAIL();
} }
int major = version.get_slice(".",0).to_int(); int major = version.get_slicec('.',0).to_int();
int minor = version.get_slice(".",1).to_int(); int minor = version.get_slicec('.',1).to_int();
if (major>VERSION_MAJOR) { if (major>VERSION_MAJOR) {
@ -2607,9 +2607,12 @@ Error ResourceFormatSaverXMLInstance::save(const String &p_path,const RES& p_res
String name = PE->get().name; String name = PE->get().name;
Variant value = res->get(name); Variant value = res->get(name);
if (PE->get().usage&PROPERTY_USAGE_STORE_IF_NONZERO && value.is_zero())
if ((PE->get().usage&PROPERTY_USAGE_STORE_IF_NONZERO && value.is_zero())||(PE->get().usage&PROPERTY_USAGE_STORE_IF_NONONE && value.is_one()) )
continue; continue;
write_property(name,value); write_property(name,value);
} }

View file

@ -40,8 +40,8 @@ PropertyInfo MethodBind::get_argument_info(int p_argument) const {
PropertyInfo pi( get_argument_type(p_argument), name ); PropertyInfo pi( get_argument_type(p_argument), name );
if ((pi.type==Variant::OBJECT) && name.find(":")!=-1) { if ((pi.type==Variant::OBJECT) && name.find(":")!=-1) {
pi.hint=PROPERTY_HINT_RESOURCE_TYPE; pi.hint=PROPERTY_HINT_RESOURCE_TYPE;
pi.hint_string=name.get_slice(":",1); pi.hint_string=name.get_slicec(':',1);
pi.name=name.get_slice(":",0); pi.name=name.get_slicec(':',0);
} }
return pi; return pi;

View file

@ -258,12 +258,15 @@ bool Object::_predelete() {
_predelete_ok=1; _predelete_ok=1;
notification(NOTIFICATION_PREDELETE,true); notification(NOTIFICATION_PREDELETE,true);
if (_predelete_ok) {
_type_ptr=NULL; //must restore so destructors can access type ptr correctly
}
return _predelete_ok; return _predelete_ok;
} }
void Object::_postinitialize() { void Object::_postinitialize() {
_type_ptr=_get_type_namev();
_initialize_typev(); _initialize_typev();
notification(NOTIFICATION_POSTINITIALIZE); notification(NOTIFICATION_POSTINITIALIZE);
@ -1707,7 +1710,7 @@ bool Object::is_edited() const {
Object::Object() { Object::Object() {
_type_ptr=NULL;
_block_signals=false; _block_signals=false;
_predelete_ok=0; _predelete_ok=0;
_instance_ID=0; _instance_ID=0;

View file

@ -82,7 +82,8 @@ enum PropertyUsageFlags {
PROPERTY_USAGE_BUNDLE=128, //used for optimized bundles PROPERTY_USAGE_BUNDLE=128, //used for optimized bundles
PROPERTY_USAGE_CATEGORY=256, PROPERTY_USAGE_CATEGORY=256,
PROPERTY_USAGE_STORE_IF_NONZERO=512, //only store if nonzero PROPERTY_USAGE_STORE_IF_NONZERO=512, //only store if nonzero
PROPERTY_USAGE_NO_INSTANCE_STATE=1024, PROPERTY_USAGE_STORE_IF_NONONE=1024, //only store if false
PROPERTY_USAGE_NO_INSTANCE_STATE=2048,
PROPERTY_USAGE_DEFAULT=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK, PROPERTY_USAGE_DEFAULT=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK,
PROPERTY_USAGE_DEFAULT_INTL=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK|PROPERTY_USAGE_INTERNATIONALIZED, PROPERTY_USAGE_DEFAULT_INTL=PROPERTY_USAGE_STORAGE|PROPERTY_USAGE_EDITOR|PROPERTY_USAGE_NETWORK|PROPERTY_USAGE_INTERNATIONALIZED,
@ -97,6 +98,8 @@ enum PropertyUsageFlags {
#define ADD_PROPERTYI( m_property, m_setter, m_getter, m_index ) ObjectTypeDB::add_property( get_type_static(), m_property, m_setter, m_getter, m_index ) #define ADD_PROPERTYI( m_property, m_setter, m_getter, m_index ) ObjectTypeDB::add_property( get_type_static(), m_property, m_setter, m_getter, m_index )
#define ADD_PROPERTYNZ( m_property, m_setter, m_getter ) ObjectTypeDB::add_property( get_type_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONZERO), m_setter, m_getter ) #define ADD_PROPERTYNZ( m_property, m_setter, m_getter ) ObjectTypeDB::add_property( get_type_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONZERO), m_setter, m_getter )
#define ADD_PROPERTYINZ( m_property, m_setter, m_getter, m_index ) ObjectTypeDB::add_property( get_type_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONZERO), m_setter, m_getter, m_index ) #define ADD_PROPERTYINZ( m_property, m_setter, m_getter, m_index ) ObjectTypeDB::add_property( get_type_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONZERO), m_setter, m_getter, m_index )
#define ADD_PROPERTYNO( m_property, m_setter, m_getter ) ObjectTypeDB::add_property( get_type_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONONE), m_setter, m_getter )
#define ADD_PROPERTYINO( m_property, m_setter, m_getter, m_index ) ObjectTypeDB::add_property( get_type_static(), (m_property).added_usage(PROPERTY_USAGE_STORE_IF_NONONE), m_setter, m_getter, m_index )
struct PropertyInfo { struct PropertyInfo {
@ -179,10 +182,10 @@ public:\
virtual String get_type() const { \ virtual String get_type() const { \
return String(#m_type);\ return String(#m_type);\
}\ }\
virtual StringName get_type_name() const { \ virtual const StringName* _get_type_namev() const { \
if (!_type_name)\ if (!_type_name)\
_type_name=get_type_static();\ _type_name=get_type_static();\
return _type_name;\ return &_type_name;\
}\ }\
static _FORCE_INLINE_ void* get_type_ptr_static() { \ static _FORCE_INLINE_ void* get_type_ptr_static() { \
static int ptr;\ static int ptr;\
@ -388,6 +391,8 @@ friend void postinitialize_handler(Object*);
ScriptInstance *script_instance; ScriptInstance *script_instance;
RefPtr script; RefPtr script;
Dictionary metadata; Dictionary metadata;
mutable StringName _type_name;
mutable const StringName* _type_ptr;
void _add_user_signal(const String& p_name, const Array& p_pargs=Array()); void _add_user_signal(const String& p_name, const Array& p_pargs=Array());
bool _has_user_signal(const StringName& p_name) const; bool _has_user_signal(const StringName& p_name) const;
@ -445,7 +450,11 @@ protected:
Variant _call_deferred_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error); Variant _call_deferred_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
virtual const StringName* _get_type_namev() const {
if (!_type_name)
_type_name=get_type_static();
return &_type_name;
}
DVector<String> _get_meta_list_bind() const; DVector<String> _get_meta_list_bind() const;
Array _get_property_list_bind() const; Array _get_property_list_bind() const;
@ -523,11 +532,19 @@ public:
virtual String get_type() const { return "Object"; } virtual String get_type() const { return "Object"; }
virtual String get_save_type() const { return get_type(); } //type stored when saving virtual String get_save_type() const { return get_type(); } //type stored when saving
virtual StringName get_type_name() const { return StringName("Object"); }
virtual bool is_type(const String& p_type) const { return (p_type=="Object"); } virtual bool is_type(const String& p_type) const { return (p_type=="Object"); }
virtual bool is_type_ptr(void *p_ptr) const { return get_type_ptr_static()==p_ptr; } virtual bool is_type_ptr(void *p_ptr) const { return get_type_ptr_static()==p_ptr; }
_FORCE_INLINE_ const StringName& get_type_name() const {
if (!_type_ptr) {
return *_get_type_namev();
} else {
return *_type_ptr;
}
}
/* IAPI */ /* IAPI */
// void set(const String& p_name, const Variant& p_value); // void set(const String& p_name, const Variant& p_value);

View file

@ -205,7 +205,7 @@ ObjectTypeDB::TypeInfo::~TypeInfo() {
} }
bool ObjectTypeDB::is_type(const String &p_type,const String& p_inherits) { bool ObjectTypeDB::is_type(const StringName &p_type,const StringName& p_inherits) {
OBJTYPE_LOCK; OBJTYPE_LOCK;
@ -220,7 +220,7 @@ bool ObjectTypeDB::is_type(const String &p_type,const String& p_inherits) {
return false; return false;
} }
void ObjectTypeDB::get_type_list( List<String> *p_types) { void ObjectTypeDB::get_type_list( List<StringName> *p_types) {
OBJTYPE_LOCK; OBJTYPE_LOCK;
@ -235,7 +235,7 @@ void ObjectTypeDB::get_type_list( List<String> *p_types) {
} }
void ObjectTypeDB::get_inheriters_from( const String& p_type,List<String> *p_types) { void ObjectTypeDB::get_inheriters_from( const StringName& p_type,List<StringName> *p_types) {
OBJTYPE_LOCK; OBJTYPE_LOCK;
@ -249,7 +249,7 @@ void ObjectTypeDB::get_inheriters_from( const String& p_type,List<String> *p_typ
} }
String ObjectTypeDB::type_inherits_from(const String& p_type) { StringName ObjectTypeDB::type_inherits_from(const StringName& p_type) {
OBJTYPE_LOCK; OBJTYPE_LOCK;
@ -258,7 +258,7 @@ String ObjectTypeDB::type_inherits_from(const String& p_type) {
return ti->inherits; return ti->inherits;
} }
bool ObjectTypeDB::type_exists(const String &p_type) { bool ObjectTypeDB::type_exists(const StringName &p_type) {
OBJTYPE_LOCK; OBJTYPE_LOCK;
return types.has(p_type); return types.has(p_type);
@ -269,7 +269,7 @@ void ObjectTypeDB::add_compatibility_type(const StringName& p_type,const StringN
compat_types[p_type]=p_fallback; compat_types[p_type]=p_fallback;
} }
Object *ObjectTypeDB::instance(const String &p_type) { Object *ObjectTypeDB::instance(const StringName &p_type) {
TypeInfo *ti; TypeInfo *ti;
{ {
@ -287,7 +287,7 @@ Object *ObjectTypeDB::instance(const String &p_type) {
return ti->creation_func(); return ti->creation_func();
} }
bool ObjectTypeDB::can_instance(const String &p_type) { bool ObjectTypeDB::can_instance(const StringName &p_type) {
OBJTYPE_LOCK; OBJTYPE_LOCK;
@ -650,7 +650,13 @@ bool ObjectTypeDB::set_property(Object* p_object,const StringName& p_property, c
Variant index=psg->index; Variant index=psg->index;
const Variant* arg[2]={&index,&p_value}; const Variant* arg[2]={&index,&p_value};
Variant::CallError ce; Variant::CallError ce;
p_object->call(psg->setter,arg,2,ce); // p_object->call(psg->setter,arg,2,ce);
if (psg->_setptr) {
psg->_setptr->call(p_object,arg,2,ce);
} else {
p_object->call(psg->setter,arg,2,ce);
}
} else { } else {
const Variant* arg[1]={&p_value}; const Variant* arg[1]={&p_value};

View file

@ -228,13 +228,13 @@ public:
T::register_custom_data_to_otdb(); T::register_custom_data_to_otdb();
} }
static void get_type_list( List<String> *p_types); static void get_type_list( List<StringName> *p_types);
static void get_inheriters_from( const String& p_type,List<String> *p_types); static void get_inheriters_from( const StringName& p_type,List<StringName> *p_types);
static String type_inherits_from(const String& p_type); static StringName type_inherits_from(const StringName& p_type);
static bool type_exists(const String &p_type); static bool type_exists(const StringName &p_type);
static bool is_type(const String &p_type,const String& p_inherits); static bool is_type(const StringName &p_type,const StringName& p_inherits);
static bool can_instance(const String &p_type); static bool can_instance(const StringName &p_type);
static Object *instance(const String &p_type); static Object *instance(const StringName &p_type);
#if 0 #if 0
template<class N, class M> template<class N, class M>

View file

@ -60,7 +60,7 @@ void ScriptDebuggerLocal::debug(ScriptLanguage *p_script,bool p_can_continue) {
if (line.get_slice_count(" ")==1) { if (line.get_slice_count(" ")==1) {
print_line("*Frame "+itos(current_frame)+" - "+p_script->debug_get_stack_level_source(current_frame)+":"+itos(p_script->debug_get_stack_level_line(current_frame))+" in function '"+p_script->debug_get_stack_level_function(current_frame)+"'"); print_line("*Frame "+itos(current_frame)+" - "+p_script->debug_get_stack_level_source(current_frame)+":"+itos(p_script->debug_get_stack_level_line(current_frame))+" in function '"+p_script->debug_get_stack_level_function(current_frame)+"'");
} else { } else {
int frame = line.get_slice(" ",1).to_int(); int frame = line.get_slicec(' ',1).to_int();
if (frame<0 || frame >=total_frames) { if (frame<0 || frame >=total_frames) {
print_line("Error: Invalid frame."); print_line("Error: Invalid frame.");
} else { } else {
@ -108,7 +108,7 @@ void ScriptDebuggerLocal::debug(ScriptLanguage *p_script,bool p_can_continue) {
print_line("Usage: print <expre>"); print_line("Usage: print <expre>");
} else { } else {
String expr = line.get_slice(" ",2); String expr = line.get_slicec(' ',2);
String res = p_script->debug_parse_stack_level_expression(current_frame,expr); String res = p_script->debug_parse_stack_level_expression(current_frame,expr);
print_line(res); print_line(res);
} }
@ -130,9 +130,9 @@ void ScriptDebuggerLocal::debug(ScriptLanguage *p_script,bool p_can_continue) {
} else { } else {
String bppos=line.get_slice(" ",1); String bppos=line.get_slicec(' ',1);
String source=bppos.get_slice(":",0).strip_edges(); String source=bppos.get_slicec(':',0).strip_edges();
int line=bppos.get_slice(":",1).strip_edges().to_int(); int line=bppos.get_slicec(':',1).strip_edges().to_int();
source = breakpoint_find_source(source); source = breakpoint_find_source(source);
@ -147,9 +147,9 @@ void ScriptDebuggerLocal::debug(ScriptLanguage *p_script,bool p_can_continue) {
clear_breakpoints(); clear_breakpoints();
} else { } else {
String bppos=line.get_slice(" ",1); String bppos=line.get_slicec(' ',1);
String source=bppos.get_slice(":",0).strip_edges(); String source=bppos.get_slicec(':',0).strip_edges();
int line=bppos.get_slice(":",1).strip_edges().to_int(); int line=bppos.get_slicec(':',1).strip_edges().to_int();
source = breakpoint_find_source(source); source = breakpoint_find_source(source);

View file

@ -158,7 +158,7 @@ void StringName::operator=(const StringName& p_name) {
_data = p_name._data; _data = p_name._data;
} }
} }
/* was inlined
StringName::operator String() const { StringName::operator String() const {
if (_data) if (_data)
@ -166,7 +166,7 @@ StringName::operator String() const {
return ""; return "";
} }
*/
StringName::StringName(const StringName& p_name) { StringName::StringName(const StringName& p_name) {
ERR_FAIL_COND(!configured); ERR_FAIL_COND(!configured);

View file

@ -114,7 +114,17 @@ public:
} }
bool operator!=(const StringName& p_name) const; bool operator!=(const StringName& p_name) const;
operator String() const; _FORCE_INLINE_ operator String() const {
if (_data) {
if (_data->cname )
return String(_data->cname);
else
return _data->name;
}
return String();
}
static StringName search(const char *p_name); static StringName search(const char *p_name);
static StringName search(const CharType *p_name); static StringName search(const CharType *p_name);

View file

@ -486,7 +486,7 @@ String String::capitalize() const {
String cap; String cap;
for (int i=0;i<aux.get_slice_count(" ");i++) { for (int i=0;i<aux.get_slice_count(" ");i++) {
String slice=aux.get_slice(" ",i); String slice=aux.get_slicec(' ',i);
if (slice.length()>0) { if (slice.length()>0) {
slice[0]=_find_upper(slice[0]); slice[0]=_find_upper(slice[0]);
@ -577,6 +577,41 @@ String String::get_slice(String p_splitter, int p_slice) const {
} }
String String::get_slicec(CharType p_splitter, int p_slice) const {
if (empty())
return String();
if (p_slice<0)
return String();
const CharType *c=this->ptr();
int i=0;
int prev=0;
int count=0;
while(true) {
if (c[i]==0 || c[i]==p_splitter) {
if (p_slice==count) {
return substr(prev,i-prev);
} else {
count++;
prev=i+1;
}
}
i++;
}
return String(); //no find!
}
Vector<String> String::split_spaces() const { Vector<String> String::split_spaces() const {
@ -3333,8 +3368,8 @@ String String::path_to(const String& p_path) const {
//nothing //nothing
} else { } else {
//dos style //dos style
String src_begin=src.get_slice("/",0); String src_begin=src.get_slicec('/',0);
String dst_begin=dst.get_slice("/",0); String dst_begin=dst.get_slicec('/',0);
if (src_begin!=dst_begin) if (src_begin!=dst_begin)
return p_path; //impossible to do this return p_path; //impossible to do this

View file

@ -153,6 +153,7 @@ public:
int get_slice_count(String p_splitter) const; int get_slice_count(String p_splitter) const;
String get_slice(String p_splitter,int p_slice) const; String get_slice(String p_splitter,int p_slice) const;
String get_slicec(CharType splitter,int p_slice) const;
Vector<String> split(const String &p_splitter,bool p_allow_empty=true) const; Vector<String> split(const String &p_splitter,bool p_allow_empty=true) const;
Vector<String> split_spaces() const; Vector<String> split_spaces() const;

View file

@ -878,6 +878,63 @@ bool Variant::is_zero() const {
return false; return false;
} }
bool Variant::is_one() const {
switch( type ) {
case NIL: {
return true;
} break;
// atomic types
case BOOL: {
return _data._bool==true;
} break;
case INT: {
return _data._int==1;
} break;
case REAL: {
return _data._real==1;
} break;
case VECTOR2: {
return *reinterpret_cast<const Vector2*>(_data._mem)==Vector2(1,1);
} break;
case RECT2: {
return *reinterpret_cast<const Rect2*>(_data._mem)==Rect2(1,1,1,1);
} break;
case VECTOR3: {
return *reinterpret_cast<const Vector3*>(_data._mem)==Vector3(1,1,1);
} break;
case PLANE: {
return *reinterpret_cast<const Plane*>(_data._mem)==Plane(1,1,1,1);
} break;
case COLOR: {
return *reinterpret_cast<const Color*>(_data._mem)==Color(1,1,1,1);
} break;
default: { return !is_zero(); }
}
return false;
}
void Variant::reference(const Variant& p_variant) { void Variant::reference(const Variant& p_variant) {

View file

@ -185,6 +185,7 @@ public:
_FORCE_INLINE_ bool is_array() const { return type>=ARRAY; }; _FORCE_INLINE_ bool is_array() const { return type>=ARRAY; };
bool is_shared() const; bool is_shared() const;
bool is_zero() const; bool is_zero() const;
bool is_one() const;
operator bool() const; operator bool() const;
operator signed int() const; operator signed int() const;

View file

@ -340,12 +340,14 @@ template<class T>
void Vector<T>::remove(int p_index) { void Vector<T>::remove(int p_index) {
ERR_FAIL_INDEX(p_index, size()); ERR_FAIL_INDEX(p_index, size());
for (int i=p_index; i<size()-1; i++) { T*p=ptr();
int len=size();
for (int i=p_index; i<len-1; i++) {
set(i, get(i+1)); p[i]=p[i+1];
}; };
resize(size()-1); resize(len-1);
}; };
template<class T> template<class T>

View file

@ -524,8 +524,8 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
ScriptDebuggerRemote *sdr = memnew( ScriptDebuggerRemote ); ScriptDebuggerRemote *sdr = memnew( ScriptDebuggerRemote );
uint16_t debug_port = GLOBAL_DEF("debug/remote_port",6007); uint16_t debug_port = GLOBAL_DEF("debug/remote_port",6007);
if (debug_host.find(":")!=-1) { if (debug_host.find(":")!=-1) {
debug_port=debug_host.get_slice(":",1).to_int(); debug_port=debug_host.get_slicec(':',1).to_int();
debug_host=debug_host.get_slice(":",0); debug_host=debug_host.get_slicec(':',0);
} }
Error derr = sdr->connect_to_host(debug_host,debug_port); Error derr = sdr->connect_to_host(debug_host,debug_port);
@ -546,8 +546,8 @@ Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phas
file_access_network_client=memnew(FileAccessNetworkClient); file_access_network_client=memnew(FileAccessNetworkClient);
int port; int port;
if (remotefs.find(":")!=-1) { if (remotefs.find(":")!=-1) {
port=remotefs.get_slice(":",1).to_int(); port=remotefs.get_slicec(':',1).to_int();
remotefs=remotefs.get_slice(":",0); remotefs=remotefs.get_slicec(':',0);
} else { } else {
port=6010; port=6010;
} }
@ -1219,7 +1219,7 @@ bool Main::start() {
String s = E->get().name; String s = E->get().name;
if (!s.begins_with("autoload/")) if (!s.begins_with("autoload/"))
continue; continue;
String name = s.get_slice("/",1); String name = s.get_slicec('/',1);
String path = Globals::get_singleton()->get(s); String path = Globals::get_singleton()->get(s);
RES res = ResourceLoader::load(path); RES res = ResourceLoader::load(path);
ERR_EXPLAIN("Can't autoload: "+path); ERR_EXPLAIN("Can't autoload: "+path);

View file

@ -2556,9 +2556,9 @@ void GDScriptLanguage::init() {
//populate native classes //populate native classes
List<String> class_list; List<StringName> class_list;
ObjectTypeDB::get_type_list(&class_list); ObjectTypeDB::get_type_list(&class_list);
for(List<String>::Element *E=class_list.front();E;E=E->next()) { for(List<StringName>::Element *E=class_list.front();E;E=E->next()) {
StringName n = E->get(); StringName n = E->get();
String s = String(n); String s = String(n);

View file

@ -130,8 +130,8 @@ bool GridMap::_set(const StringName& p_name, const Variant& p_value) {
} else if (name.begins_with("areas/")) { } else if (name.begins_with("areas/")) {
int which = name.get_slice("/",1).to_int(); int which = name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
if (what=="bounds") { if (what=="bounds") {
ERR_FAIL_COND_V(area_map.has(which),false); ERR_FAIL_COND_V(area_map.has(which),false);
create_area(which,p_value); create_area(which,p_value);
@ -215,8 +215,8 @@ bool GridMap::_get(const StringName& p_name,Variant &r_ret) const {
r_ret= d; r_ret= d;
} else if (name.begins_with("areas/")) { } else if (name.begins_with("areas/")) {
int which = name.get_slice("/",1).to_int(); int which = name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
if (what=="bounds") if (what=="bounds")
r_ret= area_get_bounds(which); r_ret= area_get_bounds(which);
else if (what=="name") else if (what=="name")

View file

@ -317,7 +317,7 @@ bool EditorExportPlatformAndroid::_set(const StringName& p_name, const Variant&
apk_expansion_pkey=p_value; apk_expansion_pkey=p_value;
else if (n.begins_with("permissions/")) { else if (n.begins_with("permissions/")) {
String what = n.get_slice("/",1).to_upper(); String what = n.get_slicec('/',1).to_upper();
bool state = p_value; bool state = p_value;
if (state) if (state)
perms.insert(what); perms.insert(what);
@ -325,7 +325,7 @@ bool EditorExportPlatformAndroid::_set(const StringName& p_name, const Variant&
perms.erase(what); perms.erase(what);
} else if (n.begins_with("user_permissions/")) { } else if (n.begins_with("user_permissions/")) {
int which = n.get_slice("/",1).to_int(); int which = n.get_slicec('/',1).to_int();
ERR_FAIL_INDEX_V(which,MAX_USER_PERMISSIONS,false); ERR_FAIL_INDEX_V(which,MAX_USER_PERMISSIONS,false);
user_perms[which]=p_value; user_perms[which]=p_value;
@ -390,11 +390,11 @@ bool EditorExportPlatformAndroid::_get(const StringName& p_name,Variant &r_ret)
r_ret=apk_expansion_pkey; r_ret=apk_expansion_pkey;
else if (n.begins_with("permissions/")) { else if (n.begins_with("permissions/")) {
String what = n.get_slice("/",1).to_upper(); String what = n.get_slicec('/',1).to_upper();
r_ret = perms.has(what); r_ret = perms.has(what);
} else if (n.begins_with("user_permissions/")) { } else if (n.begins_with("user_permissions/")) {
int which = n.get_slice("/",1).to_int(); int which = n.get_slicec('/',1).to_int();
ERR_FAIL_INDEX_V(which,MAX_USER_PERMISSIONS,false); ERR_FAIL_INDEX_V(which,MAX_USER_PERMISSIONS,false);
r_ret=user_perms[which]; r_ret=user_perms[which];
} else } else

View file

@ -330,11 +330,11 @@ void AnimatedSprite::_bind_methods() {
ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "frames",PROPERTY_HINT_RESOURCE_TYPE,"SpriteFrames"), _SCS("set_sprite_frames"),_SCS("get_sprite_frames")); ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "frames",PROPERTY_HINT_RESOURCE_TYPE,"SpriteFrames"), _SCS("set_sprite_frames"),_SCS("get_sprite_frames"));
ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "frame",PROPERTY_HINT_SPRITE_FRAME), _SCS("set_frame"),_SCS("get_frame")); ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "frame",PROPERTY_HINT_SPRITE_FRAME), _SCS("set_frame"),_SCS("get_frame"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered")); ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered"));
ADD_PROPERTYNZ( PropertyInfo( Variant::VECTOR2, "offset"), _SCS("set_offset"),_SCS("get_offset")); ADD_PROPERTYNZ( PropertyInfo( Variant::VECTOR2, "offset"), _SCS("set_offset"),_SCS("get_offset"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "flip_h"), _SCS("set_flip_h"),_SCS("is_flipped_h")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "flip_h"), _SCS("set_flip_h"),_SCS("is_flipped_h"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "flip_v"), _SCS("set_flip_v"),_SCS("is_flipped_v")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "flip_v"), _SCS("set_flip_v"),_SCS("is_flipped_v"));
ADD_PROPERTY( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate")); ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate"));
} }

View file

@ -428,8 +428,9 @@ void Area2D::set_enable_monitoring(bool p_enable) {
if (monitoring) { if (monitoring) {
Physics2DServer::get_singleton()->area_set_monitor_callback(get_rid(),this,"_body_inout"); Physics2DServer::get_singleton()->area_set_monitor_callback(get_rid(),this,SceneStringNames::get_singleton()->_body_inout);
Physics2DServer::get_singleton()->area_set_area_monitor_callback(get_rid(),this,"_area_inout"); Physics2DServer::get_singleton()->area_set_area_monitor_callback(get_rid(),this,SceneStringNames::get_singleton()->_area_inout);
} else { } else {
Physics2DServer::get_singleton()->area_set_monitor_callback(get_rid(),NULL,StringName()); Physics2DServer::get_singleton()->area_set_monitor_callback(get_rid(),NULL,StringName());
Physics2DServer::get_singleton()->area_set_area_monitor_callback(get_rid(),NULL,StringName()); Physics2DServer::get_singleton()->area_set_area_monitor_callback(get_rid(),NULL,StringName());
@ -652,17 +653,17 @@ void Area2D::_bind_methods() {
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"space_override",PROPERTY_HINT_ENUM,"Disabled,Combine,Replace"),_SCS("set_space_override_mode"),_SCS("get_space_override_mode")); ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"space_override",PROPERTY_HINT_ENUM,"Disabled,Combine,Replace"),_SCS("set_space_override_mode"),_SCS("get_space_override_mode"));
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"gravity_point"),_SCS("set_gravity_is_point"),_SCS("is_gravity_a_point")); ADD_PROPERTYNZ( PropertyInfo(Variant::BOOL,"gravity_point"),_SCS("set_gravity_is_point"),_SCS("is_gravity_a_point"));
ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity_distance_scale", PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_gravity_distance_scale"),_SCS("get_gravity_distance_scale")); ADD_PROPERTYNZ( PropertyInfo(Variant::REAL,"gravity_distance_scale", PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_gravity_distance_scale"),_SCS("get_gravity_distance_scale"));
ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"gravity_vec"),_SCS("set_gravity_vector"),_SCS("get_gravity_vector")); ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"gravity_vec"),_SCS("set_gravity_vector"),_SCS("get_gravity_vector"));
ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-1024,1024,0.01"),_SCS("set_gravity"),_SCS("get_gravity")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-1024,1024,0.01"),_SCS("set_gravity"),_SCS("get_gravity"));
ADD_PROPERTY( PropertyInfo(Variant::REAL,"linear_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_linear_damp"),_SCS("get_linear_damp")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"linear_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_linear_damp"),_SCS("get_linear_damp"));
ADD_PROPERTY( PropertyInfo(Variant::REAL,"angular_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_angular_damp"),_SCS("get_angular_damp")); ADD_PROPERTY( PropertyInfo(Variant::REAL,"angular_damp",PROPERTY_HINT_RANGE,"0,1024,0.001"),_SCS("set_angular_damp"),_SCS("get_angular_damp"));
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"priority",PROPERTY_HINT_RANGE,"0,128,1"),_SCS("set_priority"),_SCS("get_priority")); ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"priority",PROPERTY_HINT_RANGE,"0,128,1"),_SCS("set_priority"),_SCS("get_priority"));
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"monitoring"),_SCS("set_enable_monitoring"),_SCS("is_monitoring_enabled")); ADD_PROPERTYNO( PropertyInfo(Variant::BOOL,"monitoring"),_SCS("set_enable_monitoring"),_SCS("is_monitoring_enabled"));
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"monitorable"),_SCS("set_monitorable"),_SCS("is_monitorable")); ADD_PROPERTYNO( PropertyInfo(Variant::BOOL,"monitorable"),_SCS("set_monitorable"),_SCS("is_monitorable"));
ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/layers",PROPERTY_HINT_ALL_FLAGS),_SCS("set_layer_mask"),_SCS("get_layer_mask")); ADD_PROPERTYNO( PropertyInfo(Variant::INT,"collision/layers",PROPERTY_HINT_ALL_FLAGS),_SCS("set_layer_mask"),_SCS("get_layer_mask"));
ADD_PROPERTY( PropertyInfo(Variant::INT,"collision/mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_collision_mask"),_SCS("get_collision_mask")); ADD_PROPERTYNO( PropertyInfo(Variant::INT,"collision/mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_collision_mask"),_SCS("get_collision_mask"));
} }

View file

@ -1103,14 +1103,14 @@ void CanvasItem::_bind_methods() {
BIND_VMETHOD(MethodInfo("_draw")); BIND_VMETHOD(MethodInfo("_draw"));
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"visibility/visible"), _SCS("_set_visible_"),_SCS("_is_visible_") ); ADD_PROPERTYNO( PropertyInfo(Variant::BOOL,"visibility/visible"), _SCS("_set_visible_"),_SCS("_is_visible_") );
ADD_PROPERTY( PropertyInfo(Variant::REAL,"visibility/opacity",PROPERTY_HINT_RANGE, "0,1,0.01"), _SCS("set_opacity"),_SCS("get_opacity") ); ADD_PROPERTYNO( PropertyInfo(Variant::REAL,"visibility/opacity",PROPERTY_HINT_RANGE, "0,1,0.01"), _SCS("set_opacity"),_SCS("get_opacity") );
ADD_PROPERTY( PropertyInfo(Variant::REAL,"visibility/self_opacity",PROPERTY_HINT_RANGE, "0,1,0.01"), _SCS("set_self_opacity"),_SCS("get_self_opacity") ); ADD_PROPERTYNO( PropertyInfo(Variant::REAL,"visibility/self_opacity",PROPERTY_HINT_RANGE, "0,1,0.01"), _SCS("set_self_opacity"),_SCS("get_self_opacity") );
ADD_PROPERTYNZ( PropertyInfo(Variant::BOOL,"visibility/behind_parent"), _SCS("set_draw_behind_parent"),_SCS("is_draw_behind_parent_enabled") ); ADD_PROPERTYNZ( PropertyInfo(Variant::BOOL,"visibility/behind_parent"), _SCS("set_draw_behind_parent"),_SCS("is_draw_behind_parent_enabled") );
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"visibility/on_top",PROPERTY_HINT_NONE,"",0), _SCS("_set_on_top"),_SCS("_is_on_top") ); //compatibility ADD_PROPERTY( PropertyInfo(Variant::BOOL,"visibility/on_top",PROPERTY_HINT_NONE,"",0), _SCS("_set_on_top"),_SCS("_is_on_top") ); //compatibility
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"visibility/blend_mode",PROPERTY_HINT_ENUM, "Mix,Add,Sub,Mul,PMAlpha"), _SCS("set_blend_mode"),_SCS("get_blend_mode") ); ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"visibility/blend_mode",PROPERTY_HINT_ENUM, "Mix,Add,Sub,Mul,PMAlpha"), _SCS("set_blend_mode"),_SCS("get_blend_mode") );
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"visibility/light_mask",PROPERTY_HINT_ALL_FLAGS), _SCS("set_light_mask"),_SCS("get_light_mask") ); ADD_PROPERTYNO( PropertyInfo(Variant::INT,"visibility/light_mask",PROPERTY_HINT_ALL_FLAGS), _SCS("set_light_mask"),_SCS("get_light_mask") );
ADD_PROPERTYNZ( PropertyInfo(Variant::OBJECT,"material/material",PROPERTY_HINT_RESOURCE_TYPE, "CanvasItemMaterial"), _SCS("set_material"),_SCS("get_material") ); ADD_PROPERTYNZ( PropertyInfo(Variant::OBJECT,"material/material",PROPERTY_HINT_RESOURCE_TYPE, "CanvasItemMaterial"), _SCS("set_material"),_SCS("get_material") );
ADD_PROPERTYNZ( PropertyInfo(Variant::BOOL,"material/use_parent"), _SCS("set_use_parent_material"),_SCS("get_use_parent_material") ); ADD_PROPERTYNZ( PropertyInfo(Variant::BOOL,"material/use_parent"), _SCS("set_use_parent_material"),_SCS("get_use_parent_material") );
//exporting these two things doesn't really make much sense i think //exporting these two things doesn't really make much sense i think

View file

@ -115,19 +115,16 @@ void CollisionObject2D::_update_shapes() {
bool CollisionObject2D::_set(const StringName& p_name, const Variant& p_value) { bool CollisionObject2D::_set(const StringName& p_name, const Variant& p_value) {
String name=p_name; String name=p_name;
if (name=="shape_count") { if (name.begins_with("shapes/")) {
shapes.resize(p_value); int idx=name.get_slicec('/',1).to_int();
_update_shapes(); String what=name.get_slicec('/',2);
_change_notify(); if (what=="shape") {
if (idx>=shapes.size())
} else if (name.begins_with("shapes/")) { add_shape(RefPtr(p_value));
else
int idx=name.get_slice("/",1).to_int(); set_shape(idx,RefPtr(p_value));
String what=name.get_slice("/",2); } else if (what=="transform")
if (what=="shape")
set_shape(idx,RefPtr(p_value));
else if (what=="transform")
set_shape_transform(idx,p_value); set_shape_transform(idx,p_value);
else if (what=="trigger") else if (what=="trigger")
set_shape_as_trigger(idx,p_value); set_shape_as_trigger(idx,p_value);
@ -143,12 +140,10 @@ bool CollisionObject2D::_get(const StringName& p_name,Variant &r_ret) const {
String name=p_name; String name=p_name;
if (name=="shape_count") { if (name.begins_with("shapes/")) {
r_ret= shapes.size();
} else if (name.begins_with("shapes/")) {
int idx=name.get_slice("/",1).to_int(); int idx=name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
if (what=="shape") if (what=="shape")
r_ret= get_shape(idx); r_ret= get_shape(idx);
else if (what=="transform") else if (what=="transform")
@ -163,7 +158,7 @@ bool CollisionObject2D::_get(const StringName& p_name,Variant &r_ret) const {
void CollisionObject2D::_get_property_list( List<PropertyInfo> *p_list) const { void CollisionObject2D::_get_property_list( List<PropertyInfo> *p_list) const {
p_list->push_back( PropertyInfo(Variant::INT,"shape_count",PROPERTY_HINT_RANGE,"0,256,1",PROPERTY_USAGE_NOEDITOR|PROPERTY_USAGE_NO_INSTANCE_STATE) ); //p_list->push_back( PropertyInfo(Variant::INT,"shape_count",PROPERTY_HINT_RANGE,"0,256,1",PROPERTY_USAGE_NOEDITOR|PROPERTY_USAGE_NO_INSTANCE_STATE) );
for(int i=0;i<shapes.size();i++) { for(int i=0;i<shapes.size();i++) {
String path="shapes/"+itos(i)+"/"; String path="shapes/"+itos(i)+"/";
@ -254,12 +249,19 @@ void CollisionObject2D::_bind_methods() {
void CollisionObject2D::add_shape(const Ref<Shape2D>& p_shape, const Matrix32& p_transform) { void CollisionObject2D::add_shape(const Ref<Shape2D>& p_shape, const Matrix32& p_transform) {
ERR_FAIL_COND(p_shape.is_null());
ShapeData sdata; ShapeData sdata;
sdata.shape=p_shape; sdata.shape=p_shape;
sdata.xform=p_transform; sdata.xform=p_transform;
sdata.trigger=false; sdata.trigger=false;
shapes.push_back(sdata);
_update_shapes(); if (area)
Physics2DServer::get_singleton()->area_add_shape(get_rid(),p_shape->get_rid(),p_transform);
else
Physics2DServer::get_singleton()->body_add_shape(get_rid(),p_shape->get_rid(),p_transform);
shapes.push_back(sdata);
} }
int CollisionObject2D::get_shape_count() const { int CollisionObject2D::get_shape_count() const {
@ -270,8 +272,15 @@ int CollisionObject2D::get_shape_count() const {
void CollisionObject2D::set_shape(int p_shape_idx, const Ref<Shape2D>& p_shape) { void CollisionObject2D::set_shape(int p_shape_idx, const Ref<Shape2D>& p_shape) {
ERR_FAIL_INDEX(p_shape_idx,shapes.size()); ERR_FAIL_INDEX(p_shape_idx,shapes.size());
ERR_FAIL_COND(p_shape.is_null());
shapes[p_shape_idx].shape=p_shape; shapes[p_shape_idx].shape=p_shape;
_update_shapes(); if (area)
Physics2DServer::get_singleton()->area_set_shape(get_rid(),p_shape_idx,p_shape->get_rid());
else
Physics2DServer::get_singleton()->body_set_shape(get_rid(),p_shape_idx,p_shape->get_rid());
// _update_shapes();
} }
void CollisionObject2D::set_shape_transform(int p_shape_idx, const Matrix32& p_transform) { void CollisionObject2D::set_shape_transform(int p_shape_idx, const Matrix32& p_transform) {
@ -279,7 +288,12 @@ void CollisionObject2D::set_shape_transform(int p_shape_idx, const Matrix32& p_t
ERR_FAIL_INDEX(p_shape_idx,shapes.size()); ERR_FAIL_INDEX(p_shape_idx,shapes.size());
shapes[p_shape_idx].xform=p_transform; shapes[p_shape_idx].xform=p_transform;
_update_shapes(); if (area)
Physics2DServer::get_singleton()->area_set_shape_transform(get_rid(),p_shape_idx,p_transform);
else
Physics2DServer::get_singleton()->body_set_shape_transform(get_rid(),p_shape_idx,p_transform);
// _update_shapes();
} }
Ref<Shape2D> CollisionObject2D::get_shape(int p_shape_idx) const { Ref<Shape2D> CollisionObject2D::get_shape(int p_shape_idx) const {

View file

@ -398,11 +398,11 @@ void Node2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_relative_transform"),&Node2D::get_relative_transform); ObjectTypeDB::bind_method(_MD("get_relative_transform"),&Node2D::get_relative_transform);
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"transform/pos"),_SCS("set_pos"),_SCS("get_pos")); ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2,"transform/pos"),_SCS("set_pos"),_SCS("get_pos"));
ADD_PROPERTY(PropertyInfo(Variant::REAL,"transform/rot",PROPERTY_HINT_RANGE,"-1440,1440,0.1"),_SCS("_set_rotd"),_SCS("_get_rotd")); ADD_PROPERTYNZ(PropertyInfo(Variant::REAL,"transform/rot",PROPERTY_HINT_RANGE,"-1440,1440,0.1"),_SCS("_set_rotd"),_SCS("_get_rotd"));
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"transform/scale"),_SCS("set_scale"),_SCS("get_scale")); ADD_PROPERTYNO(PropertyInfo(Variant::VECTOR2,"transform/scale"),_SCS("set_scale"),_SCS("get_scale"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"z/z",PROPERTY_HINT_RANGE,itos(VS::CANVAS_ITEM_Z_MIN)+","+itos(VS::CANVAS_ITEM_Z_MAX)+",1"),_SCS("set_z"),_SCS("get_z")); ADD_PROPERTYNZ(PropertyInfo(Variant::INT,"z/z",PROPERTY_HINT_RANGE,itos(VS::CANVAS_ITEM_Z_MIN)+","+itos(VS::CANVAS_ITEM_Z_MAX)+",1"),_SCS("set_z"),_SCS("get_z"));
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"z/relative"),_SCS("set_z_as_relative"),_SCS("is_z_relative")); ADD_PROPERTYNO(PropertyInfo(Variant::BOOL,"z/relative"),_SCS("set_z_as_relative"),_SCS("is_z_relative"));
} }

View file

@ -1072,19 +1072,19 @@ void Particles2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::INT,"config/amount",PROPERTY_HINT_EXP_RANGE,"1,1024"),_SCS("set_amount"),_SCS("get_amount") ); ADD_PROPERTY(PropertyInfo(Variant::INT,"config/amount",PROPERTY_HINT_EXP_RANGE,"1,1024"),_SCS("set_amount"),_SCS("get_amount") );
ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/lifetime",PROPERTY_HINT_EXP_RANGE,"0.1,3600,0.1"),_SCS("set_lifetime"),_SCS("get_lifetime") ); ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/lifetime",PROPERTY_HINT_EXP_RANGE,"0.1,3600,0.1"),_SCS("set_lifetime"),_SCS("get_lifetime") );
ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/time_scale",PROPERTY_HINT_EXP_RANGE,"0.01,128,0.01"),_SCS("set_time_scale"),_SCS("get_time_scale") ); ADD_PROPERTYNO(PropertyInfo(Variant::REAL,"config/time_scale",PROPERTY_HINT_EXP_RANGE,"0.01,128,0.01"),_SCS("set_time_scale"),_SCS("get_time_scale") );
ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/preprocess",PROPERTY_HINT_EXP_RANGE,"0.1,3600,0.1"),_SCS("set_pre_process_time"),_SCS("get_pre_process_time") ); ADD_PROPERTYNZ(PropertyInfo(Variant::REAL,"config/preprocess",PROPERTY_HINT_EXP_RANGE,"0.1,3600,0.1"),_SCS("set_pre_process_time"),_SCS("get_pre_process_time") );
ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/emit_timeout",PROPERTY_HINT_RANGE,"0,3600,0.1"),_SCS("set_emit_timeout"),_SCS("get_emit_timeout") ); ADD_PROPERTYNZ(PropertyInfo(Variant::REAL,"config/emit_timeout",PROPERTY_HINT_RANGE,"0,3600,0.1"),_SCS("set_emit_timeout"),_SCS("get_emit_timeout") );
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"config/emitting"),_SCS("set_emitting"),_SCS("is_emitting") ); ADD_PROPERTYNO(PropertyInfo(Variant::BOOL,"config/emitting"),_SCS("set_emitting"),_SCS("is_emitting") );
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"config/offset"),_SCS("set_emissor_offset"),_SCS("get_emissor_offset")); ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2,"config/offset"),_SCS("set_emissor_offset"),_SCS("get_emissor_offset"));
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"config/half_extents"),_SCS("set_emission_half_extents"),_SCS("get_emission_half_extents")); ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2,"config/half_extents"),_SCS("set_emission_half_extents"),_SCS("get_emission_half_extents"));
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"config/local_space"),_SCS("set_use_local_space"),_SCS("is_using_local_space")); ADD_PROPERTYNO(PropertyInfo(Variant::BOOL,"config/local_space"),_SCS("set_use_local_space"),_SCS("is_using_local_space"));
ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/explosiveness",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_explosiveness"),_SCS("get_explosiveness")); ADD_PROPERTYNO(PropertyInfo(Variant::REAL,"config/explosiveness",PROPERTY_HINT_RANGE,"0,1,0.01"),_SCS("set_explosiveness"),_SCS("get_explosiveness"));
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"config/flip_h"),_SCS("set_flip_h"),_SCS("is_flipped_h")); ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL,"config/flip_h"),_SCS("set_flip_h"),_SCS("is_flipped_h"));
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"config/flip_v"),_SCS("set_flip_v"),_SCS("is_flipped_v")); ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL,"config/flip_v"),_SCS("set_flip_v"),_SCS("is_flipped_v"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"config/texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture"),_SCS("set_texture"),_SCS("get_texture")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"config/texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture"),_SCS("set_texture"),_SCS("get_texture"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"config/h_frames",PROPERTY_HINT_RANGE,"1,512,1"),_SCS("set_h_frames"),_SCS("get_h_frames")); ADD_PROPERTYNO(PropertyInfo(Variant::INT,"config/h_frames",PROPERTY_HINT_RANGE,"1,512,1"),_SCS("set_h_frames"),_SCS("get_h_frames"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"config/v_frames",PROPERTY_HINT_RANGE,"1,512,1"),_SCS("set_v_frames"),_SCS("get_v_frames")); ADD_PROPERTYNO(PropertyInfo(Variant::INT,"config/v_frames",PROPERTY_HINT_RANGE,"1,512,1"),_SCS("set_v_frames"),_SCS("get_v_frames"));
for(int i=0;i<PARAM_MAX;i++) { for(int i=0;i<PARAM_MAX;i++) {
@ -1092,10 +1092,10 @@ void Particles2D::_bind_methods() {
} }
for(int i=0;i<PARAM_MAX;i++) { for(int i=0;i<PARAM_MAX;i++) {
ADD_PROPERTYI(PropertyInfo(Variant::REAL,_particlesframe_property_rnames[i],PROPERTY_HINT_RANGE,"-1,1,0.01"),_SCS("set_randomness"),_SCS("get_randomness"),i); ADD_PROPERTYINZ(PropertyInfo(Variant::REAL,_particlesframe_property_rnames[i],PROPERTY_HINT_RANGE,"-1,1,0.01"),_SCS("set_randomness"),_SCS("get_randomness"),i);
} }
ADD_PROPERTY( PropertyInfo( Variant::INT, "color_phases/count",PROPERTY_HINT_RANGE,"0,4,1", 0), _SCS("set_color_phases"), _SCS("get_color_phases")); ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "color_phases/count",PROPERTY_HINT_RANGE,"0,4,1", 0), _SCS("set_color_phases"), _SCS("get_color_phases"));
//Backward compatibility. They will be converted to color ramp //Backward compatibility. They will be converted to color ramp
for(int i=0;i<MAX_COLOR_PHASES;i++) { for(int i=0;i<MAX_COLOR_PHASES;i++) {
@ -1104,10 +1104,10 @@ void Particles2D::_bind_methods() {
ADD_PROPERTYI( PropertyInfo( Variant::COLOR, phase+"color", PROPERTY_HINT_NONE, "", 0),_SCS("set_color_phase_color"),_SCS("get_color_phase_color"),i ); ADD_PROPERTYI( PropertyInfo( Variant::COLOR, phase+"color", PROPERTY_HINT_NONE, "", 0),_SCS("set_color_phase_color"),_SCS("get_color_phase_color"),i );
} }
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "color/color"),_SCS("set_color"),_SCS("get_color")); ADD_PROPERTYNO(PropertyInfo(Variant::COLOR, "color/color"),_SCS("set_color"),_SCS("get_color"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"color/color_ramp",PROPERTY_HINT_RESOURCE_TYPE,"ColorRamp"),_SCS("set_color_ramp"),_SCS("get_color_ramp")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"color/color_ramp",PROPERTY_HINT_RESOURCE_TYPE,"ColorRamp"),_SCS("set_color_ramp"),_SCS("get_color_ramp"));
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2_ARRAY,"emission_points",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("set_emission_points"),_SCS("get_emission_points")); ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2_ARRAY,"emission_points",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("set_emission_points"),_SCS("get_emission_points"));
BIND_CONSTANT( PARAM_DIRECTION ); BIND_CONSTANT( PARAM_DIRECTION );
BIND_CONSTANT( PARAM_SPREAD ); BIND_CONSTANT( PARAM_SPREAD );

View file

@ -103,14 +103,18 @@ void Sprite::set_texture(const Ref<Texture>& p_texture) {
if (p_texture==texture) if (p_texture==texture)
return; return;
#ifdef DEBUG_ENABLED
if (texture.is_valid()) { if (texture.is_valid()) {
texture->disconnect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->update); texture->disconnect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->update);
} }
#endif
texture=p_texture; texture=p_texture;
#ifdef DEBUG_ENABLED
if (texture.is_valid()) { if (texture.is_valid()) {
texture->set_flags(texture->get_flags()); //remove repeat from texture, it looks bad in sprites texture->set_flags(texture->get_flags()); //remove repeat from texture, it looks bad in sprites
texture->connect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->update); texture->connect(CoreStringNames::get_singleton()->changed,this,SceneStringNames::get_singleton()->update);
} }
#endif
update(); update();
item_rect_changed(); item_rect_changed();
} }
@ -313,17 +317,17 @@ void Sprite::_bind_methods() {
ADD_SIGNAL(MethodInfo("frame_changed")); ADD_SIGNAL(MethodInfo("frame_changed"));
ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_texture"),_SCS("get_texture")); ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_texture"),_SCS("get_texture"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered")); ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered"));
ADD_PROPERTY( PropertyInfo( Variant::VECTOR2, "offset"), _SCS("set_offset"),_SCS("get_offset")); ADD_PROPERTYNZ( PropertyInfo( Variant::VECTOR2, "offset"), _SCS("set_offset"),_SCS("get_offset"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "flip_h"), _SCS("set_flip_h"),_SCS("is_flipped_h")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "flip_h"), _SCS("set_flip_h"),_SCS("is_flipped_h"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "flip_v"), _SCS("set_flip_v"),_SCS("is_flipped_v")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "flip_v"), _SCS("set_flip_v"),_SCS("is_flipped_v"));
ADD_PROPERTY( PropertyInfo( Variant::INT, "vframes"), _SCS("set_vframes"),_SCS("get_vframes")); ADD_PROPERTYNO( PropertyInfo( Variant::INT, "vframes"), _SCS("set_vframes"),_SCS("get_vframes"));
ADD_PROPERTY( PropertyInfo( Variant::INT, "hframes"), _SCS("set_hframes"),_SCS("get_hframes")); ADD_PROPERTYNO( PropertyInfo( Variant::INT, "hframes"), _SCS("set_hframes"),_SCS("get_hframes"));
ADD_PROPERTY( PropertyInfo( Variant::INT, "frame",PROPERTY_HINT_SPRITE_FRAME), _SCS("set_frame"),_SCS("get_frame")); ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "frame",PROPERTY_HINT_SPRITE_FRAME), _SCS("set_frame"),_SCS("get_frame"));
ADD_PROPERTY( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate")); ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "region"), _SCS("set_region"),_SCS("is_region")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "region"), _SCS("set_region"),_SCS("is_region"));
ADD_PROPERTY( PropertyInfo( Variant::RECT2, "region_rect"), _SCS("set_region_rect"),_SCS("get_region_rect")); ADD_PROPERTYNZ( PropertyInfo( Variant::RECT2, "region_rect"), _SCS("set_region_rect"),_SCS("get_region_rect"));
} }
@ -530,10 +534,10 @@ void ViewportSprite::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_modulate","modulate"),&ViewportSprite::set_modulate); ObjectTypeDB::bind_method(_MD("set_modulate","modulate"),&ViewportSprite::set_modulate);
ObjectTypeDB::bind_method(_MD("get_modulate"),&ViewportSprite::get_modulate); ObjectTypeDB::bind_method(_MD("get_modulate"),&ViewportSprite::get_modulate);
ADD_PROPERTY( PropertyInfo( Variant::NODE_PATH, "viewport"), _SCS("set_viewport_path"),_SCS("get_viewport_path")); ADD_PROPERTYNZ( PropertyInfo( Variant::NODE_PATH, "viewport"), _SCS("set_viewport_path"),_SCS("get_viewport_path"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered")); ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "centered"), _SCS("set_centered"),_SCS("is_centered"));
ADD_PROPERTY( PropertyInfo( Variant::VECTOR2, "offset"), _SCS("set_offset"),_SCS("get_offset")); ADD_PROPERTYNZ( PropertyInfo( Variant::VECTOR2, "offset"), _SCS("set_offset"),_SCS("get_offset"));
ADD_PROPERTY( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate")); ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate"));
} }

View file

@ -299,8 +299,8 @@ void Area::set_enable_monitoring(bool p_enable) {
if (monitoring) { if (monitoring) {
PhysicsServer::get_singleton()->area_set_monitor_callback(get_rid(),this,"_body_inout"); PhysicsServer::get_singleton()->area_set_monitor_callback(get_rid(),this,SceneStringNames::get_singleton()->_body_inout);
PhysicsServer::get_singleton()->area_set_area_monitor_callback(get_rid(),this,"_area_inout"); PhysicsServer::get_singleton()->area_set_area_monitor_callback(get_rid(),this,SceneStringNames::get_singleton()->_area_inout);
} else { } else {
PhysicsServer::get_singleton()->area_set_monitor_callback(get_rid(),NULL,StringName()); PhysicsServer::get_singleton()->area_set_monitor_callback(get_rid(),NULL,StringName());
PhysicsServer::get_singleton()->area_set_area_monitor_callback(get_rid(),NULL,StringName()); PhysicsServer::get_singleton()->area_set_area_monitor_callback(get_rid(),NULL,StringName());

View file

@ -122,8 +122,8 @@ bool CollisionObject::_set(const StringName& p_name, const Variant& p_value) {
} else if (name.begins_with("shapes/")) { } else if (name.begins_with("shapes/")) {
int idx=name.get_slice("/",1).to_int(); int idx=name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
if (what=="shape") if (what=="shape")
set_shape(idx,RefPtr(p_value)); set_shape(idx,RefPtr(p_value));
else if (what=="transform") else if (what=="transform")
@ -148,8 +148,8 @@ bool CollisionObject::_get(const StringName& p_name,Variant &r_ret) const {
r_ret= shapes.size(); r_ret= shapes.size();
} else if (name.begins_with("shapes/")) { } else if (name.begins_with("shapes/")) {
int idx=name.get_slice("/",1).to_int(); int idx=name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
if (what=="shape") if (what=="shape")
r_ret= get_shape(idx); r_ret= get_shape(idx);
else if (what=="transform") else if (what=="transform")

View file

@ -41,8 +41,8 @@ bool Skeleton::_set(const StringName& p_path, const Variant& p_value) {
if (!path.begins_with("bones/")) if (!path.begins_with("bones/"))
return false; return false;
int which=path.get_slice("/",1).to_int(); int which=path.get_slicec('/',1).to_int();
String what=path.get_slice("/",2); String what=path.get_slicec('/',2);
if (which==bones.size() && what=="name") { if (which==bones.size() && what=="name") {
@ -88,8 +88,8 @@ bool Skeleton::_get(const StringName& p_name,Variant &r_ret) const {
if (!path.begins_with("bones/")) if (!path.begins_with("bones/"))
return false; return false;
int which=path.get_slice("/",1).to_int(); int which=path.get_slicec('/',1).to_int();
String what=path.get_slice("/",2); String what=path.get_slicec('/',2);
ERR_FAIL_INDEX_V( which, bones.size(), false ); ERR_FAIL_INDEX_V( which, bones.size(), false );

View file

@ -758,7 +758,7 @@ void Spatial::_bind_methods() {
ADD_PROPERTY( PropertyInfo(Variant::VECTOR3,"transform/rotation",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_EDITOR), _SCS("_set_rotation_deg"), _SCS("_get_rotation_deg") ); ADD_PROPERTY( PropertyInfo(Variant::VECTOR3,"transform/rotation",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_EDITOR), _SCS("_set_rotation_deg"), _SCS("_get_rotation_deg") );
ADD_PROPERTY( PropertyInfo(Variant::VECTOR3,"transform/rotation_rad",PROPERTY_HINT_NONE,"",0), _SCS("set_rotation"), _SCS("get_rotation") ); ADD_PROPERTY( PropertyInfo(Variant::VECTOR3,"transform/rotation_rad",PROPERTY_HINT_NONE,"",0), _SCS("set_rotation"), _SCS("get_rotation") );
ADD_PROPERTY( PropertyInfo(Variant::VECTOR3,"transform/scale",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_EDITOR), _SCS("set_scale"), _SCS("get_scale") ); ADD_PROPERTY( PropertyInfo(Variant::VECTOR3,"transform/scale",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_EDITOR), _SCS("set_scale"), _SCS("get_scale") );
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"visibility/visible"), _SCS("_set_visible_"), _SCS("_is_visible_") ); ADD_PROPERTYNO( PropertyInfo(Variant::BOOL,"visibility/visible"), _SCS("_set_visible_"), _SCS("_is_visible_") );
//ADD_PROPERTY( PropertyInfo(Variant::TRANSFORM,"transform/local"), _SCS("set_transform"), _SCS("get_transform") ); //ADD_PROPERTY( PropertyInfo(Variant::TRANSFORM,"transform/local"), _SCS("set_transform"), _SCS("get_transform") );
ADD_SIGNAL( MethodInfo("visibility_changed" ) ); ADD_SIGNAL( MethodInfo("visibility_changed" ) );

View file

@ -35,10 +35,10 @@ bool AnimationPlayer::_set(const StringName& p_name, const Variant& p_value) {
String name=p_name; String name=p_name;
if (name=="playback/speed" || name=="speed") { //bw compatibility if (p_name==SceneStringNames::get_singleton()->playback_speed || p_name==SceneStringNames::get_singleton()->speed) { //bw compatibility
set_speed(p_value); set_speed(p_value);
} else if (name=="playback/active") { } else if (p_name==SceneStringNames::get_singleton()->playback_active) {
set_active(p_value); set_active(p_value);
} else if (name.begins_with("playback/play")) { } else if (name.begins_with("playback/play")) {
@ -52,16 +52,16 @@ bool AnimationPlayer::_set(const StringName& p_name, const Variant& p_value) {
} else if (name.begins_with("anims/")) { } else if (name.begins_with("anims/")) {
String which=name.get_slice("/",1); String which=name.get_slicec('/',1);
add_animation(which,p_value); add_animation(which,p_value);
} else if (name.begins_with("next/")) { } else if (name.begins_with("next/")) {
String which=name.get_slice("/",1); String which=name.get_slicec('/',1);
animation_set_next(which,p_value); animation_set_next(which,p_value);
} else if (name=="blend_times") { } else if (p_name==SceneStringNames::get_singleton()->blend_times) {
Array array=p_value; Array array=p_value;
int len = array.size(); int len = array.size();
@ -77,7 +77,7 @@ bool AnimationPlayer::_set(const StringName& p_name, const Variant& p_value) {
set_blend_time(from,to,time); set_blend_time(from,to,time);
} }
} else if (name=="autoplay") { } else if (p_name==SceneStringNames::get_singleton()->autoplay) {
autoplay=p_value; autoplay=p_value;
} else } else
@ -106,12 +106,12 @@ bool AnimationPlayer::_get(const StringName& p_name,Variant &r_ret) const {
} else if (name.begins_with("anims/")) { } else if (name.begins_with("anims/")) {
String which=name.get_slice("/",1); String which=name.get_slicec('/',1);
r_ret= get_animation(which).get_ref_ptr(); r_ret= get_animation(which).get_ref_ptr();
} else if (name.begins_with("next/")) { } else if (name.begins_with("next/")) {
String which=name.get_slice("/",1); String which=name.get_slicec('/',1);
r_ret= animation_get_next(which); r_ret= animation_get_next(which);
@ -661,8 +661,11 @@ void AnimationPlayer::_animation_process(float p_delta) {
Error AnimationPlayer::add_animation(const StringName& p_name, const Ref<Animation>& p_animation) { Error AnimationPlayer::add_animation(const StringName& p_name, const Ref<Animation>& p_animation) {
#ifdef DEBUG_ENABLED
ERR_EXPLAIN("Invalid animation name: "+String(p_name)); ERR_EXPLAIN("Invalid animation name: "+String(p_name));
ERR_FAIL_COND_V( String(p_name).find("/")!=-1 || String(p_name).find(":")!=-1 || String(p_name).find(",")!=-1 || String(p_name).find("[")!=-1, ERR_INVALID_PARAMETER ); ERR_FAIL_COND_V( String(p_name).find("/")!=-1 || String(p_name).find(":")!=-1 || String(p_name).find(",")!=-1 || String(p_name).find("[")!=-1, ERR_INVALID_PARAMETER );
#endif
ERR_FAIL_COND_V( p_animation.is_null() , ERR_INVALID_PARAMETER ); ERR_FAIL_COND_V( p_animation.is_null() , ERR_INVALID_PARAMETER );
//print_line("Add anim: "+String(p_name)+" name: "+p_animation->get_name()); //print_line("Add anim: "+String(p_name)+" name: "+p_animation->get_name());
@ -1271,7 +1274,7 @@ AnimationPlayer::AnimationPlayer() {
animation_process_mode=ANIMATION_PROCESS_IDLE; animation_process_mode=ANIMATION_PROCESS_IDLE;
processing=false; processing=false;
default_blend_time=0; default_blend_time=0;
root=NodePath(".."); root=SceneStringNames::get_singleton()->path_pp;
playing = false; playing = false;
active=true; active=true;
} }

View file

@ -102,7 +102,7 @@ bool SamplePlayer::_get(const StringName& p_name,Variant &r_ret) const {
r_ret= get_sample_library(); r_ret= get_sample_library();
} else if (name.begins_with("default/")) { } else if (name.begins_with("default/")) {
String what=name.get_slice("/",1); String what=name.get_slicec('/',1);
if (what=="volume_db") if (what=="volume_db")
r_ret= get_default_volume_db(); r_ret= get_default_volume_db();

View file

@ -390,10 +390,10 @@ void BaseButton::_bind_methods() {
ADD_SIGNAL( MethodInfo("pressed" ) ); ADD_SIGNAL( MethodInfo("pressed" ) );
ADD_SIGNAL( MethodInfo("released" ) ); ADD_SIGNAL( MethodInfo("released" ) );
ADD_SIGNAL( MethodInfo("toggled", PropertyInfo( Variant::BOOL,"pressed") ) ); ADD_SIGNAL( MethodInfo("toggled", PropertyInfo( Variant::BOOL,"pressed") ) );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "disabled"), _SCS("set_disabled"), _SCS("is_disabled")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "disabled"), _SCS("set_disabled"), _SCS("is_disabled"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "toggle_mode"), _SCS("set_toggle_mode"), _SCS("is_toggle_mode")); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "toggle_mode"), _SCS("set_toggle_mode"), _SCS("is_toggle_mode"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "is_pressed"), _SCS("set_pressed"), _SCS("is_pressed")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "is_pressed"), _SCS("set_pressed"), _SCS("is_pressed"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "click_on_press"), _SCS("set_click_on_press"), _SCS("get_click_on_press")); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "click_on_press"), _SCS("set_click_on_press"), _SCS("get_click_on_press"));
BIND_CONSTANT( DRAW_NORMAL ); BIND_CONSTANT( DRAW_NORMAL );

View file

@ -225,11 +225,11 @@ void Button::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_text_align"),&Button::get_text_align); ObjectTypeDB::bind_method(_MD("get_text_align"),&Button::get_text_align);
ObjectTypeDB::bind_method(_MD("is_flat"),&Button::is_flat); ObjectTypeDB::bind_method(_MD("is_flat"),&Button::is_flat);
ADD_PROPERTY( PropertyInfo( Variant::STRING, "text", PROPERTY_HINT_NONE,"",PROPERTY_USAGE_DEFAULT_INTL ), _SCS("set_text"),_SCS("get_text") ); ADD_PROPERTYNZ( PropertyInfo( Variant::STRING, "text", PROPERTY_HINT_NONE,"",PROPERTY_USAGE_DEFAULT_INTL ), _SCS("set_text"),_SCS("get_text") );
ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture" ), _SCS("set_button_icon"),_SCS("get_button_icon") ); ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "icon", PROPERTY_HINT_RESOURCE_TYPE, "Texture" ), _SCS("set_button_icon"),_SCS("get_button_icon") );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "flat" ), _SCS("set_flat"),_SCS("is_flat") ); ADD_PROPERTY( PropertyInfo( Variant::BOOL, "flat" ), _SCS("set_flat"),_SCS("is_flat") );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "clip_text" ), _SCS("set_clip_text"),_SCS("get_clip_text") ); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "clip_text" ), _SCS("set_clip_text"),_SCS("get_clip_text") );
ADD_PROPERTY( PropertyInfo( Variant::INT, "align",PROPERTY_HINT_ENUM,"Left,Center,Right" ), _SCS("set_text_align"),_SCS("get_text_align") ); ADD_PROPERTYNO( PropertyInfo( Variant::INT, "align",PROPERTY_HINT_ENUM,"Left,Center,Right" ), _SCS("set_text_align"),_SCS("get_text_align") );
} }

View file

@ -34,7 +34,7 @@ bool ButtonArray::_set(const StringName& p_name, const Variant& p_value) {
String n=String(p_name); String n=String(p_name);
if (n.begins_with("button/")) { if (n.begins_with("button/")) {
String what = n.get_slice("/",1); String what = n.get_slicec('/',1);
if (what=="count") { if (what=="count") {
int new_size=p_value; int new_size=p_value;
if (new_size>0 && buttons.size()==0) { if (new_size>0 && buttons.size()==0) {
@ -57,7 +57,7 @@ bool ButtonArray::_set(const StringName& p_name, const Variant& p_value) {
} else { } else {
int idx=what.to_int(); int idx=what.to_int();
ERR_FAIL_INDEX_V(idx,buttons.size(),false); ERR_FAIL_INDEX_V(idx,buttons.size(),false);
String f = n.get_slice("/",2); String f = n.get_slicec('/',2);
if (f=="text") if (f=="text")
buttons[idx].text=p_value; buttons[idx].text=p_value;
else if (f=="icon") else if (f=="icon")
@ -80,7 +80,7 @@ bool ButtonArray::_get(const StringName& p_name,Variant &r_ret) const {
String n=String(p_name); String n=String(p_name);
if (n.begins_with("button/")) { if (n.begins_with("button/")) {
String what = n.get_slice("/",1); String what = n.get_slicec('/',1);
if (what=="count") { if (what=="count") {
r_ret=buttons.size(); r_ret=buttons.size();
} else if (what=="align") { } else if (what=="align") {
@ -92,7 +92,7 @@ bool ButtonArray::_get(const StringName& p_name,Variant &r_ret) const {
} else { } else {
int idx=what.to_int(); int idx=what.to_int();
ERR_FAIL_INDEX_V(idx,buttons.size(),false); ERR_FAIL_INDEX_V(idx,buttons.size(),false);
String f = n.get_slice("/",2); String f = n.get_slicec('/',2);
if (f=="text") if (f=="text")
r_ret=buttons[idx].text; r_ret=buttons[idx].text;
else if (f=="icon") else if (f=="icon")

View file

@ -136,27 +136,27 @@ bool Control::_set(const StringName& p_name, const Variant& p_value) {
if (p_value.get_type()==Variant::NIL) { if (p_value.get_type()==Variant::NIL) {
if (name.begins_with("custom_icons/")) { if (name.begins_with("custom_icons/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
data.icon_override.erase(dname); data.icon_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
update(); update();
} else if (name.begins_with("custom_styles/")) { } else if (name.begins_with("custom_styles/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
data.style_override.erase(dname); data.style_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
update(); update();
} else if (name.begins_with("custom_fonts/")) { } else if (name.begins_with("custom_fonts/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
data.font_override.erase(dname); data.font_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
update(); update();
} else if (name.begins_with("custom_colors/")) { } else if (name.begins_with("custom_colors/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
data.color_override.erase(dname); data.color_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
update(); update();
} else if (name.begins_with("custom_constants/")) { } else if (name.begins_with("custom_constants/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
data.constant_override.erase(dname); data.constant_override.erase(dname);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
update(); update();
@ -165,23 +165,23 @@ bool Control::_set(const StringName& p_name, const Variant& p_value) {
} else { } else {
if (name.begins_with("custom_icons/")) { if (name.begins_with("custom_icons/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
add_icon_override(dname,p_value); add_icon_override(dname,p_value);
} else if (name.begins_with("custom_styles/")) { } else if (name.begins_with("custom_styles/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
add_style_override(dname,p_value); add_style_override(dname,p_value);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
} else if (name.begins_with("custom_fonts/")) { } else if (name.begins_with("custom_fonts/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
add_font_override(dname,p_value); add_font_override(dname,p_value);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
} else if (name.begins_with("custom_colors/")) { } else if (name.begins_with("custom_colors/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
add_color_override(dname,p_value); add_color_override(dname,p_value);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
} else if (name.begins_with("custom_constants/")) { } else if (name.begins_with("custom_constants/")) {
String dname = name.get_slice("/",1); String dname = name.get_slicec('/',1);
add_constant_override(dname,p_value); add_constant_override(dname,p_value);
notification(NOTIFICATION_THEME_CHANGED); notification(NOTIFICATION_THEME_CHANGED);
} else } else
@ -217,22 +217,22 @@ bool Control::_get(const StringName& p_name,Variant &r_ret) const {
return false; return false;
if (sname.begins_with("custom_icons/")) { if (sname.begins_with("custom_icons/")) {
String name = sname.get_slice("/",1); String name = sname.get_slicec('/',1);
r_ret= data.icon_override.has(name)?Variant(data.icon_override[name]):Variant(); r_ret= data.icon_override.has(name)?Variant(data.icon_override[name]):Variant();
} else if (sname.begins_with("custom_styles/")) { } else if (sname.begins_with("custom_styles/")) {
String name = sname.get_slice("/",1); String name = sname.get_slicec('/',1);
r_ret= data.style_override.has(name)?Variant(data.style_override[name]):Variant(); r_ret= data.style_override.has(name)?Variant(data.style_override[name]):Variant();
} else if (sname.begins_with("custom_fonts/")) { } else if (sname.begins_with("custom_fonts/")) {
String name = sname.get_slice("/",1); String name = sname.get_slicec('/',1);
r_ret= data.font_override.has(name)?Variant(data.font_override[name]):Variant(); r_ret= data.font_override.has(name)?Variant(data.font_override[name]):Variant();
} else if (sname.begins_with("custom_colors/")) { } else if (sname.begins_with("custom_colors/")) {
String name = sname.get_slice("/",1); String name = sname.get_slicec('/',1);
r_ret= data.color_override.has(name)?Variant(data.color_override[name]):Variant(); r_ret= data.color_override.has(name)?Variant(data.color_override[name]):Variant();
} else if (sname.begins_with("custom_constants/")) { } else if (sname.begins_with("custom_constants/")) {
String name = sname.get_slice("/",1); String name = sname.get_slicec('/',1);
r_ret= data.constant_override.has(name)?Variant(data.constant_override[name]):Variant(); r_ret= data.constant_override.has(name)?Variant(data.constant_override[name]):Variant();
} else } else
@ -2832,16 +2832,16 @@ void Control::_bind_methods() {
ADD_PROPERTYNZ( PropertyInfo(Variant::VECTOR2,"rect/size", PROPERTY_HINT_NONE, "",PROPERTY_USAGE_EDITOR), _SCS("set_size"),_SCS("get_size") ); ADD_PROPERTYNZ( PropertyInfo(Variant::VECTOR2,"rect/size", PROPERTY_HINT_NONE, "",PROPERTY_USAGE_EDITOR), _SCS("set_size"),_SCS("get_size") );
ADD_PROPERTYNZ( PropertyInfo(Variant::VECTOR2,"rect/min_size"), _SCS("set_custom_minimum_size"),_SCS("get_custom_minimum_size") ); ADD_PROPERTYNZ( PropertyInfo(Variant::VECTOR2,"rect/min_size"), _SCS("set_custom_minimum_size"),_SCS("get_custom_minimum_size") );
ADD_PROPERTYNZ( PropertyInfo(Variant::STRING,"hint/tooltip", PROPERTY_HINT_MULTILINE_TEXT), _SCS("set_tooltip"),_SCS("_get_tooltip") ); ADD_PROPERTYNZ( PropertyInfo(Variant::STRING,"hint/tooltip", PROPERTY_HINT_MULTILINE_TEXT), _SCS("set_tooltip"),_SCS("_get_tooltip") );
ADD_PROPERTYI( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/left" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_LEFT ); ADD_PROPERTYINZ( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/left" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_LEFT );
ADD_PROPERTYI( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/top" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_TOP ); ADD_PROPERTYINZ( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/top" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_TOP );
ADD_PROPERTYI( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/right" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_RIGHT ); ADD_PROPERTYINZ( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/right" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_RIGHT );
ADD_PROPERTYI( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/bottom" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_BOTTOM ); ADD_PROPERTYINZ( PropertyInfo(Variant::NODE_PATH,"focus_neighbour/bottom" ), _SCS("set_focus_neighbour"),_SCS("get_focus_neighbour"),MARGIN_BOTTOM );
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"focus/ignore_mouse"), _SCS("set_ignore_mouse"),_SCS("is_ignoring_mouse") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"focus/ignore_mouse"), _SCS("set_ignore_mouse"),_SCS("is_ignoring_mouse") );
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"focus/stop_mouse"), _SCS("set_stop_mouse"),_SCS("is_stopping_mouse") ); ADD_PROPERTY( PropertyInfo(Variant::BOOL,"focus/stop_mouse"), _SCS("set_stop_mouse"),_SCS("is_stopping_mouse") );
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"size_flags/horizontal", PROPERTY_HINT_FLAGS, "Expand,Fill"), _SCS("set_h_size_flags"),_SCS("get_h_size_flags") ); ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"size_flags/horizontal", PROPERTY_HINT_FLAGS, "Expand,Fill"), _SCS("set_h_size_flags"),_SCS("get_h_size_flags") );
ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"size_flags/vertical", PROPERTY_HINT_FLAGS, "Expand,Fill"), _SCS("set_v_size_flags"),_SCS("get_v_size_flags") ); ADD_PROPERTYNZ( PropertyInfo(Variant::INT,"size_flags/vertical", PROPERTY_HINT_FLAGS, "Expand,Fill"), _SCS("set_v_size_flags"),_SCS("get_v_size_flags") );
ADD_PROPERTY( PropertyInfo(Variant::INT,"size_flags/stretch_ratio", PROPERTY_HINT_RANGE, "1,128,0.01"), _SCS("set_stretch_ratio"),_SCS("get_stretch_ratio") ); ADD_PROPERTYNO( PropertyInfo(Variant::INT,"size_flags/stretch_ratio", PROPERTY_HINT_RANGE, "1,128,0.01"), _SCS("set_stretch_ratio"),_SCS("get_stretch_ratio") );
ADD_PROPERTYNZ( PropertyInfo(Variant::OBJECT,"theme/theme", PROPERTY_HINT_RESOURCE_TYPE, "Theme"), _SCS("set_theme"),_SCS("get_theme") ); ADD_PROPERTYNZ( PropertyInfo(Variant::OBJECT,"theme/theme", PROPERTY_HINT_RESOURCE_TYPE, "Theme"), _SCS("set_theme"),_SCS("get_theme") );
BIND_CONSTANT( ANCHOR_BEGIN ); BIND_CONSTANT( ANCHOR_BEGIN );

View file

@ -613,11 +613,11 @@ void Label::_bind_methods() {
BIND_CONSTANT( VALIGN_BOTTOM ); BIND_CONSTANT( VALIGN_BOTTOM );
BIND_CONSTANT( VALIGN_FILL ); BIND_CONSTANT( VALIGN_FILL );
ADD_PROPERTY( PropertyInfo( Variant::STRING, "text",PROPERTY_HINT_MULTILINE_TEXT,"",PROPERTY_USAGE_DEFAULT_INTL), _SCS("set_text"),_SCS("get_text") ); ADD_PROPERTYNZ( PropertyInfo( Variant::STRING, "text",PROPERTY_HINT_MULTILINE_TEXT,"",PROPERTY_USAGE_DEFAULT_INTL), _SCS("set_text"),_SCS("get_text") );
ADD_PROPERTY( PropertyInfo( Variant::INT, "align", PROPERTY_HINT_ENUM,"Left,Center,Right,Fill" ),_SCS("set_align"),_SCS("get_align") ); ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "align", PROPERTY_HINT_ENUM,"Left,Center,Right,Fill" ),_SCS("set_align"),_SCS("get_align") );
ADD_PROPERTY( PropertyInfo( Variant::INT, "valign", PROPERTY_HINT_ENUM,"Top,Center,Bottom,Fill" ),_SCS("set_valign"),_SCS("get_valign") ); ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "valign", PROPERTY_HINT_ENUM,"Top,Center,Bottom,Fill" ),_SCS("set_valign"),_SCS("get_valign") );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "autowrap"),_SCS("set_autowrap"),_SCS("has_autowrap") ); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "autowrap"),_SCS("set_autowrap"),_SCS("has_autowrap") );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "uppercase"),_SCS("set_uppercase"),_SCS("is_uppercase") ); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "uppercase"),_SCS("set_uppercase"),_SCS("is_uppercase") );
ADD_PROPERTY( PropertyInfo( Variant::REAL, "percent_visible", PROPERTY_HINT_RANGE,"0,1,0.001"),_SCS("set_percent_visible"),_SCS("get_percent_visible") ); ADD_PROPERTY( PropertyInfo( Variant::REAL, "percent_visible", PROPERTY_HINT_RANGE,"0,1,0.001"),_SCS("set_percent_visible"),_SCS("get_percent_visible") );
} }

View file

@ -157,14 +157,14 @@ void TextureButton::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_scale"),&TextureButton::get_scale); ObjectTypeDB::bind_method(_MD("get_scale"),&TextureButton::get_scale);
ObjectTypeDB::bind_method(_MD("get_modulate"),&TextureButton::get_modulate); ObjectTypeDB::bind_method(_MD("get_modulate"),&TextureButton::get_modulate);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"textures/normal",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_normal_texture"), _SCS("get_normal_texture")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"textures/normal",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_normal_texture"), _SCS("get_normal_texture"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"textures/pressed",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_pressed_texture"), _SCS("get_pressed_texture")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"textures/pressed",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_pressed_texture"), _SCS("get_pressed_texture"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"textures/hover",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_hover_texture"), _SCS("get_hover_texture")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"textures/hover",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_hover_texture"), _SCS("get_hover_texture"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"textures/disabled",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_disabled_texture"), _SCS("get_disabled_texture")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"textures/disabled",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_disabled_texture"), _SCS("get_disabled_texture"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"textures/focused",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_focused_texture"), _SCS("get_focused_texture")); ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"textures/focused",PROPERTY_HINT_RESOURCE_TYPE,"Texture"), _SCS("set_focused_texture"), _SCS("get_focused_texture"));
ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"textures/click_mask",PROPERTY_HINT_RESOURCE_TYPE,"BitMap"), _SCS("set_click_mask"), _SCS("get_click_mask")) ; ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"textures/click_mask",PROPERTY_HINT_RESOURCE_TYPE,"BitMap"), _SCS("set_click_mask"), _SCS("get_click_mask")) ;
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"params/scale",PROPERTY_HINT_RANGE,"0.01,1024,0.01"), _SCS("set_scale"), _SCS("get_scale")); ADD_PROPERTYNO(PropertyInfo(Variant::VECTOR2,"params/scale",PROPERTY_HINT_RANGE,"0.01,1024,0.01"), _SCS("set_scale"), _SCS("get_scale"));
ADD_PROPERTY(PropertyInfo(Variant::COLOR,"params/modulate"), _SCS("set_modulate"), _SCS("get_modulate")); ADD_PROPERTYNO(PropertyInfo(Variant::COLOR,"params/modulate"), _SCS("set_modulate"), _SCS("get_modulate"));
} }

View file

@ -77,9 +77,9 @@ void TextureFrame::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_expand","enable"), & TextureFrame::set_expand ); ObjectTypeDB::bind_method(_MD("set_expand","enable"), & TextureFrame::set_expand );
ObjectTypeDB::bind_method(_MD("has_expand"), & TextureFrame::has_expand ); ObjectTypeDB::bind_method(_MD("has_expand"), & TextureFrame::has_expand );
ADD_PROPERTY( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), _SCS("set_texture"),_SCS("get_texture") ); ADD_PROPERTYNZ( PropertyInfo( Variant::OBJECT, "texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), _SCS("set_texture"),_SCS("get_texture") );
ADD_PROPERTY( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate") ); ADD_PROPERTYNO( PropertyInfo( Variant::COLOR, "modulate"), _SCS("set_modulate"),_SCS("get_modulate") );
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") ); ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") );
} }

View file

@ -1106,7 +1106,7 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2&
int option = (int)p_item->cells[i].val; int option = (int)p_item->cells[i].val;
String s = p_item->cells[i].text; String s = p_item->cells[i].text;
s=s.get_slice(",",option); s=s.get_slicec(',',option);
Ref<Texture> downarrow = cache.select_arrow; Ref<Texture> downarrow = cache.select_arrow;
@ -1527,7 +1527,7 @@ int Tree::propagate_mouse_event(const Point2i &p_pos,int x_ofs,int y_ofs,bool p_
popup_menu->clear(); popup_menu->clear();
for (int i=0;i<c.text.get_slice_count(",");i++) { for (int i=0;i<c.text.get_slice_count(",");i++) {
String s = c.text.get_slice(",",i); String s = c.text.get_slicec(',',i);
popup_menu->add_item(s,i); popup_menu->add_item(s,i);
} }
@ -2234,7 +2234,7 @@ bool Tree::edit_selected() {
popup_menu->clear(); popup_menu->clear();
for (int i=0;i<c.text.get_slice_count(",");i++) { for (int i=0;i<c.text.get_slice_count(",");i++) {
String s = c.text.get_slice(",",i); String s = c.text.get_slicec(',',i);
popup_menu->add_item(s,i); popup_menu->add_item(s,i);
} }

View file

@ -1891,7 +1891,7 @@ void Node::_bind_methods() {
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
ObjectTypeDB::bind_method(_MD("_set_import_path","import_path"),&Node::set_import_path); ObjectTypeDB::bind_method(_MD("_set_import_path","import_path"),&Node::set_import_path);
ObjectTypeDB::bind_method(_MD("_get_import_path"),&Node::get_import_path); ObjectTypeDB::bind_method(_MD("_get_import_path"),&Node::get_import_path);
ADD_PROPERTY( PropertyInfo(Variant::NODE_PATH,"_import_path",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_import_path"),_SCS("_get_import_path")); ADD_PROPERTYNZ( PropertyInfo(Variant::NODE_PATH,"_import_path",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_import_path"),_SCS("_get_import_path"));
#endif #endif

View file

@ -42,8 +42,8 @@ bool Animation::_set(const StringName& p_name, const Variant& p_value) {
set_step(p_value); set_step(p_value);
else if (name.begins_with("tracks/")) { else if (name.begins_with("tracks/")) {
int track=name.get_slice("/",1).to_int(); int track=name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
if (tracks.size()==track && what=="type") { if (tracks.size()==track && what=="type") {
@ -257,8 +257,8 @@ bool Animation::_get(const StringName& p_name,Variant &r_ret) const {
r_ret= step; r_ret= step;
else if (name.begins_with("tracks/")) { else if (name.begins_with("tracks/")) {
int track=name.get_slice("/",1).to_int(); int track=name.get_slicec('/',1).to_int();
String what=name.get_slice("/",2); String what=name.get_slicec('/',2);
ERR_FAIL_INDEX_V( track, tracks.size(), false ); ERR_FAIL_INDEX_V( track, tracks.size(), false );
if (what=="type") { if (what=="type") {

View file

@ -311,11 +311,11 @@ bool BakedLight::_set(const StringName& p_name, const Variant& p_value) {
String n = p_name; String n = p_name;
if (!n.begins_with("lightmap")) if (!n.begins_with("lightmap"))
return false; return false;
int idx = n.get_slice("/",1).to_int(); int idx = n.get_slicec('/',1).to_int();
ERR_FAIL_COND_V(idx<0,false); ERR_FAIL_COND_V(idx<0,false);
ERR_FAIL_COND_V(idx>lightmaps.size(),false); ERR_FAIL_COND_V(idx>lightmaps.size(),false);
String what = n.get_slice("/",2); String what = n.get_slicec('/',2);
Ref<Texture> tex; Ref<Texture> tex;
Size2 gens; Size2 gens;
@ -343,11 +343,11 @@ bool BakedLight::_get(const StringName& p_name,Variant &r_ret) const{
String n = p_name; String n = p_name;
if (!n.begins_with("lightmap")) if (!n.begins_with("lightmap"))
return false; return false;
int idx = n.get_slice("/",1).to_int(); int idx = n.get_slicec('/',1).to_int();
ERR_FAIL_COND_V(idx<0,false); ERR_FAIL_COND_V(idx<0,false);
ERR_FAIL_COND_V(idx>lightmaps.size(),false); ERR_FAIL_COND_V(idx>lightmaps.size(),false);
String what = n.get_slice("/",2); String what = n.get_slicec('/',2);
if (what=="texture") { if (what=="texture") {
if (idx==lightmaps.size()) if (idx==lightmaps.size())

View file

@ -99,7 +99,7 @@ bool Mesh::_set(const StringName& p_name, const Variant& p_value) {
if (sl==-1) if (sl==-1)
return false; return false;
int idx=sname.substr(8,sl-8).to_int()-1; int idx=sname.substr(8,sl-8).to_int()-1;
String what = sname.get_slice("/",1); String what = sname.get_slicec('/',1);
if (what=="material") if (what=="material")
surface_set_material(idx,p_value); surface_set_material(idx,p_value);
else if (what=="name") else if (what=="name")
@ -117,8 +117,8 @@ bool Mesh::_set(const StringName& p_name, const Variant& p_value) {
return false; return false;
int idx=sname.get_slice("/",1).to_int(); int idx=sname.get_slicec('/',1).to_int();
String what=sname.get_slice("/",2); String what=sname.get_slicec('/',2);
if (idx==surfaces.size()) { if (idx==surfaces.size()) {
@ -180,7 +180,7 @@ bool Mesh::_get(const StringName& p_name,Variant &r_ret) const {
if (sl==-1) if (sl==-1)
return false; return false;
int idx=sname.substr(8,sl-8).to_int()-1; int idx=sname.substr(8,sl-8).to_int()-1;
String what = sname.get_slice("/",1); String what = sname.get_slicec('/',1);
if (what=="material") if (what=="material")
r_ret=surface_get_material(idx); r_ret=surface_get_material(idx);
else if (what=="name") else if (what=="name")
@ -195,7 +195,7 @@ bool Mesh::_get(const StringName& p_name,Variant &r_ret) const {
return false; return false;
int idx=sname.get_slice("/",1).to_int(); int idx=sname.get_slicec('/',1).to_int();
ERR_FAIL_INDEX_V(idx,surfaces.size(),false); ERR_FAIL_INDEX_V(idx,surfaces.size(),false);
Dictionary d; Dictionary d;

View file

@ -35,8 +35,8 @@ bool MeshLibrary::_set(const StringName& p_name, const Variant& p_value) {
String name=p_name; String name=p_name;
if (name.begins_with("item/")) { if (name.begins_with("item/")) {
int idx = name.get_slice("/",1).to_int(); int idx = name.get_slicec('/',1).to_int();
String what = name.get_slice("/",2); String what = name.get_slicec('/',2);
if (!item_map.has(idx)) if (!item_map.has(idx))
create_item(idx); create_item(idx);
@ -60,9 +60,9 @@ bool MeshLibrary::_set(const StringName& p_name, const Variant& p_value) {
bool MeshLibrary::_get(const StringName& p_name,Variant &r_ret) const { bool MeshLibrary::_get(const StringName& p_name,Variant &r_ret) const {
String name=p_name; String name=p_name;
int idx = name.get_slice("/",1).to_int(); int idx = name.get_slicec('/',1).to_int();
ERR_FAIL_COND_V(!item_map.has(idx),false); ERR_FAIL_COND_V(!item_map.has(idx),false);
String what = name.get_slice("/",2); String what = name.get_slicec('/',2);
if(what=="name") if(what=="name")
r_ret= get_item_name(idx); r_ret= get_item_name(idx);

View file

@ -53,7 +53,7 @@ Node *PackedScene::instance(bool p_gen_edit_state) const {
if (prop_count) if (prop_count)
props=&variants[0]; props=&variants[0];
Vector<Variant> properties; //Vector<Variant> properties;
const NodeData *nd = &nodes[0]; const NodeData *nd = &nodes[0];
@ -257,10 +257,13 @@ Error PackedScene::_parse_node(Node *p_owner,Node *p_node,int p_parent_idx, Map<
String name = E->get().name; String name = E->get().name;
Variant value = p_node->get( E->get().name ); Variant value = p_node->get( E->get().name );
if (E->get().usage & PROPERTY_USAGE_STORE_IF_NONZERO && value.is_zero()) { if (nd.instance<0 && ((E->get().usage & PROPERTY_USAGE_STORE_IF_NONZERO) && value.is_zero()) || ((E->get().usage & PROPERTY_USAGE_STORE_IF_NONONE) && value.is_one())) {
continue; continue;
} }
print_line("PASSED!");
print_line("at: "+String(p_node->get_name())+"::"+name+": - nz: "+itos(E->get().usage&PROPERTY_USAGE_STORE_IF_NONZERO)+" no: "+itos(E->get().usage&PROPERTY_USAGE_STORE_IF_NONONE));
print_line("value: "+String(value)+" is zero: "+itos(value.is_zero())+" is one" +itos(value.is_one()));
if (nd.instance>=0) { if (nd.instance>=0) {
//only save changed properties in instance //only save changed properties in instance
@ -278,7 +281,7 @@ Error PackedScene::_parse_node(Node *p_owner,Node *p_node,int p_parent_idx, Map<
continue; continue;
} }
if (instance_state[name]==value) { if (instance_state.has(name) && instance_state[name]==value) {
continue; continue;
} }

View file

@ -34,7 +34,7 @@ bool SampleLibrary::_set(const StringName& p_name, const Variant& p_value) {
if (String(p_name).begins_with("samples/")) { if (String(p_name).begins_with("samples/")) {
String name=String(p_name).get_slice("/",1); String name=String(p_name).get_slicec('/',1);
if (p_value.get_type()==Variant::NIL) if (p_value.get_type()==Variant::NIL)
sample_map.erase(name); sample_map.erase(name);
else { else {
@ -66,7 +66,7 @@ bool SampleLibrary::_get(const StringName& p_name,Variant &r_ret) const {
if (String(p_name).begins_with("samples/")) { if (String(p_name).begins_with("samples/")) {
String name=String(p_name).get_slice("/",1); String name=String(p_name).get_slicec('/',1);
if(sample_map.has(name)) { if(sample_map.has(name)) {
Dictionary d; Dictionary d;
d["sample"]=sample_map[name].sample; d["sample"]=sample_map[name].sample;

View file

@ -40,9 +40,9 @@ bool Theme::_set(const StringName& p_name, const Variant& p_value) {
if (sname.find("/")!=-1) { if (sname.find("/")!=-1) {
String type=sname.get_slice("/",1); String type=sname.get_slicec('/',1);
String node_type=sname.get_slice("/",0); String node_type=sname.get_slicec('/',0);
String name=sname.get_slice("/",2); String name=sname.get_slicec('/',2);
if (type=="icons") { if (type=="icons") {
@ -75,9 +75,9 @@ bool Theme::_get(const StringName& p_name,Variant &r_ret) const {
if (sname.find("/")!=-1) { if (sname.find("/")!=-1) {
String type=sname.get_slice("/",1); String type=sname.get_slicec('/',1);
String node_type=sname.get_slice("/",0); String node_type=sname.get_slicec('/',0);
String name=sname.get_slice("/",2); String name=sname.get_slicec('/',2);
if (type=="icons") { if (type=="icons") {

View file

@ -68,6 +68,8 @@ SceneStringNames::SceneStringNames() {
area_enter_shape = StaticCString::create("area_enter_shape"); area_enter_shape = StaticCString::create("area_enter_shape");
area_exit_shape = StaticCString::create("area_exit_shape"); area_exit_shape = StaticCString::create("area_exit_shape");
_body_inout = StaticCString::create("_body_inout");
_area_inout = StaticCString::create("_area_inout");
idle=StaticCString::create("idle"); idle=StaticCString::create("idle");
iteration=StaticCString::create("iteration"); iteration=StaticCString::create("iteration");
@ -161,4 +163,11 @@ SceneStringNames::SceneStringNames() {
frame_changed=StaticCString::create("frame_changed"); frame_changed=StaticCString::create("frame_changed");
playback_speed=StaticCString::create("playback/speed");
playback_active=StaticCString::create("playback/active");
autoplay=StaticCString::create("autoplay");
blend_times=StaticCString::create("blend_times");
speed=StaticCString::create("speed");
path_pp=NodePath("..");
} }

View file

@ -30,7 +30,7 @@
#define SCENE_STRING_NAMES_H #define SCENE_STRING_NAMES_H
#include "string_db.h" #include "string_db.h"
#include "path_db.h"
class SceneStringNames { class SceneStringNames {
friend void register_scene_types(); friend void register_scene_types();
@ -87,6 +87,8 @@ public:
StringName area_enter_shape; StringName area_enter_shape;
StringName area_exit_shape; StringName area_exit_shape;
StringName _body_inout;
StringName _area_inout;
StringName _get_gizmo_geometry; StringName _get_gizmo_geometry;
@ -170,6 +172,14 @@ public:
StringName frame_changed; StringName frame_changed;
StringName playback_speed;
StringName playback_active;
StringName autoplay;
StringName blend_times;
StringName speed;
NodePath path_pp;
}; };

View file

@ -2054,8 +2054,8 @@ void Collada::_parse_animation(XMLParser& parser) {
} }
if (target.find("/")!=-1) { //transform component if (target.find("/")!=-1) { //transform component
track.target=target.get_slice("/",0); track.target=target.get_slicec('/',0);
track.param=target.get_slice("/",1); track.param=target.get_slicec('/',1);
if (track.param.find(".")!=-1) if (track.param.find(".")!=-1)
track.component=track.param.get_slice(".",1).to_upper(); track.component=track.param.get_slice(".",1).to_upper();
track.param=track.param.get_slice(".",0); track.param=track.param.get_slice(".",0);

View file

@ -137,9 +137,9 @@ void DocData::merge_from(const DocData& p_data) {
void DocData::generate(bool p_basic_types) { void DocData::generate(bool p_basic_types) {
List<String> classes; List<StringName> classes;
ObjectTypeDB::get_type_list(&classes); ObjectTypeDB::get_type_list(&classes);
classes.sort(); classes.sort_custom<StringName::AlphCompare>();
while(classes.size()) { while(classes.size()) {
@ -547,7 +547,7 @@ void DocData::generate(bool p_basic_types) {
Globals::Singleton &s=E->get(); Globals::Singleton &s=E->get();
pd.name=s.name; pd.name=s.name;
pd.type=s.ptr->get_type(); pd.type=s.ptr->get_type();
while (ObjectTypeDB::type_inherits_from(pd.type)!="Object") while (String(ObjectTypeDB::type_inherits_from(pd.type))!="Object")
pd.type=ObjectTypeDB::type_inherits_from(pd.type); pd.type=ObjectTypeDB::type_inherits_from(pd.type);
if (pd.type.begins_with("_")) if (pd.type.begins_with("_"))
pd.type=pd.type.substr(1,pd.type.length()); pd.type=pd.type.substr(1,pd.type.length());

View file

@ -76,10 +76,10 @@ static String _escape_string(const String& p_str) {
void DocDump::dump(const String& p_file) { void DocDump::dump(const String& p_file) {
List<String> class_list; List<StringName> class_list;
ObjectTypeDB::get_type_list(&class_list); ObjectTypeDB::get_type_list(&class_list);
class_list.sort(); class_list.sort_custom<StringName::AlphCompare>();
FileAccess *f = FileAccess::open(p_file,FileAccess::WRITE); FileAccess *f = FileAccess::open(p_file,FileAccess::WRITE);

View file

@ -128,7 +128,7 @@ void CreateDialog::_update_search() {
_parse_fs(EditorFileSystem::get_singleton()->get_filesystem()); _parse_fs(EditorFileSystem::get_singleton()->get_filesystem());
*/ */
List<String> type_list; List<StringName> type_list;
ObjectTypeDB::get_type_list(&type_list); ObjectTypeDB::get_type_list(&type_list);
HashMap<String,TreeItem*> types; HashMap<String,TreeItem*> types;
@ -137,7 +137,7 @@ void CreateDialog::_update_search() {
root->set_text(0,base_type); root->set_text(0,base_type);
List<String>::Element *I=type_list.front(); List<StringName>::Element *I=type_list.front();
TreeItem *to_select=NULL; TreeItem *to_select=NULL;
for(;I;I=I->next()) { for(;I;I=I->next()) {

View file

@ -79,7 +79,7 @@ void EditorHelpSearch::_update_search() {
_parse_fs(EditorFileSystem::get_singleton()->get_filesystem()); _parse_fs(EditorFileSystem::get_singleton()->get_filesystem());
*/ */
List<String> type_list; List<StringName> type_list;
ObjectTypeDB::get_type_list(&type_list); ObjectTypeDB::get_type_list(&type_list);
DocData *doc=EditorHelp::get_doc_data(); DocData *doc=EditorHelp::get_doc_data();
@ -1241,13 +1241,13 @@ void EditorHelp::_update_doc() {
class_list->clear(); class_list->clear();
List<String> type_list; List<StringName> type_list;
tree_item_map.clear(); tree_item_map.clear();
TreeItem *root = class_list->create_item(); TreeItem *root = class_list->create_item();
class_list->set_hide_root(true); class_list->set_hide_root(true);
List<String>::Element *I=type_list.front(); List<StringName>::Element *I=type_list.front();
for(Map<String,DocData::ClassDoc>::Element *E=doc->class_list.front();E;E=E->next()) { for(Map<String,DocData::ClassDoc>::Element *E=doc->class_list.front();E;E=E->next()) {

View file

@ -321,10 +321,10 @@ void ScriptTextEditor::_load_theme_settings() {
//colorize engine types //colorize engine types
Color type_color= EDITOR_DEF("text_editor/engine_type_color",Color(0.0,0.2,0.4)); Color type_color= EDITOR_DEF("text_editor/engine_type_color",Color(0.0,0.2,0.4));
List<String> types; List<StringName> types;
ObjectTypeDB::get_type_list(&types); ObjectTypeDB::get_type_list(&types);
for(List<String>::Element *E=types.front();E;E=E->next()) { for(List<StringName>::Element *E=types.front();E;E=E->next()) {
get_text_edit()->add_keyword_color(E->get(),type_color); get_text_edit()->add_keyword_color(E->get(),type_color);
} }

View file

@ -614,9 +614,9 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
Set<String> valid_inheritors; Set<String> valid_inheritors;
valid_inheritors.insert(base); valid_inheritors.insert(base);
List<String> inheritors; List<StringName> inheritors;
ObjectTypeDB::get_inheriters_from(base.strip_edges(),&inheritors); ObjectTypeDB::get_inheriters_from(base.strip_edges(),&inheritors);
List<String>::Element *E=inheritors.front(); List<StringName>::Element *E=inheritors.front();
while(E) { while(E) {
valid_inheritors.insert(E->get()); valid_inheritors.insert(E->get());
E=E->next(); E=E->next();