sead
Loading...
Searching...
No Matches
aglParameter.h
Go to the documentation of this file.
1#pragma once
2
3#include <basis/seadAssert.h>
4#include <container/seadListImpl.h>
5#include <prim/seadSafeString.h>
6
7namespace sead {
8
9class Heap;
10class XmlElement;
11
12}
13
14namespace agl { namespace utl {
15
16class IParameterObj;
17class ResParameter;
18
20{
21public:
23 {
24 cType_bool = 0, // agl::utl::Parameter< bool >
25 cType_f32 = 1, // agl::utl::Parameter< f32 >
26 cType_int = 2, // agl::utl::Parameter< s32 >
27 cType_vec2 = 3, // agl::utl::Parameter< sead::Vector2f >
28 cType_vec3 = 4, // agl::utl::Parameter< sead::Vector3f >
29 cType_vec4 = 5, // agl::utl::Parameter< sead::Vector4f >
30 cType_color = 6, // agl::utl::Parameter< sead::Color4f >
31 cType_string32 = 7, // agl::utl::Parameter< sead::FixedSafeString<32> >
32 cType_string64 = 8, // agl::utl::Parameter< sead::FixedSafeString<64> > (Unused in NSMBU)
33 cType_curve1 = 9, // agl::utl::ParameterCurve< 1 >
34 cType_curve2 = 10, // agl::utl::ParameterCurve< 2 > (Unused in NSMBU)
35 cType_curve3 = 11, // agl::utl::ParameterCurve< 3 > (Unused in NSMBU)
36 cType_curve4 = 12 // agl::utl::ParameterCurve< 4 > (Unused in NSMBU)
37 };
38
39public:
41 ParameterBase(const sead::SafeString& name, const sead::SafeString& label, IParameterObj* p_obj);
42 ParameterBase(const sead::SafeString& name, const sead::SafeString& label, const sead::SafeString& meta, IParameterObj* p_obj);
43
44 bool makeZero();
45
47 void applyResource(ResParameter res, f32 t);
48
49 virtual bool copy(const ParameterBase& src);
50 virtual void copyUnsafe(const ParameterBase& src);
51 bool copyLerp(const ParameterBase& src_a, const ParameterBase& src_b, f32 t);
52
53private:
54 template <typename T>
55 void copyLerp_(const ParameterBase& src_a, const ParameterBase& src_b, f32 t);
56
57public:
58 virtual void writeToXML(sead::XmlElement*, sead::Heap*) const;
59 virtual s32 readFromXML(const sead::XmlElement&);
60
61public:
63 {
64 SEAD_ASSERT_MSG(false, "Can\'t use this string.");
65 return sead::SafeString::cEmptyString;
66 }
67
69 {
70 SEAD_ASSERT_MSG(false, "Can\'t use this string.");
71 return sead::SafeString::cEmptyString;
72 }
73
75 {
76 SEAD_ASSERT_MSG(false, "Can\'t use this string.");
77 return sead::SafeString::cEmptyString;
78 }
79
80 virtual ParameterType getParameterType() const = 0;
81 virtual const void* ptr() const = 0;
82 virtual void* ptr() = 0;
83 virtual const void* typePtr() const = 0;
84 virtual void* typePtr() = 0;
85 virtual size_t size() const = 0;
86 virtual ParameterBase* clone(sead::Heap* heap, IParameterObj* p_obj) const = 0;
87
88protected:
89 virtual void postApplyResource_(const void*, size_t) { }
90
91public:
92 void initializeListNode(const sead::SafeString& name, const sead::SafeString& label, const sead::SafeString& meta, IParameterObj* p_obj);
93
94 u32 getNameHash() const { return mHash; }
95 static u32 calcHash(const sead::SafeString& s);
96
97protected:
100
101 friend class IParameterObj;
102};
103static_assert(sizeof(ParameterBase) == 0x10, "agl::utl::ParameterBase size mismatch");
104
105template <typename T>
107{
108public:
110 : ParameterBase()
111 {
112 }
113
114 Parameter(const T& value, const sead::SafeString& name, const sead::SafeString& label, IParameterObj* p_obj)
115 : ParameterBase()
116 {
117 initialize(value, name, label, p_obj);
118 }
119
120 Parameter(const T& value, const sead::SafeString& name, const sead::SafeString& label, const sead::SafeString& meta, IParameterObj* p_obj)
121 : ParameterBase()
122 {
123 initialize(value, name, label, meta, p_obj);
124 }
125
127 virtual const void* ptr() const { return &mValue; }
128 virtual void* ptr() { return &mValue; }
129 virtual const void* typePtr() const { return &mValue; }
130 virtual void* typePtr() { return &mValue; }
131 virtual size_t size() const { return sizeof(mValue); }
132 virtual ParameterBase* clone(sead::Heap* heap, IParameterObj* p_obj) const;
133
134 void initialize(const T& value, const sead::SafeString& name, const sead::SafeString& label, IParameterObj* p_obj)
135 {
136 initializeListNode(name, label, "", p_obj);
137 setValue(value);
138 }
139
140 void initialize(const T& value, const sead::SafeString& name, const sead::SafeString& label, const sead::SafeString& meta, IParameterObj* p_obj)
141 {
142 initializeListNode(name, label, meta, p_obj);
143 setValue(value);
144 }
145
146 template <typename U>
147 void setValue(const U& value);
148
149 const T& getValue() const { return mValue; }
150
151 T& operator*() { return mValue; }
152 const T& operator*() const { return mValue; }
153
154 T* operator->() { return &mValue; }
155 const T* operator->() const { return &mValue; }
156
157private:
159};
160
161} }
162
163#ifdef __cplusplus
164
165#include <utility/aglParameter.hpp>
166
167#endif // __cplusplus
Definition aglParameterObj.h:13
Definition aglParameter.h:20
virtual void postApplyResource_(const void *, size_t)
Definition aglParameter.h:89
virtual void * typePtr()=0
void applyResource(ResParameter res, f32 t)
Definition aglParameter.cpp:64
virtual const void * ptr() const =0
u32 getNameHash() const
Definition aglParameter.h:94
virtual void copyUnsafe(const ParameterBase &src)
Definition aglParameter.cpp:135
ParameterBase()
Definition aglParameter.cpp:8
void initializeListNode(const sead::SafeString &name, const sead::SafeString &label, const sead::SafeString &meta, IParameterObj *p_obj)
Definition aglParameter.cpp:200
virtual const void * typePtr() const =0
static u32 calcHash(const sead::SafeString &s)
Definition aglParameter.cpp:208
virtual s32 readFromXML(const sead::XmlElement &)
Definition aglParameter.cpp:194
virtual void writeToXML(sead::XmlElement *, sead::Heap *) const
Definition aglParameter.cpp:189
sead::ListNode mListNode
Definition aglParameter.h:99
void applyResource(ResParameter res)
Definition aglParameter.cpp:54
virtual ParameterBase * clone(sead::Heap *heap, IParameterObj *p_obj) const =0
ParameterBase(const sead::SafeString &name, const sead::SafeString &label, IParameterObj *p_obj)
Definition aglParameter.cpp:13
sead::SafeString getParameterName() const
Definition aglParameter.h:62
virtual bool copy(const ParameterBase &src)
Definition aglParameter.cpp:123
sead::SafeString getMeta() const
Definition aglParameter.h:74
virtual ParameterType getParameterType() const =0
ParameterBase(const sead::SafeString &name, const sead::SafeString &label, const sead::SafeString &meta, IParameterObj *p_obj)
Definition aglParameter.cpp:18
bool makeZero()
Definition aglParameter.cpp:23
bool copyLerp(const ParameterBase &src_a, const ParameterBase &src_b, f32 t)
Definition aglParameter.cpp:145
void copyLerp_(const ParameterBase &src_a, const ParameterBase &src_b, f32 t)
Definition aglParameter.hpp:49
ParameterType
Definition aglParameter.h:23
@ cType_vec4
Definition aglParameter.h:29
@ cType_string64
Definition aglParameter.h:32
@ cType_int
Definition aglParameter.h:26
@ cType_curve1
Definition aglParameter.h:33
@ cType_vec3
Definition aglParameter.h:28
@ cType_color
Definition aglParameter.h:30
@ cType_curve4
Definition aglParameter.h:36
@ cType_curve3
Definition aglParameter.h:35
@ cType_bool
Definition aglParameter.h:24
@ cType_f32
Definition aglParameter.h:25
@ cType_string32
Definition aglParameter.h:31
@ cType_curve2
Definition aglParameter.h:34
@ cType_vec2
Definition aglParameter.h:27
sead::SafeString getLabel() const
Definition aglParameter.h:68
u32 mHash
Definition aglParameter.h:98
virtual size_t size() const =0
virtual void * ptr()=0
Definition aglParameter.h:107
Parameter(const T &value, const sead::SafeString &name, const sead::SafeString &label, const sead::SafeString &meta, IParameterObj *p_obj)
Definition aglParameter.h:120
T * operator->()
Definition aglParameter.h:154
const T & getValue() const
Definition aglParameter.h:149
void setValue(const U &value)
Definition aglParameter.hpp:16
Parameter(const T &value, const sead::SafeString &name, const sead::SafeString &label, IParameterObj *p_obj)
Definition aglParameter.h:114
virtual const void * ptr() const
Definition aglParameter.h:127
virtual ParameterBase * clone(sead::Heap *heap, IParameterObj *p_obj) const
Definition aglParameter.hpp:10
T & operator*()
Definition aglParameter.h:151
Parameter()
Definition aglParameter.h:109
virtual ParameterType getParameterType() const
virtual void * typePtr()
Definition aglParameter.h:130
const T * operator->() const
Definition aglParameter.h:155
virtual const void * typePtr() const
Definition aglParameter.h:129
T mValue
Definition aglParameter.h:158
virtual size_t size() const
Definition aglParameter.h:131
const T & operator*() const
Definition aglParameter.h:152
void initialize(const T &value, const sead::SafeString &name, const sead::SafeString &label, IParameterObj *p_obj)
Definition aglParameter.h:134
void initialize(const T &value, const sead::SafeString &name, const sead::SafeString &label, const sead::SafeString &meta, IParameterObj *p_obj)
Definition aglParameter.h:140
virtual void * ptr()
Definition aglParameter.h:128
Definition aglResParameter.h:16
Definition seadHeap.h:23
Definition seadListImpl.h:11
Definition aglImageFilter2D.h:11
Definition aglDisplayList.cpp:5
Definition seadAssert.h:44
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33