66 friend class ParticleManager;
70 ParticleManager* mParticleManager;
72 EvaluateStatus mEvalStatus;
82 virtual void SendClosing();
83 virtual void DestroyFunc();
85 ParticleManager* pManager,
88 Particle* pReferencePtcl);
90 void Draw_GetColor(
int layer, GXColor* pColorPri, GXColor* pColorSec);
92 void GetColor(
int layer,
int index, GXColor* pColor) {
93 pColor->r = mParameter.mColor[layer][index].r;
94 pColor->g = mParameter.mColor[layer][index].g;
95 pColor->b = mParameter.mColor[layer][index].b;
96 pColor->a = mParameter.mColor[layer][index].a;
100 f32 sx = mParameter.mSize.x * mParameter.mScale.x;
101 return mParticleManager->Draw_ModifyScaleX(
this, sx);
103 f32 Draw_GetSizeY() {
106 switch (mParticleManager->mResource->GetEmitterDrawSetting()->mFlags &
107 (EmitterDrawSetting::FLAG_XY_SAME_SIZE |
108 EmitterDrawSetting::FLAG_XY_SAME_SCALE)) {
110 case EmitterDrawSetting::FLAG_XY_SAME_SCALE: {
111 sy = mParameter.mSize.y * mParameter.mScale.x;
115 case EmitterDrawSetting::FLAG_XY_SAME_SIZE: {
116 sy = mParameter.mSize.x * mParameter.mScale.y;
120 case (EmitterDrawSetting::FLAG_XY_SAME_SIZE |
121 EmitterDrawSetting::FLAG_XY_SAME_SCALE): {
122 sy = mParameter.mSize.x * mParameter.mScale.x;
127 sy = mParameter.mSize.y * mParameter.mScale.y;
132 return mParticleManager->Draw_ModifyScaleY(
this, sy);
136 *pRot = mParameter.mRotate;
138 if (mParameter.mRotateOffset[AXIS_X] > 0) {
139 pRot->x += NW4R_MATH_FIDX_TO_RAD(mParameter.mRotateOffset[AXIS_X]);
142 if (mParameter.mRotateOffset[AXIS_Y] > 0) {
143 pRot->y += NW4R_MATH_FIDX_TO_RAD(mParameter.mRotateOffset[AXIS_Y]);
146 if (mParameter.mRotateOffset[AXIS_Z] > 0) {
147 pRot->z += NW4R_MATH_FIDX_TO_RAD(mParameter.mRotateOffset[AXIS_Z]);
150 mParticleManager->Draw_ModifyRotate(
this, pRot);
153 int Draw_GetTextureScaleS(
int layer)
const {
156 if (GetTextureWrapS(layer) == GX_MIRROR) {
161 (mParameter.mTextureReverse >> (layer * NUM_OF_TEX_REVERSE) &
164 if (
static_cast<ulong
>(reverse) == TEX_REVERSE_S ||
165 static_cast<ulong
>(reverse) == TEX_REVERSE_ST) {
171 int Draw_GetTextureScaleT(
int layer)
const {
174 if (GetTextureWrapT(layer) == GX_MIRROR) {
179 (mParameter.mTextureReverse >> (layer * NUM_OF_TEX_REVERSE) &
182 if (
static_cast<ulong
>(reverse) == TEX_REVERSE_T ||
183 static_cast<ulong
>(reverse) == TEX_REVERSE_ST) {
190 int Draw_GetTextureTransS(
int layer)
const {
194 (mParameter.mTextureReverse >> (layer * NUM_OF_TEX_REVERSE) &
197 if (
static_cast<ulong
>(reverse) == TEX_REVERSE_S ||
198 static_cast<ulong
>(reverse) == TEX_REVERSE_ST) {
202 if (GetTextureWrapS(layer) == GX_MIRROR) {
208 int Draw_GetTextureTransT(
int layer)
const {
212 (mParameter.mTextureReverse >> (layer * NUM_OF_TEX_REVERSE) &
215 if (
static_cast<ulong
>(reverse) == TEX_REVERSE_T ||
216 static_cast<ulong
>(reverse) == TEX_REVERSE_ST) {
220 if (GetTextureWrapT(layer) == GX_MIRROR) {
227 GXTexWrapMode GetTextureWrapS(
int layer)
const {
229 return static_cast<GXTexWrapMode
>(mParameter.mTextureWrap >>
230 (layer * NUM_OF_TEX_WRAP_ST + 0) & TEX_WRAP_MASK);
233 GXTexWrapMode GetTextureWrapT(
int layer)
const {
235 return static_cast<GXTexWrapMode
>(mParameter.mTextureWrap >>
236 (layer * NUM_OF_TEX_WRAP_ST + NUM_OF_TEX_WRAP_S) & TEX_WRAP_MASK);
241 *pDir = mParameter.mPosition - mParameter.mPrevPosition;
246 mParameter.mPosition.x += pDelta->x * mParameter.mMomentum;
247 mParameter.mPosition.y += pDelta->y * mParameter.mMomentum;
248 mParameter.mPosition.z += pDelta->z * mParameter.mMomentum;
249 return mParameter.mPosition;
253 enum TextureReverseFlag {
254 TEX_REVERSE_S = (1 << 0),
255 TEX_REVERSE_T = (1 << 1),
256 TEX_REVERSE_ST = TEX_REVERSE_S | TEX_REVERSE_T,
259 NUM_OF_TEX_REVERSE = 2
262 enum TextureWrapFlag {
263 TEX_WRAP_MASK = (1 << 0) | (1 << 1),
266 NUM_OF_TEX_WRAP_S = 2,
267 NUM_OF_TEX_WRAP_T = 2,
269 NUM_OF_TEX_WRAP_ST = 4