1#ifndef EFT_EMITTER_SET_H_
2#define EFT_EMITTER_SET_H_
4#include <nw/eft/eft_typeDef.h>
5#include <nw/eft/eft_Data.h>
6#include <nw/eft/eft_System.h>
7#include <nw/eft/eft_Resource.h>
8#include <nw/eft/eft_Emitter.h>
10namespace nw {
namespace eft {
26 mEmissionRatio = 1.0f;
27 mEmissionInterval = 1.0f;
34 mEmissionRatio =
static_cast<f32>(ratio) /
static_cast<f32>(EFT_EMT_CTRLR_SCALE_ONE);
39 mEmissionRatio = ratio;
44 mEmissionInterval =
static_cast<f32>(ratio) /
static_cast<f32>(EFT_EMT_CTRLR_SCALE_ONE);
49 mEmissionInterval = ratio;
54 mLife =
static_cast<f32>(ratio) /
static_cast<f32>(EFT_EMT_CTRLR_SCALE_ONE);
98 return (s32)(val * (f32)EFT_EMT_CTRLR_SCALE_ONE);
117static_assert(
sizeof(
EmitterController) == 0x14,
"nw::eft::EmitterController size mismatch");
135 for (u32 i = 0; i < EFT_EMITTER_INSET_NUM; i++)
156 return mEmitterSetID;
161 return mEmitterCreateID;
166 return mSystem->SearchEmitterSetName( mEmitterSetID, mResourceID );
183 return mNumEmitterFirst;
192 return static_cast<u8>(mGroupID);
204 return mNumEmitter > 0;
224 mDrawPriority = priority;
229 return mDrawPriority;
234 return mSystem->GetResource(mResourceID)->GetUserData(mEmitterSetID);
239 return mSystem->GetResource(mResourceID)->GetUserDataNum1(mEmitterSetID);
244 return mSystem->GetResource(mResourceID)->GetUserDataNum2(mEmitterSetID);
249 return mSystem->GetResource(mResourceID)->GetUserDataBit(mEmitterSetID);
252 void SetMtx(
const nw::math::MTX34& mtx);
257 mAutoCalcScale = nw::math::VEC3(1.0f, 1.0f, 1.0f);
261 void SetMtxFast(
const nw::math::MTX34& mtx, f32 scale)
263 mSRT.m[0][0] = mtx.m[0][0] * scale;
264 mSRT.m[1][0] = mtx.m[1][0] * scale;
265 mSRT.m[2][0] = mtx.m[2][0] * scale;
267 mSRT.m[0][1] = mtx.m[0][1] * scale;
268 mSRT.m[1][1] = mtx.m[1][1] * scale;
269 mSRT.m[2][1] = mtx.m[2][1] * scale;
271 mSRT.m[0][2] = mtx.m[0][2] * scale;
272 mSRT.m[1][2] = mtx.m[1][2] * scale;
273 mSRT.m[2][2] = mtx.m[2][2] * scale;
275 mSRT.m[0][3] = mtx.m[0][3];
276 mSRT.m[1][3] = mtx.m[1][3];
277 mSRT.m[2][3] = mtx.m[2][3];
280 mAutoCalcScale.x = scale;
281 mAutoCalcScale.y = scale;
282 mAutoCalcScale.z = scale;
286 void SetMtxFast(
const nw::math::MTX34& mtx,
const nw::math::VEC3& scale)
288 mSRT.m[0][0] = mtx.m[0][0] * scale.x;
289 mSRT.m[1][0] = mtx.m[1][0] * scale.x;
290 mSRT.m[2][0] = mtx.m[2][0] * scale.x;
292 mSRT.m[0][1] = mtx.m[0][1] * scale.y;
293 mSRT.m[1][1] = mtx.m[1][1] * scale.y;
294 mSRT.m[2][1] = mtx.m[2][1] * scale.y;
296 mSRT.m[0][2] = mtx.m[0][2] * scale.z;
297 mSRT.m[1][2] = mtx.m[1][2] * scale.z;
298 mSRT.m[2][2] = mtx.m[2][2] * scale.z;
300 mSRT.m[0][3] = mtx.m[0][3];
301 mSRT.m[1][3] = mtx.m[1][3];
302 mSRT.m[2][3] = mtx.m[2][3];
305 mAutoCalcScale = scale;
309 void SetPos(
const nw::math::VEC3& pos)
312 mSRT.SetTranslate(pos);
317 void SetPos(
const nw::math::VEC3& pos, f32 scale)
320 mRT.SetTranslate(pos);
322 mSRT.m[0][0] *= scale;
323 mSRT.m[1][1] *= scale;
324 mSRT.m[2][2] *= scale;
325 mAutoCalcScale.x = scale;
326 mAutoCalcScale.y = scale;
327 mAutoCalcScale.z = scale;
331 void SetPos(
const nw::math::VEC3& pos,
const nw::math::VEC3& scale)
334 mRT.SetTranslate(pos);
336 mSRT.m[0][0] *= scale.x;
337 mSRT.m[1][1] *= scale.y;
338 mSRT.m[2][2] *= scale.z;
339 mAutoCalcScale = scale;
343 void GetPos(nw::math::VEC3& pos)
const
345 pos.x = mSRT.m[0][3];
346 pos.y = mSRT.m[1][3];
347 pos.z = mSRT.m[2][3];
353 void Reset(
const nw::math::MTX34& matLW)
357 mAutoCalcScale = nw::math::VEC3(1.0f, 1.0f, 1.0f);
358 mEmitterScale = nw::math::VEC3(1.0f, 1.0f, 1.0f);
359 mEmissionParticleScale = nw::math::VEC2(1.0f, 1.0f);
360 mParticlScaleForCalc.x = 1.0f;
361 mParticlScaleForCalc.y = 1.0f;
364 mParticlScale.x = mParticlScale.y = 1.0f;
365 mColor.r = mColor.g = mColor.b = mColor.a = 1.0f;
366 mFigureVel = mDirectionalVel = mRandomVel = 1.0f;
367 mVelAdd.x = mVelAdd.y = mVelAdd.z = 0.0f;
373 mNumParticleEmissionPoint = 0;
375 mDrawPriority = EFT_DEFAULT_DRAW_PRIORITY;
378 mInitialRoate.Set(0.0f, 0.0f, 0.0f);
380 for (u32 i = 0; i < EFT_EMITTER_INSET_NUM; ++i)
401 mParticlScale.x = mParticlScale.y = scale;
407 mParticlScale.x = scaleX;
408 mParticlScale.y = scaleY;
414 mParticlScale = scale;
420 return mParticlScale;
425 mEmissionParticleScale.x = mEmissionParticleScale.y = scale;
430 mEmissionParticleScale.x = scaleX;
431 mEmissionParticleScale.y = scaleY;
436 mEmissionParticleScale = scale;
441 return mEmissionParticleScale;
446 mEmitterScale = scale;
451 return mEmitterScale;
456 return mParticlScaleForCalc;
471 void SetColor(
const nw::ut::FloatColor& color)
483 mFigureVel = velScale;
493 mDirectionalVel = velScale;
498 return mDirectionalVel;
503 mRandomVel = velScale;
511 void SetAddVel(
const nw::math::VEC3& velAdd)
538
539
540
541
542
566 return &mController[ix];
573 mNumParticleEmissionPoint = numPoint;
574 mParticleEmissionPoints = points;
579 mStartFrame = isManual ? 0x7fffffff : 0;
613 mController[emitterID].SetStopDraw(isStopDraw);
620 return mRuntimeUserData;
625 mRuntimeUserData = data;
677 mParticlScaleForCalc.x = mParticlScale.x * mAutoCalcScale.x;
678 mParticlScaleForCalc.y = mParticlScale.y * mAutoCalcScale.y;
687static_assert(
sizeof(
EmitterSet) == 0x294,
"nw::eft::EmitterSet size mismatch");
void SetFollowType(PtclFollowType followType)
Definition eft_EmitterSet.cpp:7
f32 mEmissionRatio
Definition eft_EmitterSet.h:106
void SetEmitterColor0(const nw::ut::FloatColor &color)
Definition eft_EmitterSet.cpp:12
EmitterInstance * mEmitter
Definition eft_EmitterSet.h:110
void SetEmissionRatio(s32 ratio)
DrawViewFlag mDrawViewFlag
Definition eft_EmitterSet.h:109
DrawViewFlag GetDrawViewFlag() const
static s32 F32ToScale(f32 val)
void SetEmissionInterval(s32 ratio)
f32 mLife
Definition eft_EmitterSet.h:108
f32 mEmissionInterval
Definition eft_EmitterSet.h:107
void SetVisible(bool isVisible)
void SetViewFlag(DrawViewFlag flag)
void SetStopDraw(bool isStopDraw)
void SetEmitterColor1(const nw::ut::FloatColor &color)
Definition eft_EmitterSet.cpp:19
void SetParticleScale(const nw::math::VEC2 &scale)
void SetInitRotate(const nw::math::VEC3 &rot)
s32 GetEmitterSetID() const
void UpdateEmitterFromResInfo()
void SetSystem(System *sys)
EmitterController * GetEmitterController(s32 ix)
void SetStopCalc(bool isStopCalc)
Definition eft_EmitterSet.cpp:139
bool IsFadeRequest() const
void SetEmissionParticleScale(f32 scaleX, f32 scaleY)
void SetMtx(const nw::math::MTX34 &mtx)
Definition eft_EmitterSet.cpp:44
u8 _28e[EFT_CPU_CORE_MAX]
Definition eft_EmitterSet.h:673
const EmitterController * GetAliveEmitterController(s32 ix)
u8 GetUserDataNum1() const
nw::math::VEC3 mAutoCalcScale
Definition eft_EmitterSet.h:645
void SetStopDraw(bool isStopDraw)
Definition eft_EmitterSet.cpp:144
s32 GetStartFrame() const
nw::math::MTX34 & GetSRTMatrix()
void SetColor(f32 r, f32 g, f32 b)
s32 GetNumAliveEmitter() const
f32 mDirectionalVel
Definition eft_EmitterSet.h:654
void Kill()
Definition eft_EmitterSet.cpp:102
nw::math::VEC3 mDirectional
Definition eft_EmitterSet.h:657
f32 GetDirectionalVel() const
System * mSystem
Definition eft_EmitterSet.h:631
f32 GetAllDirectionalVel() const
nw::math::VEC2 mEmissionParticleScale
Definition eft_EmitterSet.h:648
u32 mDrawPathFlag
Definition eft_EmitterSet.h:641
u16 GetUserDataBit() const
nw::math::MTX34 mSRT
Definition eft_EmitterSet.h:643
bool mIsStopCalc
Definition eft_EmitterSet.h:668
s32 GetEmitterCounter(s32 emitterID)
const char * GetEmitterSetName() const
void SetEmissionParticleScale(const nw::math::VEC2 &scale)
nw::math::VEC2 mParticlScaleForCalc
Definition eft_EmitterSet.h:649
bool mIsSetDirectional
Definition eft_EmitterSet.h:667
s32 mNumParticleEmissionPoint
Definition eft_EmitterSet.h:660
void SetColor(const nw::ut::FloatColor &color)
EmitterController mController[EFT_EMITTER_INSET_NUM]
Definition eft_EmitterSet.h:636
s32 mNumEmitterFirst
Definition eft_EmitterSet.h:633
void SetStartFrame(s32 frame)
void SetRandomSeed(u32 seed)
Definition eft_EmitterSet.cpp:149
const EmitterInstance * GetAliveEmitter(u32 idx)
Definition eft_EmitterSet.cpp:26
const nw::math::VEC3 & GetEmitterScale() const
void SetPos(const nw::math::VEC3 &pos)
void SetParticleEmissionPoints(s32 numPoint, nw::math::VEC3 *points)
void SetParticleScale(f32 scale)
void SetEmissionParticleScale(f32 scale)
bool mIsStopDraw
Definition eft_EmitterSet.h:669
s32 GetEmitterCounter(const char *emitterName)
EmitterSet * mNext
Definition eft_EmitterSet.h:663
bool IsHaveInfinityEmitter() const
u32 mRuntimeUserData
Definition eft_EmitterSet.h:639
void Reset(const nw::math::MTX34 &matLW)
nw::ut::FloatColor mColor
Definition eft_EmitterSet.h:652
void GetPos(nw::math::VEC3 &pos) const
nw::math::VEC3 * mParticleEmissionPoints
Definition eft_EmitterSet.h:661
void SetManualParticleEmission(bool isManual)
EmitterInstance * mInstance[EFT_EMITTER_INSET_NUM]
Definition eft_EmitterSet.h:635
s32 mResourceID
Definition eft_EmitterSet.h:637
const nw::math::VEC2 & GetEmissionParticleScale() const
bool IsStopCalcAndDraw() const
u32 mEmitterCreateID
Definition eft_EmitterSet.h:634
void SetStopCalcAndDraw(bool isStopCalcAndDraw)
s32 GetResourceID() const
void SetPos(const nw::math::VEC3 &pos, const nw::math::VEC3 &scale)
void KillInfinityEmitter()
void SetDirectionalVel(f32 velScale)
bool mIsHaveInfinityEmitter
Definition eft_EmitterSet.h:670
u8 GetUserDataNum2() const
void DisableDirectional()
nw::math::VEC2 mParticlScale
Definition eft_EmitterSet.h:647
void SetAddVel(const nw::math::VEC3 &velAdd)
void SetMtxFast(const nw::math::MTX34 &mtx, f32 scale)
void SetPos(const nw::math::VEC3 &pos, f32 scale)
void SetRuntimeUserData(u32 data)
const nw::ut::FloatColor & GetColor() const
void ForceCalc(s32 numLoop)
Definition eft_EmitterSet.cpp:107
void SetDrawPriority(u8 priority)
void SetMtxFast(const nw::math::MTX34 &mtx, const nw::math::VEC3 &scale)
void SetStopDraw(u32 emitterID, bool isStopDraw)
void updateParticleScale_()
s32 mGroupID
Definition eft_EmitterSet.h:640
void EmitParticle(const nw::math::VEC3 &pos)
void SetRandomVel(f32 velScale)
nw::math::VEC3 mInitialRoate
Definition eft_EmitterSet.h:659
EmitterSet * mPrev
Definition eft_EmitterSet.h:664
s32 mStartFrame
Definition eft_EmitterSet.h:658
s32 GetNumEmitter() const
void SetDirectional(const nw::math::VEC3 &dir)
const nw::math::VEC3 & GetVelAdd() const
nw::math::MTX34 mRT
Definition eft_EmitterSet.h:644
bool IsLoopEffect() const
f32 mFigureVel
Definition eft_EmitterSet.h:653
void SetEmitterScale(const nw::math::VEC3 &scale)
bool IsSetDirectional() const
s32 mNumEmitter
Definition eft_EmitterSet.h:632
const nw::math::VEC2 & GetParticleScale() const
nw::math::VEC3 mVelAdd
Definition eft_EmitterSet.h:656
void SetAllDirectionalVel(f32 velScale)
u8 mDrawPriority
Definition eft_EmitterSet.h:672
bool mFadeRequest
Definition eft_EmitterSet.h:666
const nw::math::VEC3 & GetDirectional() const
s32 GetNumCreatedEmitter() const
nw::math::MTX34 & GetRTMatrix()
const nw::math::VEC2 & GetParticleScaleForCalc() const
u32 GetRuntimeUserData() const
f32 mRandomVel
Definition eft_EmitterSet.h:655
EmitterSet * GetNext() const
void SetParticleScale(f32 scaleX, f32 scaleY)
s32 mEmitterSetID
Definition eft_EmitterSet.h:638
void SetMtxFast(const nw::math::MTX34 &mtx)
u8 GetDrawPriority() const
nw::math::VEC3 mEmitterScale
Definition eft_EmitterSet.h:650