|
|
@@ -22,65 +22,80 @@ namespace BansheeEngine
|
|
|
* @{
|
|
|
*/
|
|
|
|
|
|
+ /** Similar to BS_PLAIN_MEMBER but allows you to specify name of the field and the variable it's referencing separately. */
|
|
|
#define BS_PLAIN_MEMBER_NAMED(name, field) \
|
|
|
decltype(OwnerType::##field)& get##name(OwnerType* obj) { return obj->##field; } \
|
|
|
void set##name(OwnerType* obj, decltype(OwnerType::##field)& val) { obj->##field = val; }
|
|
|
|
|
|
+ /** Similar to BS_REFL_MEMBER but allows you to specify name of the field and the variable it's referencing separately. */
|
|
|
#define BS_REFL_MEMBER_NAMED(name, field) \
|
|
|
decltype(OwnerType::##field)& get##name(OwnerType* obj) { return obj->##field; } \
|
|
|
void set##name(OwnerType* obj, decltype(OwnerType::##field)& val) { obj->##field = val; }
|
|
|
|
|
|
+ /** Similar to BS_REFLPTR_MEMBER but allows you to specify name of the field and the variable it's referencing separately. */
|
|
|
#define BS_REFLPTR_MEMBER_NAMED(name, field) \
|
|
|
decltype(OwnerType::##field) get##name(OwnerType* obj) { return obj->##field; } \
|
|
|
void set##name(OwnerType* obj, decltype(OwnerType::##field) val) { obj->##field = val; }
|
|
|
|
|
|
+ /** Shortcut for defining getter/setter methods for a RTTI plain field. */
|
|
|
#define BS_PLAIN_MEMBER(name) \
|
|
|
decltype(OwnerType::##name)& get##name(OwnerType* obj) { return obj->##name; } \
|
|
|
void set##name(OwnerType* obj, decltype(OwnerType::##name)& val) { obj->##name = val; }
|
|
|
|
|
|
+ /** Shortcut for defining getter/setter methods for a RTTI reflectable field. */
|
|
|
#define BS_REFL_MEMBER(name) \
|
|
|
decltype(OwnerType::##name)& get##name(OwnerType* obj) { return obj->##name; } \
|
|
|
void set##name(OwnerType* obj, decltype(OwnerType::##name)& val) { obj->##name = val; }
|
|
|
|
|
|
+ /** Shortcut for defining getter/setter methods for a RTTI reflectable pointer field. */
|
|
|
#define BS_REFLPTR_MEMBER(name) \
|
|
|
decltype(OwnerType::##name) get##name(OwnerType* obj) { return obj->##name; } \
|
|
|
void set##name(OwnerType* obj, decltype(OwnerType::##name) val) { obj->##name = val; }
|
|
|
|
|
|
+ /** Registers a plain field defined with BS_PLAIN_MEMBER or BS_PLAIN_MEMBER_NAMED with the RTTI object. */
|
|
|
#define BS_ADD_PLAIN_FIELD(name, id) \
|
|
|
addPlainField(#name, id##, &MyType::get##name, &MyType::set##name);
|
|
|
|
|
|
+ /** Registers a plain field defined with BS_REFL_MEMBER or BS_REFL_MEMBER_NAMED with the RTTI object. */
|
|
|
#define BS_ADD_REFL_FIELD(name, id) \
|
|
|
addReflectableField(#name, id##, &MyType::get##name, &MyType::set##name);
|
|
|
|
|
|
+ /** Registers a plain field defined with BS_REFLPTR_MEMBER or BS_REFLPTR_MEMBER_NAMED with the RTTI object. */
|
|
|
#define BS_ADD_REFLPTR_FIELD(name, id) \
|
|
|
addReflectablePtrField(#name, id##, &MyType::get##name, &MyType::set##name);
|
|
|
|
|
|
+ /** Shortcut for defining getter/setter methods for a RTTI plain Vector<T> field. */
|
|
|
#define BS_PLAIN_MEMBER_VEC(name) \
|
|
|
std::common_type<decltype(OwnerType::##name)>::type::value_type& get##name(OwnerType* obj, UINT32 idx) { return obj->##name[idx]; } \
|
|
|
void set##name(OwnerType* obj, UINT32 idx, std::common_type<decltype(OwnerType::##name)>::type::value_type& val) { obj->##name[idx] = val; } \
|
|
|
UINT32 getSize##name(OwnerType* obj) { return (UINT32)obj->##name.size(); } \
|
|
|
void setSize##name(OwnerType* obj, UINT32 val) { obj->##name.resize(val); }
|
|
|
|
|
|
+ /** Shortcut for defining getter/setter methods for a RTTI reflectable Vector<T> field. */
|
|
|
#define BS_REFL_MEMBER_VEC(name) \
|
|
|
std::common_type<decltype(OwnerType::##name)>::type::value_type& get##name(OwnerType* obj, UINT32 idx) { return obj->##name[idx]; } \
|
|
|
void set##name(OwnerType* obj, UINT32 idx, std::common_type<decltype(OwnerType::##name)>::type::value_type& val) { obj->##name[idx] = val; } \
|
|
|
UINT32 getSize##name(OwnerType* obj) { return (UINT32)obj->##name.size(); } \
|
|
|
void setSize##name(OwnerType* obj, UINT32 val) { obj->##name.resize(val); }
|
|
|
|
|
|
+ /** Shortcut for defining getter/setter methods for a RTTI reflectable pointer Vector<T> field. */
|
|
|
#define BS_REFLPTR_MEMBER_VEC(name) \
|
|
|
std::common_type<decltype(OwnerType::##name)>::type::value_type get##name(OwnerType* obj, UINT32 idx) { return obj->##name[idx]; } \
|
|
|
void set##name(OwnerType* obj, UINT32 idx, std::common_type<decltype(OwnerType::##name)>::type::value_type val) { obj->##name[idx] = val; } \
|
|
|
UINT32 getSize##name(OwnerType* obj) { return (UINT32)obj->##name.size(); } \
|
|
|
void setSize##name(OwnerType* obj, UINT32 val) { obj->##name.resize(val); }
|
|
|
|
|
|
+ /** Registers a plain array field defined with BS_PLAIN_MEMBER_VEC with the RTTI object. */
|
|
|
#define BS_ADD_PLAIN_FIELD_ARR(name, id) \
|
|
|
addPlainArrayField(#name, id##, &MyType::get##name, &MyType::getSize##name, \
|
|
|
&MyType::set##name, &MyType::setSize##name);
|
|
|
|
|
|
+ /** Registers a reflectable object array field defined with BS_PLAIN_MEMBER_VEC with the RTTI object. */
|
|
|
#define BS_ADD_REFL_FIELD_ARR(name, id) \
|
|
|
addReflectableArrayField(#name, id##, &MyType::get##name, &MyType::getSize##name, \
|
|
|
&MyType::set##name, &MyType::setSize##name);
|
|
|
|
|
|
+ /** Registers a reflectable pointer array field defined with BS_PLAIN_MEMBER_VEC with the RTTI object. */
|
|
|
#define BS_ADD_REFLPTR_FIELD_ARR(name, id) \
|
|
|
addReflectablePtrArrayField(#name, id##, &MyType::get##name, &MyType::getSize##name, \
|
|
|
&MyType::set##name, &MyType::setSize##name);
|
|
|
@@ -123,13 +138,6 @@ namespace BansheeEngine
|
|
|
/** Returns true if current RTTI class is derived from @p base. (Or if it is the same type as base) */
|
|
|
virtual bool isDerivedFrom(RTTITypeBase* base) = 0;
|
|
|
|
|
|
- /**
|
|
|
- * Called by the RTTI system when a class is first found in order to form child/parent class hierarchy.
|
|
|
- *
|
|
|
- * @note Internal method.
|
|
|
- */
|
|
|
- virtual void _registerDerivedClass(RTTITypeBase* derivedClass) = 0;
|
|
|
-
|
|
|
/** Creates a new instance of the class owning this RTTI type. */
|
|
|
virtual std::shared_ptr<IReflectable> newRTTIObject() = 0;
|
|
|
|
|
|
@@ -498,6 +506,15 @@ namespace BansheeEngine
|
|
|
*/
|
|
|
RTTIField* findField(int uniqueFieldId);
|
|
|
|
|
|
+ /** @name Internal
|
|
|
+ * @{
|
|
|
+ */
|
|
|
+
|
|
|
+ /** Called by the RTTI system when a class is first found in order to form child/parent class hierarchy. */
|
|
|
+ virtual void _registerDerivedClass(RTTITypeBase* derivedClass) = 0;
|
|
|
+
|
|
|
+ /** @} */
|
|
|
+
|
|
|
protected:
|
|
|
/**
|
|
|
* Tries to add a new field to the fields array, and throws an exception if a field with the same name or id
|