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