sead
Loading...
Searching...
No Matches
seadPtclSystem.h
Go to the documentation of this file.
1#ifndef SEAD_PTCL_SYSTEM_H_
2#define SEAD_PTCL_SYSTEM_H_
3
4#include <gfx/seadColor.h>
5#include <gfx/seadGraphics.h>
6#include <heap/seadHeap.h>
7#include <heap/seadHeapMgr.h>
8#include <math/seadMatrix.h>
9#include <time/seadTickTime.h>
10
11#include <nw/effect.h>
12
13namespace nw { namespace eftvw { // TODO: Implement this properly
14
16{
17public:
18 static bool IsConnected()
19 {
20 return s_isConnected;
21 }
22
23private:
24 static volatile bool s_isConnected;
25};
26
28{
29public:
30 ViewerSystem(nw::eft::Heap* heap, nw::eft::Heap* connectionHeap, nw::eft::System* system);
31
32 void UnbindResource(u32 resourceId);
33
34 bool ProcCalc(f32 frameRate);
35
37
38 bool IsPause()
39 {
40 return m_IsPaused;
41 }
42
43 void SetViewerCenter(nw::math::Matrix34 viewerCenter)
44 {
45 m_ViewerCenter = viewerCenter;
46 }
47
48 void SetViewerColor(f32 r, f32 g, f32 b, f32 a)
49 {
50 m_ViewerColor.Set(r, g, b, a);
51 }
52
53private:
54 u32 _0[0xA14 / sizeof(u32)];
57 u32 _a18[(0xA28 - 0xA18) / sizeof(u32)];
60 u32 _a68[(0x13CC - 0xA68) / sizeof(u32)];
61};
62static_assert(sizeof(ViewerSystem) == 0x13CC);
63
64} }
65
66namespace sead { namespace ptcl {
67
68enum
69{
70 cEftMaxGroup = nw::eft::EFT_GROUP_MAX,
72};
73
74class Config : public nw::eft::Config
75{
76public:
78 : nw::eft::Config()
79 , mpHeap()
80 , mpViewerSysHeap(nullptr)
81 , _28()
82 , _29()
83 , _2a(7)
84 , _2b(1)
85 , _2c()
86 , _2d(0x12)
87 {
88 }
89
90//private:
99};
100static_assert(sizeof(Config) == 0x30);
101
102class Heap : public nw::eft::Heap
103{
104public:
106 {
107 }
108
109 explicit Heap(::sead::Heap* heap)
110 : mpHeap(heap)
111 {
112 }
113
114 void* Alloc(u32 size, s32 alignment) override
115 {
116 return mpHeap->alloc(size, alignment);
117 }
118
119 void Free(void* ptr) override
120 {
122 }
123
124//private:
126};
127static_assert(sizeof(Heap) == 8, "sead::ptcl::Heap size mismatch");
128
130{
131public:
133 {
134 unkParam1Max = 100.0f;
135 unkParam2Max = 10.0f;
136 unkParam3Max = 1.0f;
137 unkParam4Max = 10.0f;
138 unkParam5Max = 1000;
139 update();
140 }
141
142 void update()
143 {
144 unkParam1Meta .format("Min=%5.1f,Max=%5.1f", -unkParam1Max, unkParam1Max);
145 unkParam1PositiveMeta .format("Min=0,Max=%5.1f", unkParam1Max);
146 unkParam3Meta .format("Min=%5.1f,Max=%5.1f", -unkParam3Max, unkParam3Max);
147 unkParam3PositiveMeta .format("Min=0,Max=%5.1f", unkParam3Max);
148 unkParam3PositiveFractionMeta .format("Min=0,Max=%5.1f", unkParam3Max / 10.0f);
149 unkParam2Meta .format("Min=%5.1f,Max=%5.1f,Menu=True,MenuDefault=Auto", -unkParam2Max, unkParam2Max);
150 unkParam2PositiveMeta .format("Min=0,Max=%5.1f,Menu=True,MenuDefault=Auto", unkParam2Max);
151 unkParam4Meta .format("Min=%5.1f,Max=%5.1f,Menu=True,MenuDefault=Auto", -unkParam4Max, unkParam4Max);
152 unkParam4PositiveMeta .format("Min=0,Max=%5.1f,Menu=True,MenuDefault=Auto", unkParam4Max);
153 unkParam5Meta .format("Min=0,Max=%d", unkParam5Max);
154 unkParam5NonZeroMeta .format("Min=1,Max=%d", unkParam5Max);
155 unkParam1DisableMeta .format("%s,IsEnable=False", unkParam1Meta.cstr());
156 unkParam1PositiveDisableMeta .format("%s,IsEnable=False", unkParam1PositiveMeta.cstr());
157 unkParam3PositiveDisableMeta .format("%s,IsEnable=False", unkParam3PositiveMeta.cstr());
158 unkParam2DisableMeta .format("%s,IsEnable=False", unkParam2Meta.cstr());
159 unkParam4DisableMeta .format("%s,IsEnable=False", unkParam4Meta.cstr());
160 unkParam4PositiveDisableMeta .format("%s,IsEnable=False", unkParam4PositiveMeta.cstr());
161 unkParam5DisableMeta .format("%s,IsEnable=False", unkParam5Meta.cstr());
162 unkParam2PositiveDisableMeta .format("%s,IsEnable=False", unkParam2PositiveMeta.cstr());
163 unkParam5NonZeroDisableMeta .format("%s,IsEnable=False", unkParam5NonZeroMeta.cstr());
164 unkParam3PositiveWithMenuMeta .format("%s,Menu=True,MenuDefault=Auto", unkParam3PositiveMeta.cstr());
165 unkParam5ScaledMeta .format("Min=0,Max=%d", unkParam5Max * 10);
166 unkParam5ScaledNonZeroMeta .format("Min=1,Max=%d", unkParam5Max * 10);
167 unkParam5ScaledDisableMeta .format("%s,IsEnable=False", unkParam5ScaledMeta.cstr());
168 unkParam5ScaledNonZeroDisableMeta.format("%s,IsEnable=False", unkParam5ScaledNonZeroMeta.cstr());
169 }
170
171private:
172 f32 unkParam1Max; // Min = Negation of this
202};
203static_assert(sizeof(PtclWorldScale) == 0x880);
204
206{
207public:
209 : _8c8(0)
210 {
211 mCenter = Matrix34f::ident;
212 _8cc = Matrix34f::ident;
213 _4 = 0;
214 _8fc = 1.0f;
215
216 for (s32 i = 0; i < 16; i++)
217 _900[i].format("[%d]", i);
218
219 _dc0[0] = "lP";
220 _dc0[1] = "lQ";
221
222 mColor.setf(1.0f, 1.0f, 1.0f, 1.0f);
223 }
224
226 {
228 }
229
231 {
232 setViewerColor(p_system, mColor.r, mColor.g, mColor.b, mColor.a);
233 }
234
235 static void setViewerCenter(nw::eftvw::ViewerSystem* p_system, const Matrix34f& center)
236 {
237 p_system->SetViewerCenter(reinterpret_cast<const nw::math::Matrix34&>(center.a[0]));
238 }
239
240 static void setViewerColor(nw::eftvw::ViewerSystem* p_system, f32 r, f32 g, f32 b, f32 a)
241 {
242 if (p_system != nullptr)
243 p_system->SetViewerColor(r, g, b, a);
244 }
245
246private:
247 u32 _0[4 / sizeof(u32)];
257};
258static_assert(sizeof(PtclEditorInterface) == 0xE58, "sead::ptcl::PtclEditorInterface size mismatch");
259
260class PtclSystem : public nw::eft::System
261{
262public:
263 PtclSystem(const Config& config)
264 : nw::eft::System(config)
265 {
266 mHeap.mpHeap = config.mpHeap;
267 Initialize(&mHeap, config);
268
269 if (config.mpViewerSysHeap != nullptr)
270 {
273 mpViewerSys = new nw::eftvw::ViewerSystem(&mViewerSysHeap, &mViewerSysHeap, this);
274 }
275 else
276 {
277 mpViewerSys = nullptr;
278 }
279
280 mSeadHeapArray = static_cast< ::sead::Heap** >(config.mpHeap->alloc(sizeof(::sead::Heap*) * config.GetResourceNum(), 4));
281 std::memset(mSeadHeapArray, 0, sizeof(::sead::Heap*) * config.GetResourceNum());
282 }
283
284 const TickTime& getCreationTime() const
285 {
286 return mTime;
287 }
288
289 ::sead::Heap* getHeap() const
290 {
291 return mHeap.mpHeap;
292 }
293
295 {
296 return mHeap;
297 }
298
299 const Heap& getEftHeap() const
300 {
301 return mHeap;
302 }
303
305 {
307 }
308
310 {
311 return mViewerSysHeap;
312 }
313
315 {
316 return mViewerSysHeap;
317 }
318
320 {
321 return mpViewerSys;
322 }
323
325 {
326 return mEditorInterface;
327 }
328
330 {
331 return mEditorInterface;
332 }
333
334 void entryResource(::sead::Heap* heap, void* resource, s32 resId)
335 {
337 {
338 mSeadHeapArray[resId] = heap;
339 Heap heap_(mSeadHeapArray[resId]);
340 EntryResource(&heap_, resource, resId);
341 }
343 }
344
345 void clearResource(s32 resId)
346 {
347 if (mpViewerSys != nullptr)
348 mpViewerSys->UnbindResource(resId);
349
350 Heap heap(mSeadHeapArray[resId]);
351 // SOME_MYSTERIOUS_ASSERT_FUNCTION(mSeadHeapArray[resId]);
352
353 ClearResource(&heap, resId);
354
355 mSeadHeapArray[resId] = nullptr;
356 }
357
358 ::sead::Heap* getResourceHeap(s32 resId) const
359 {
360 return mSeadHeapArray[resId];
361 }
362
363 bool createEmitterSetID(nw::eft::Handle* handle, const Vector3f& pos, s32 emitterSetID, s32 resourceID = 0, s32 groupID = 0, u32 emitterMask = 0xffffffff)
364 {
365 return CreateEmitterSetID(handle, reinterpret_cast<const nw::math::VEC3&>(pos.x), emitterSetID, resourceID, u8(groupID), emitterMask);
366 }
367
368 bool createEmitterSetID(nw::eft::Handle* handle, const Matrix34f& mtx, s32 emitterSetID, s32 resourceID = 0, s32 groupID = 0, u32 emitterMask = 0xffffffff)
369 {
370 return CreateEmitterSetID(handle, reinterpret_cast<const nw::math::MTX34&>(mtx.a[0]), emitterSetID, resourceID, u8(groupID), emitterMask);
371 }
372
373 void calcEmitter(s32 groupID, f32 frameRate = 1.0f)
374 {
375 if (groupID != cEftViewerGroupID)
376 CalcEmitter(u8(groupID), frameRate);
377
378 else
379 {
380 if (mpViewerSys != nullptr && !mpViewerSys->IsPause())
381 CalcEmitter(cEftViewerGroupID, frameRate);
382 }
383 }
384
386 {
388 {
390 {
391 mEditorInterface.applyViewerCenter(mpViewerSys);
392 mEditorInterface.applyViewerColor(mpViewerSys);
393
396 }
398
399 mpViewerSys->ProcCalc(1.0f);
400 }
401
402 BeginFrame();
403 }
404
405private:
406 TickTime mTime;
415};
416static_assert(sizeof(PtclSystem) == 0x18B0, "sead::ptcl::PtclSystem size mismatch");
417
418} }
419
420#endif // SEAD_PTCL_SYSTEM_H_
Definition seadPtclSystem.h:16
static bool IsConnected()
Definition seadPtclSystem.h:18
static volatile bool s_isConnected
Definition seadPtclSystem.h:24
Definition seadPtclSystem.h:28
bool ProcCalc(f32 frameRate)
u32 _a68[(0x13CC - 0xA68)/sizeof(u32)]
Definition seadPtclSystem.h:60
nw::math::Matrix34 m_ViewerCenter
Definition seadPtclSystem.h:58
void SetViewerColor(f32 r, f32 g, f32 b, f32 a)
Definition seadPtclSystem.h:48
bool m_IsPaused
Definition seadPtclSystem.h:56
void UnbindResource(u32 resourceId)
bool IsPause()
Definition seadPtclSystem.h:38
u32 _0[0xA14/sizeof(u32)]
Definition seadPtclSystem.h:54
bool m_DoLoop
Definition seadPtclSystem.h:55
ViewerSystem(nw::eft::Heap *heap, nw::eft::Heap *connectionHeap, nw::eft::System *system)
nw::ut::FloatColor m_ViewerColor
Definition seadPtclSystem.h:59
u32 _a18[(0xA28 - 0xA18)/sizeof(u32)]
Definition seadPtclSystem.h:57
void SetViewerCenter(nw::math::Matrix34 viewerCenter)
Definition seadPtclSystem.h:43
Definition seadHeapMgr.h:117
CurrentHeapSetter(Heap *heap)
Definition seadHeapMgr.h:119
Definition seadSafeString.h:421
Definition seadGraphics.h:17
static Graphics * instance()
Definition seadGraphics.h:151
void unlockDrawContext()
Definition seadGraphics.cpp:31
void lockDrawContext()
Definition seadGraphics.cpp:13
Definition seadHeap.h:23
void setEnableLock(bool enable_lock)
Definition seadHeap.h:84
virtual void free(void *ptr)=0
Definition seadPtclSystem.h:75
u8 _2b
Definition seadPtclSystem.h:96
u8 _29
Definition seadPtclSystem.h:94
u8 _2d
Definition seadPtclSystem.h:98
::sead::Heap * mpHeap
Definition seadPtclSystem.h:91
u8 _2c
Definition seadPtclSystem.h:97
::sead::Heap * mpViewerSysHeap
Definition seadPtclSystem.h:92
u8 _28
Definition seadPtclSystem.h:93
u8 _2a
Definition seadPtclSystem.h:95
Config()
Definition seadPtclSystem.h:77
Definition seadPtclSystem.h:103
Heap()
Definition seadPtclSystem.h:105
void Free(void *ptr) override
Definition seadPtclSystem.h:119
::sead::Heap * mpHeap
Definition seadPtclSystem.h:125
Heap(::sead::Heap *heap)
Definition seadPtclSystem.h:109
void * Alloc(u32 size, s32 alignment) override
Definition seadPtclSystem.h:114
Definition seadPtclSystem.h:206
PtclWorldScale mWorldScale
Definition seadPtclSystem.h:249
static void setViewerColor(nw::eftvw::ViewerSystem *p_system, f32 r, f32 g, f32 b, f32 a)
Definition seadPtclSystem.h:240
Matrix34f _8cc
Definition seadPtclSystem.h:253
Color4f mColor
Definition seadPtclSystem.h:251
void applyViewerCenter(nw::eftvw::ViewerSystem *p_system)
Definition seadPtclSystem.h:225
void applyViewerColor(nw::eftvw::ViewerSystem *p_system)
Definition seadPtclSystem.h:230
u32 _4
Definition seadPtclSystem.h:248
PtclEditorInterface()
Definition seadPtclSystem.h:208
u32 _8c8
Definition seadPtclSystem.h:252
f32 _8fc
Definition seadPtclSystem.h:254
Matrix34f mCenter
Definition seadPtclSystem.h:250
FixedSafeString< 64 > _900[16]
Definition seadPtclSystem.h:255
static void setViewerCenter(nw::eftvw::ViewerSystem *p_system, const Matrix34f &center)
Definition seadPtclSystem.h:235
u32 _0[4/sizeof(u32)]
Definition seadPtclSystem.h:247
FixedSafeString< 64 > _dc0[2]
Definition seadPtclSystem.h:256
Definition seadPtclSystem.h:261
Heap mHeap
Definition seadPtclSystem.h:407
Heap _a40
Definition seadPtclSystem.h:409
PtclEditorInterface & getEditorInterface()
Definition seadPtclSystem.h:324
Heap & getViewerSysEftHeap()
Definition seadPtclSystem.h:309
Heap & getEftHeap()
Definition seadPtclSystem.h:294
u8 _a48[4]
Definition seadPtclSystem.h:410
::sead::Heap * getViewerSysHeap() const
Definition seadPtclSystem.h:304
::sead::Heap * getHeap() const
Definition seadPtclSystem.h:289
PtclEditorInterface mEditorInterface
Definition seadPtclSystem.h:413
nw::eftvw::ViewerSystem * mpViewerSys
Definition seadPtclSystem.h:412
PtclSystem(const Config &config)
Definition seadPtclSystem.h:263
bool createEmitterSetID(nw::eft::Handle *handle, const Vector3f &pos, s32 emitterSetID, s32 resourceID=0, s32 groupID=0, u32 emitterMask=0xffffffff)
Definition seadPtclSystem.h:363
void calcEmitter(s32 groupID, f32 frameRate=1.0f)
Definition seadPtclSystem.h:373
const Heap & getViewerSysEftHeap() const
Definition seadPtclSystem.h:314
const TickTime & getCreationTime() const
Definition seadPtclSystem.h:284
void clearResource(s32 resId)
Definition seadPtclSystem.h:345
nw::eftvw::ViewerSystem * getViewerSys() const
Definition seadPtclSystem.h:319
void entryResource(::sead::Heap *heap, void *resource, s32 resId)
Definition seadPtclSystem.h:334
TickTime mTime
Definition seadPtclSystem.h:406
::sead::Heap ** mSeadHeapArray
Definition seadPtclSystem.h:411
const PtclEditorInterface & getEditorInterface() const
Definition seadPtclSystem.h:329
::sead::Heap * getResourceHeap(s32 resId) const
Definition seadPtclSystem.h:358
u8 _18ac[4]
Definition seadPtclSystem.h:414
void beginFrame()
Definition seadPtclSystem.h:385
Heap mViewerSysHeap
Definition seadPtclSystem.h:408
const Heap & getEftHeap() const
Definition seadPtclSystem.h:299
Definition seadPtclSystem.h:130
FixedSafeString< 64 > unkParam3Meta
Definition seadPtclSystem.h:179
FixedSafeString< 96 > unkParam4Meta
Definition seadPtclSystem.h:185
FixedSafeString< 64 > unkParam3PositiveDisableMeta
Definition seadPtclSystem.h:191
FixedSafeString< 96 > unkParam2DisableMeta
Definition seadPtclSystem.h:192
FixedSafeString< 64 > unkParam1PositiveMeta
Definition seadPtclSystem.h:178
f32 unkParam2Max
Definition seadPtclSystem.h:173
FixedSafeString< 64 > unkParam5NonZeroDisableMeta
Definition seadPtclSystem.h:197
FixedSafeString< 64 > unkParam5DisableMeta
Definition seadPtclSystem.h:196
void update()
Definition seadPtclSystem.h:142
FixedSafeString< 96 > unkParam2PositiveMeta
Definition seadPtclSystem.h:184
f32 unkParam1Max
Definition seadPtclSystem.h:172
FixedSafeString< 64 > unkParam5NonZeroMeta
Definition seadPtclSystem.h:188
FixedSafeString< 64 > unkParam4DisableMeta
Definition seadPtclSystem.h:194
FixedSafeString< 64 > unkParam5ScaledMeta
Definition seadPtclSystem.h:198
FixedSafeString< 96 > unkParam4PositiveMeta
Definition seadPtclSystem.h:186
FixedSafeString< 96 > unkParam2Meta
Definition seadPtclSystem.h:183
FixedSafeString< 64 > unkParam1Meta
Definition seadPtclSystem.h:177
FixedSafeString< 64 > unkParam5ScaledNonZeroDisableMeta
Definition seadPtclSystem.h:201
FixedSafeString< 96 > unkParam3PositiveWithMenuMeta
Definition seadPtclSystem.h:182
f32 unkParam3Max
Definition seadPtclSystem.h:174
PtclWorldScale()
Definition seadPtclSystem.h:132
FixedSafeString< 64 > unkParam3PositiveFractionMeta
Definition seadPtclSystem.h:181
f32 unkParam4Max
Definition seadPtclSystem.h:175
s32 unkParam5Max
Definition seadPtclSystem.h:176
FixedSafeString< 64 > unkParam5ScaledDisableMeta
Definition seadPtclSystem.h:200
FixedSafeString< 64 > unkParam3PositiveMeta
Definition seadPtclSystem.h:180
FixedSafeString< 96 > unkParam4PositiveDisableMeta
Definition seadPtclSystem.h:195
FixedSafeString< 64 > unkParam1PositiveDisableMeta
Definition seadPtclSystem.h:190
FixedSafeString< 96 > unkParam2PositiveDisableMeta
Definition seadPtclSystem.h:193
FixedSafeString< 64 > unkParam1DisableMeta
Definition seadPtclSystem.h:189
FixedSafeString< 64 > unkParam5ScaledNonZeroMeta
Definition seadPtclSystem.h:199
FixedSafeString< 64 > unkParam5Meta
Definition seadPtclSystem.h:187
Definition seadPtclSystem.h:13
Definition seadPtclSystem.h:66
@ cEftMaxGroup
Definition seadPtclSystem.h:70
@ cEftViewerGroupID
Definition seadPtclSystem.h:71
Definition seadAssert.h:44
Vector3< f32 > Vector3f
Definition seadVector.h:239
Matrix34< f32 > Matrix34f
Definition seadMatrix.h:342
Definition seadColor.h:9