summaryrefslogtreecommitdiff
path: root/src/editor/properties.h
diff options
context:
space:
mode:
authoraura <nw@moneybot.cc>2026-03-16 15:40:03 +0100
committeraura <nw@moneybot.cc>2026-03-16 15:40:03 +0100
commit991352b0d2767e6bd1a46f554db4ac9d208c13ad (patch)
treeec89dcc1bf6e5ad21474ee91a8b9d0f8301c7f1c /src/editor/properties.h
parente59a032fb9afac6496acf3fba51a2a329bd0f992 (diff)
finish prop rewrite
Diffstat (limited to 'src/editor/properties.h')
-rw-r--r--src/editor/properties.h76
1 files changed, 72 insertions, 4 deletions
diff --git a/src/editor/properties.h b/src/editor/properties.h
index 1eb51f8..d663a6b 100644
--- a/src/editor/properties.h
+++ b/src/editor/properties.h
@@ -8,15 +8,15 @@
#define EPROP( _type, name, value, display ) \
_type name = value; \
- EDITOR_PROP name##_prop{ &name, eprop_type<_type>(), display, this, 0 };
+ EDITOR_PROP name##_prop{ &name, eprop_type<_type>(), display, this, 0 }
#define EPROP_RO( _type, name, value, display ) \
_type name = value; \
- EDITOR_PROP name##_prop{ .pdata = &name, .type = eprop_type<_type>(), .displayname = display, .parent = this, .readonly = 1 };
+ EDITOR_PROP name##_prop{ &name, eprop_type<_type>(), display, this, 1 }
#define EPROP_RANGED( _type, name, value, display, _min, _max ) \
- _type name{ value }; \
- EDITOR_PROP{ \
+ _type name = value; \
+ EDITOR_PROP name##_prop{ \
&name, \
eprop_type<_type>(), \
display, \
@@ -26,6 +26,30 @@
0 \
}
+#define EPROP_STEP( _type, name, value, display, step ) \
+ _type name = value; \
+ EDITOR_PROP name##_prop{ \
+ &name, \
+ eprop_type<_type>(), \
+ display, \
+ step, \
+ this, \
+ 0 \
+ }
+
+#define EPROP_RANGED_STEP( _type, name, value, display, min, max, step ) \
+ _type name = value; \
+ EDITOR_PROP name##_prop{ \
+ &name, \
+ eprop_type<_type>(), \
+ display, \
+ step, \
+ this, \
+ min, \
+ max, \
+ 0 \
+ }
+
enum EditorPropType_t {
EPROP_INVALID = 0,
EPROP_U8 = 1,
@@ -48,6 +72,8 @@ enum EditorPropType_t {
EPROP_LIST,
EPROP_TEXTURE,
EPROP_TEXTURE_LIST,
+ EPROP_VERTEX,
+ EPROP_VERTEX_LIST
};
struct EPROP_ENTRY {
@@ -69,6 +95,7 @@ struct EDITOR_PROP {
displayname = _displayname;
min = -INFINITY;
max = INFINITY;
+ step = 0;
readonly = _readonly;
U64 _this = (U64)this;
@@ -82,12 +109,50 @@ struct EDITOR_PROP {
dataoff = offset;
}
+ EDITOR_PROP( void* _pdata, U8 _type, STR _displayname, F32 _step, struct EOBJECT* _parent, U8 _readonly = 0 ) {
+ type = _type;
+ displayname = _displayname;
+ min = -INFINITY;
+ max = INFINITY;
+ step = _step;
+ readonly = _readonly;
+
+ U64 _this = (U64)this;
+ U64 pdata = (U64)_pdata;
+ U64 parent = (U64)_parent;
+ U64 offset = _this - parent;
+
+ _parent->eprops.push( { offset } );
+
+ offset = _this - pdata;
+ dataoff = offset;
+ }
EDITOR_PROP( void* _pdata, U8 _type, STR _displayname, struct EOBJECT* _parent, F32 _min, F32 _max, U8 _readonly = 0 ) {
type = _type;
displayname = _displayname;
min = _min;
max = _max;
+ step = 0;
+ readonly = _readonly;
+
+ U64 _this = (U64)this;
+ U64 pdata = (U64)_pdata;
+ U64 parent = (U64)_parent;
+ U64 offset = _this - parent;
+
+ _parent->eprops.push( { offset } );
+
+ offset = _this - pdata;
+ dataoff = offset;
+ }
+
+ EDITOR_PROP( void* _pdata, U8 _type, STR _displayname, F32 _step, struct EOBJECT* _parent, F32 _min, F32 _max, U8 _readonly = 0 ) {
+ type = _type;
+ displayname = _displayname;
+ min = _min;
+ max = _max;
+ step = _step;
readonly = _readonly;
U64 _this = (U64)this;
@@ -106,6 +171,7 @@ struct EDITOR_PROP {
STR displayname;
F64 min{ -INFINITY };
F64 max{ INFINITY };
+ F32 step;
U8 readonly;
template <typename T> struct __eprop_type {
@@ -131,6 +197,8 @@ struct EDITOR_PROP {
template <__eobject_base T> struct __eprop_type<T> { static const U8 type = EPROP_OBJ; };
template <typename LT> struct __eprop_type<LIST<LT>> { static const U8 type = EPROP_LIST; };
template <> struct __eprop_type<LIST<struct MAP_TEXTURE_ENTRY*>> { static const U8 type = EPROP_TEXTURE_LIST; };
+ template <> struct __eprop_type<struct MAP_VERTEX> { static const U8 type = EPROP_VERTEX; };
+ template <> struct __eprop_type<LIST<struct MAP_VERTEX>> { static const U8 type = EPROP_VERTEX_LIST; };
};
inline EDITOR_PROP* eprop_from_ref( EOBJECT* obj, EPROP_ENTRY e ) {