sead
Loading...
Searching...
No Matches
aglEnvObj.h
Go to the documentation of this file.
1#pragma once
2
3#include <common/aglShaderEnum.h>
4#include <math/seadMatrix.h>
5#include <prim/seadBitFlag.h>
6#include <prim/seadRuntimeTypeInfo.h>
7#include <utility/aglNamedObj.h>
8#include <utility/aglNamedObjIndex.h>
9#include <utility/aglParameter.h>
10#include <utility/aglParameterObj.h>
11
12namespace agl { namespace env {
13
14class EnvObjMgr;
15
16class EnvObj : public utl::IParameterObj, public utl::INamedObj
17{
18public:
19 class Index : public utl::INamedObjIndex
20 {
21 public:
24 , mEnvType(0)
25 {
26 }
27
28 virtual ~Index()
29 {
30 }
31
32 virtual const sead::SafeString& getNamedObjName(s32 index) const;
33 virtual s32 getNamedObjNum() const;
34
35 void setType(s32 type)
36 {
37 mEnvType = type;
38 }
39
40 s32 getType() const
41 {
42 return mEnvType;
43 }
44
45 protected:
47 };
48 static_assert(sizeof(Index) == 0x54);
49
50 typedef EnvObj* (*TypeCreateFuncPtr)(sead::Heap*);
51
52 template <typename T>
54 {
55 public:
57 {
58 return new (heap) T;
59 }
60 };
61
63 {
64 cMetaInfo_0 = 0, // Red icon
65 cMetaInfo_1, // Orange icon
66 cMetaInfo_2, // Yellow Icon
67 cMetaInfo_3, // Purple Icon
69 };
70 static_assert(sizeof(MetaInfo) == 4);
71 static_assert(cMetaInfo_Num == 4);
72
73private:
74 struct TypeInfo
75 {
76 const char* name;
77 const char* label;
78 TypeCreateFuncPtr p_create_func;
81 };
82 static_assert(sizeof(TypeInfo) == 0x14);
83
84public:
85 static const s32 cTypeMax = 64;
86 static s32 getTypeNum() { return sTypeNum; }
87
88 static sead::SafeString getTypeName(s32 type) { return sTypeInfoTable[type].name; }
89 static TypeCreateFuncPtr getTypeCreateFunc(s32 type) { return sTypeInfoTable[type].p_create_func; }
90
91public:
92 EnvObj();
93
94 virtual void postRead_() { callbackLoadData(); }
95
97
98public:
99 virtual ~EnvObj();
100
101 virtual void initialize(s32 view_max, sead::Heap* heap) { }
102 virtual void update() { }
103 virtual void updateView(const sead::Matrix34f& view_mtx, const sead::Matrix44f& proj_mtx, s32 view_index) { }
104 virtual ShaderMode drawDebug(const sead::Matrix34f& view_mtx, const sead::Matrix44f& proj_mtx, s32 view_index, ShaderMode mode) const { return mode; }
105 virtual void callbackLoadData() { }
106 virtual const sead::SafeString& getEnvObjName() const { return *mName; }
107 virtual const sead::SafeString& getGroupName() const { return *mGroup; }
108 virtual const sead::SafeString& getObjName() const { return getEnvObjName(); }
109 virtual bool isHostIOEnabled() const { return isEnableHostIO(); }
110 virtual s32 getObjType() const { return getTypeID(); }
111 virtual s32 getTypeID() const = 0;
112
113 s32 getIndex() const
114 {
115 return mIndex;
116 }
117
118 bool isEnableHostIO() const
119 {
120 return mFlag.isOnBit(0);
121 }
122
123 void setName(const sead::SafeString& name)
124 {
125 *mName = name;
126 }
127
128 bool isEnable() const { return *mEnable; }
129 void setEnable(bool enable);
130
131 ShaderMode drawFog(s32 view_index, f32 start, f32 end, const sead::Vector3f& direction, const sead::Color4f& color, ShaderMode mode) const;
132
133private:
134 void becomeDefaultName_();
135
136public:
137 static s32* registClass(const sead::SafeString& name, const sead::SafeString& label, TypeCreateFuncPtr p_create_func, MetaInfo meta_info);
138
139private:
140 void initialize_(s32 index, s32 view_max, EnvObjMgr* p_env_mgr, sead::Heap* heap);
141 void clear_();
142 void update_();
143 friend class EnvObjMgr;
144
145protected:
152
153 static s32 sTypeNum;
154 static TypeInfo sTypeInfoTable[cTypeMax];
155};
156static_assert(sizeof(EnvObj) == 0x108);
157
158} }
159
160#define AGL_ENV_OBJ_TYPE_INFO()
161 private:
162 static s32* sTypeInfo;
163
164 public:
165 static s32 getType() { return *sTypeInfo; }
166 virtual s32 getTypeID() const { return *sTypeInfo; }
167
168#define AGL_ENV_OBJ_REGIST_CLASS(CLASS, LABEL, META)
169 s32* CLASS::sTypeInfo = ::agl::env::EnvObj::registClass(#CLASS, LABEL, ::agl::env::EnvObj::TypeToID<CLASS>::createInstance, ::agl::env::EnvObj::cMetaInfo_##META)
Definition aglEnvObjMgr.h:16
Definition aglEnvObj.h:20
virtual s32 getNamedObjNum() const
Definition aglEnvObj.cpp:149
virtual ~Index()
Definition aglEnvObj.h:28
s32 mEnvType
Definition aglEnvObj.h:46
void setType(s32 type)
Definition aglEnvObj.h:35
s32 getType() const
Definition aglEnvObj.h:40
Index()
Definition aglEnvObj.h:22
virtual const sead::SafeString & getNamedObjName(s32 index) const
Definition aglEnvObj.cpp:144
Definition aglEnvObj.h:54
static EnvObj * createInstance(sead::Heap *heap)
Definition aglEnvObj.h:56
Definition aglEnvObj.h:17
virtual bool isHostIOEnabled() const
Definition aglEnvObj.h:109
bool isEnableHostIO() const
Definition aglEnvObj.h:118
virtual void postRead_()
Definition aglEnvObj.h:94
utl::Parameter< bool > mEnable
Definition aglEnvObj.h:151
virtual const sead::SafeString & getGroupName() const
Definition aglEnvObj.h:107
virtual const sead::SafeString & getEnvObjName() const
Definition aglEnvObj.h:106
static s32 sTypeNum
Definition aglEnvObj.h:153
static const s32 cTypeMax
Definition aglEnvObj.h:85
sead::BitFlag16 mFlag
Definition aglEnvObj.h:148
static sead::SafeString getTypeName(s32 type)
Definition aglEnvObj.h:88
void setName(const sead::SafeString &name)
Definition aglEnvObj.h:123
MetaInfo
Definition aglEnvObj.h:63
@ cMetaInfo_0
Definition aglEnvObj.h:64
@ cMetaInfo_1
Definition aglEnvObj.h:65
@ cMetaInfo_2
Definition aglEnvObj.h:66
@ cMetaInfo_Num
Definition aglEnvObj.h:68
@ cMetaInfo_3
Definition aglEnvObj.h:67
virtual ShaderMode drawDebug(const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, s32 view_index, ShaderMode mode) const
Definition aglEnvObj.h:104
static TypeInfo sTypeInfoTable[cTypeMax]
Definition aglEnvObj.h:154
EnvObjMgr * mpMgr
Definition aglEnvObj.h:146
virtual void update()
Definition aglEnvObj.h:102
utl::Parameter< sead::FixedSafeString< 32 > > mName
Definition aglEnvObj.h:149
static TypeCreateFuncPtr getTypeCreateFunc(s32 type)
Definition aglEnvObj.h:89
virtual s32 getTypeID() const =0
static s32 * registClass(const sead::SafeString &name, const sead::SafeString &label, TypeCreateFuncPtr p_create_func, MetaInfo meta_info)
Definition aglEnvObj.cpp:59
void becomeDefaultName_()
Definition aglEnvObj.cpp:54
virtual s32 getObjType() const
Definition aglEnvObj.h:110
bool isEnable() const
Definition aglEnvObj.h:128
virtual void callbackLoadData()
Definition aglEnvObj.h:105
u16 mIndex
Definition aglEnvObj.h:147
EnvObj()
Definition aglEnvObj.cpp:26
virtual ~EnvObj()
Definition aglEnvObj.cpp:36
void update_()
Definition aglEnvObj.cpp:138
void clear_()
Definition aglEnvObj.cpp:131
void initialize_(s32 index, s32 view_max, EnvObjMgr *p_env_mgr, sead::Heap *heap)
Definition aglEnvObj.cpp:106
void setEnable(bool enable)
Definition aglEnvObj.cpp:40
utl::Parameter< sead::FixedSafeString< 32 > > mGroup
Definition aglEnvObj.h:150
virtual void initialize(s32 view_max, sead::Heap *heap)
Definition aglEnvObj.h:101
s32 getIndex() const
Definition aglEnvObj.h:113
ShaderMode drawFog(s32 view_index, f32 start, f32 end, const sead::Vector3f &direction, const sead::Color4f &color, ShaderMode mode) const
Definition aglEnvObj.cpp:49
virtual const sead::SafeString & getObjName() const
Definition aglEnvObj.h:108
static s32 getTypeNum()
Definition aglEnvObj.h:86
virtual void updateView(const sead::Matrix34f &view_mtx, const sead::Matrix44f &proj_mtx, s32 view_index)
Definition aglEnvObj.h:103
Definition aglNamedObjIndex.h:11
INamedObjIndex()
Definition aglNamedObjIndex.cpp:6
Definition aglNamedObj.h:9
Definition aglParameterObj.h:13
Definition aglParameter.h:107
Definition seadSafeString.h:421
Definition seadHeap.h:23
Definition aglEnvObj.cpp:21
Definition aglImageFilter2D.h:11
Definition aglDisplayList.cpp:5
ShaderMode
Definition aglShaderEnum.h:27
Definition seadAssert.h:44
BitFlag< u16 > BitFlag16
Definition seadBitFlag.h:124
Matrix44< f32 > Matrix44f
Definition seadMatrix.h:343
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
Vector3< f32 > Vector3f
Definition seadVector.h:239
Matrix34< f32 > Matrix34f
Definition seadMatrix.h:342
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75
Definition aglEnvObj.h:75
TypeCreateFuncPtr p_create_func
Definition aglEnvObj.h:78
s32 index
Definition aglEnvObj.h:80
MetaInfo meta_info
Definition aglEnvObj.h:79
const char * name
Definition aglEnvObj.h:76
const char * label
Definition aglEnvObj.h:77
Definition seadColor.h:9