Beispiel #1
0
 public static void amEffectKill(AppMain.AMS_AME_ECB ecb)
 {
     for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
         if ((AppMain.AMD_AME_NODE_TYPE(runtime.node) & 65280) == 256 && (runtime.state & 32768) == 0)
         {
             if (runtime.spawn_runtime != null)
             {
                 runtime.spawn_runtime.state |= 16384;
             }
             runtime.state |= 32768;
             AppMain.AMS_AME_LIST next = runtime.child_head.next;
             for (AppMain.AMS_AME_LIST childTail = runtime.child_tail; next != childTail; next = next.next)
             {
                 ((AppMain.AMS_AME_RUNTIME)next).state |= 16384;
             }
             if (runtime.parent_runtime != null)
             {
                 AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtime);
                 --runtime.parent_runtime.work_num;
             }
         }
     }
 }
Beispiel #2
0
 private static AppMain.AMS_AME_RUNTIME _amCreateRuntimeParticle(
     AppMain.AMS_AME_CREATE_PARAM param)
 {
     AppMain.AMS_AME_RUNTIME runtime = AppMain._amAllocRuntime();
     runtime.ecb              = param.ecb;
     runtime.node             = param.node;
     runtime.state            = 16384;
     runtime.child_head.next  = runtime.child_tail;
     runtime.child_tail.prev  = runtime.child_head;
     runtime.work_head.next   = runtime.work_tail;
     runtime.work_tail.prev   = runtime.work_head;
     runtime.active_head.next = runtime.active_tail;
     runtime.active_tail.prev = runtime.active_head;
     for (AppMain.AMS_AME_NODE node = param.node.child; node != null; node = node.sibling)
     {
         if (AppMain.AMD_AME_IS_PARTICLE(node))
         {
             runtime.spawn_runtime = AppMain._amCreateRuntimeGroup(param.ecb, node);
             break;
         }
     }
     AppMain._amAddEntry(param.ecb, runtime);
     param.runtime = runtime;
     AppMain._amCreateParticle(param);
     return(runtime);
 }
Beispiel #3
0
 public static void amEffectDraw(AppMain.AMS_AME_ECB ecb, AppMain.NNS_TEXLIST texlist, uint state)
 {
     ecb.drawState = state;
     if (AppMain._am_enable_draw == 0 || ecb.entry_num <= 0)
     {
         return;
     }
     if ((double)ecb.bounding.radius > 0.0)
     {
         AppMain.NNS_VECTOR4D pPos = new AppMain.NNS_VECTOR4D();
         if (AppMain._amEffectFrustumCulling(pPos, AppMain._am_view_frustum, ecb.bounding) == 0)
         {
             return;
         }
         //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(pPos);
     }
     for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
         runtime.texlist = texlist;
         if (AppMain.AMD_AME_SUPER_CLASS_ID(runtime.node) == 512 && runtime.active_num != (short)0)
         {
             int num = AppMain._am_particle_func[(AppMain.AMD_AME_CLASS_ID(runtime.node) << 2) + 2]((object)runtime);
         }
     }
 }
Beispiel #4
0
 public static void amEffectSetTranslate(AppMain.AMS_AME_ECB ecb, AppMain.NNS_VECTOR4D translate)
 {
     AppMain.amVectorCopy(ecb.translate, translate);
     for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
         if ((runtime.state & 8192) != 0 && ((int)runtime.node.flag & 67108864) == 0)
         {
             if (runtime.work != null)
             {
                 AppMain.amVectorAdd(runtime.work.position, ((AppMain.AMS_AME_NODE_TR_ROT)runtime.node).translate, translate);
             }
             if ((int)runtime.work_num + (int)runtime.active_num != 0)
             {
                 AppMain.AMS_AME_RUNTIME_WORK next1 = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_head.next;
                 for (AppMain.AMS_AME_RUNTIME_WORK workTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_tail; next1 != workTail; next1 = (AppMain.AMS_AME_RUNTIME_WORK)next1.next)
                 {
                     AppMain.amVectorAdd(next1.position, ((AppMain.AMS_AME_NODE_TR_ROT)runtime.node).translate, translate);
                 }
                 AppMain.AMS_AME_RUNTIME_WORK next2 = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_head.next;
                 for (AppMain.AMS_AME_RUNTIME_WORK activeTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_tail; next2 != activeTail; next2 = (AppMain.AMS_AME_RUNTIME_WORK)next2.next)
                 {
                     AppMain.amVectorAdd(next2.position, ((AppMain.AMS_AME_NODE_TR_ROT)runtime.node).translate, translate);
                 }
             }
         }
     }
 }
Beispiel #5
0
 private void amEffectTranslate(AppMain.AMS_AME_ECB ecb, AppMain.NNS_VECTOR4D translate)
 {
     AppMain.amVectorAdd(ecb.translate, translate);
     for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
         if ((runtime.state & 8192) != 0 && ((int)runtime.node.flag & 67108864) == 0)
         {
             if (runtime.work != null)
             {
                 AppMain.amVectorAdd(runtime.work.position, translate);
             }
             if ((int)runtime.work_num + (int)runtime.active_num != 0)
             {
                 AppMain.AMS_AME_LIST next1 = runtime.work_head.next;
                 for (AppMain.AMS_AME_LIST workTail = runtime.work_tail; next1 != workTail; next1 = next1.next)
                 {
                     AppMain.amVectorAdd(((AppMain.AMS_AME_RUNTIME_WORK)next1).position, translate);
                 }
                 AppMain.AMS_AME_LIST next2 = runtime.active_head.next;
                 for (AppMain.AMS_AME_LIST activeTail = runtime.active_tail; next2 != activeTail; next2 = next2.next)
                 {
                     AppMain.amVectorAdd(((AppMain.AMS_AME_RUNTIME_WORK)next2).position, translate);
                 }
             }
         }
     }
 }
Beispiel #6
0
    private static uint _amEffectSetMaterial(
        AppMain.AMS_AME_RUNTIME runtime,
        ref int blend,
        int NodeBlend)
    {
        AppMain.AMS_AME_NODE node = runtime.node;
        uint num = 0;

        if (((int)node.flag & 1) != 0)
        {
            num |= 8389632U;
            switch (NodeBlend)
            {
            case 50:
                blend = 0;
                break;

            case 162:
                blend = 1;
                break;

            case 674:
                blend = 2;
                break;
            }
        }
        return(num);
    }
Beispiel #7
0
    public static AppMain.AMS_AME_RUNTIME _amCreateRuntimeEmitter(
        AppMain.AMS_AME_CREATE_PARAM param)
    {
        AppMain.AMS_AME_RUNTIME runtime = AppMain._amAllocRuntime();
        runtime.ecb              = param.ecb;
        runtime.node             = param.node;
        runtime.child_head.next  = runtime.child_tail;
        runtime.child_tail.prev  = runtime.child_head;
        runtime.work_head.next   = runtime.work_tail;
        runtime.work_tail.prev   = runtime.work_head;
        runtime.active_head.next = runtime.active_tail;
        runtime.active_tail.prev = runtime.active_head;
        AppMain._amAddEntry(param.ecb, runtime);
        runtime.work = AppMain._amAllocRuntimeWork();
        param.work   = runtime.work;
        int num = AppMain._am_emitter_func[(AppMain.AMD_AME_NODE_TYPE(param.node) & (int)byte.MaxValue) << 2]((object)param);

        for (AppMain.AMS_AME_NODE node = param.node.child; node != null; node = node.sibling)
        {
            if (!AppMain.AMD_AME_IS_FIELD(node))
            {
                AppMain.AMS_AME_RUNTIME runtimeGroup = AppMain._amCreateRuntimeGroup(param.ecb, node);
                AppMain._amConnectLinkToTail(runtime.child_tail, (AppMain.AMS_AME_LIST)runtimeGroup);
                ++runtime.child_num;
            }
        }
        return(runtime);
    }
Beispiel #8
0
 public static void _amCreateEmitter(AppMain.AMS_AME_CREATE_PARAM param)
 {
     AppMain.AMS_AME_RUNTIME runtimeEmitter = AppMain._amCreateRuntimeEmitter(param);
     runtimeEmitter.parent_runtime = param.runtime;
     AppMain._amConnectLinkToTail(runtimeEmitter.work_tail, (AppMain.AMS_AME_LIST)runtimeEmitter);
     ++runtimeEmitter.work_num;
     param.runtime = runtimeEmitter;
     param.node    = runtimeEmitter.node;
     param.work    = runtimeEmitter.work;
 }
Beispiel #9
0
 public void Clear()
 {
     this.ecb             = (AppMain.AMS_AME_ECB)null;
     this.runtime         = (AppMain.AMS_AME_RUNTIME)null;
     this.node            = (AppMain.AMS_AME_NODE)null;
     this.work            = (AppMain.AMS_AME_RUNTIME_WORK)null;
     this.position        = default;
     this.velocity        = default;
     this.parent_position = default;
     this.parent_velocity = default;
 }
Beispiel #10
0
 public static AppMain.AMS_AME_RUNTIME _amAllocRuntime()
 {
     AppMain.AMS_AME_RUNTIME amsAmeRuntime = AppMain._am_runtime_ref[AppMain._am_runtime_alloc];
     ++AppMain._am_runtime_alloc;
     if (AppMain._am_runtime_alloc >= 512)
     {
         AppMain._am_runtime_alloc = 0;
     }
     amsAmeRuntime.Clear();
     return(amsAmeRuntime);
 }
Beispiel #11
0
 public static void amEffectSetRotate(
     AppMain.AMS_AME_ECB ecb,
     ref AppMain.NNS_QUATERNION q,
     int offset)
 {
     ecb.rotate = q;
     for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
         if ((runtime.state & 8192) != 0 && ((int)runtime.node.flag & 134217728) == 0)
         {
             if (runtime.work != null)
             {
                 if (offset != 0)
                 {
                     AppMain.amQuatMulti(ref runtime.work.rotate[0], ref ((AppMain.AMS_AME_NODE_TR_ROT)runtime.node).rotate, ref q);
                 }
                 else
                 {
                     runtime.work.rotate[0] = q;
                 }
             }
             if ((int)runtime.work_num + (int)runtime.active_num != 0)
             {
                 AppMain.AMS_AME_RUNTIME_WORK next1 = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_head.next;
                 for (AppMain.AMS_AME_RUNTIME_WORK workTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_tail; next1 != workTail; next1 = (AppMain.AMS_AME_RUNTIME_WORK)next1.next)
                 {
                     if (offset != 0)
                     {
                         AppMain.amQuatMulti(ref next1.rotate[0], ref ((AppMain.AMS_AME_NODE_TR_ROT)runtime.node).rotate, ref q);
                     }
                     else
                     {
                         next1.rotate[0] = q;
                     }
                 }
                 AppMain.AMS_AME_RUNTIME_WORK next2 = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_head.next;
                 for (AppMain.AMS_AME_RUNTIME_WORK activeTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_tail; next2 != activeTail; next2 = (AppMain.AMS_AME_RUNTIME_WORK)next2.next)
                 {
                     if (offset != 0)
                     {
                         AppMain.amQuatMulti(ref next2.rotate[0], ref ((AppMain.AMS_AME_NODE_TR_ROT)runtime.node).rotate, ref q);
                     }
                     else
                     {
                         next2.rotate[0] = q;
                     }
                 }
             }
         }
     }
 }
Beispiel #12
0
    private static int _amEffectSetDrawMode(
        AppMain.AMS_AME_RUNTIME runtime,
        AppMain.AMS_PARAM_DRAW_PRIMITIVE param,
        int NodeBlend)
    {
        AppMain.AMS_AME_NODE node = runtime.node;
        int num = 0;

        param.ablend = num;
        param.aTest  = ((int)node.flag & 2) == 0 ? (short)0 : (short)1;
        param.zMask  = ((int)node.flag & 33554432) == 0 ? (short)0 : (short)1;
        param.zTest  = ((int)node.flag & 16777216) != 0 ? (short)1 : (short)0;
        if (((int)node.flag & 1) != 0)
        {
            num          = 1;
            param.ablend = num;
            switch (NodeBlend)
            {
            case 50:
                param.bldSrc  = 770;
                param.bldDst  = 771;
                param.bldMode = 32774;
                break;

            case 162:
                param.bldSrc  = 770;
                param.bldDst  = 1;
                param.bldMode = 32774;
                break;

            case 674:
                param.bldSrc  = 770;
                param.bldDst  = 1;
                param.bldMode = 32779;
                break;
            }
        }
        return(num);
    }
Beispiel #13
0
 public static void _amAddEntry(AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_RUNTIME runtime)
 {
     AppMain.AMS_AME_ENTRY amsAmeEntry = AppMain._am_entry_ref[AppMain._am_entry_alloc];
     ++AppMain._am_entry_alloc;
     if (AppMain._am_entry_alloc >= 512)
     {
         AppMain._am_entry_alloc = 0;
     }
     amsAmeEntry.runtime = runtime;
     if (ecb.entry_head == null)
     {
         ecb.entry_head   = amsAmeEntry;
         amsAmeEntry.prev = (AppMain.AMS_AME_LIST)null;
     }
     if (ecb.entry_tail != null)
     {
         amsAmeEntry.prev    = (AppMain.AMS_AME_LIST)ecb.entry_tail;
         ecb.entry_tail.next = (AppMain.AMS_AME_LIST)amsAmeEntry;
     }
     ecb.entry_tail   = amsAmeEntry;
     amsAmeEntry.next = (AppMain.AMS_AME_LIST)null;
     ++ecb.entry_num;
 }
Beispiel #14
0
 public static void _amEffectFinalize(AppMain.AMS_AME_ECB ecb)
 {
     for (AppMain.AMS_AME_ENTRY entry = ecb.entry_head; entry != null; entry = (AppMain.AMS_AME_ENTRY)entry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = entry.runtime;
         if (AppMain.AMD_AME_SUPER_CLASS_ID(runtime.node) == 256 && runtime.parent_runtime != null)
         {
             AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtime);
             --runtime.parent_runtime.work_num;
         }
         AppMain._amFreeRuntime(entry.runtime);
         AppMain._amDelEntry(ecb, entry);
     }
     ecb.prev.next = ecb.next;
     ecb.next.prev = ecb.prev;
     AppMain._am_ecb_ref[AppMain._am_ecb_free] = ecb;
     ++AppMain._am_ecb_free;
     if (AppMain._am_ecb_free < 128)
     {
         return;
     }
     AppMain._am_ecb_free = 0;
 }
Beispiel #15
0
 public new void Clear()
 {
     this.next           = (AppMain.AMS_AME_LIST)null;
     this.prev           = (AppMain.AMS_AME_LIST)null;
     this.state          = 0;
     this.amount         = 0.0f;
     this.count          = 0U;
     this.ecb            = (AppMain.AMS_AME_ECB)null;
     this.node           = (AppMain.AMS_AME_NODE)null;
     this.parent_runtime = (AppMain.AMS_AME_RUNTIME)null;
     this.spawn_runtime  = (AppMain.AMS_AME_RUNTIME)null;
     this.work           = (AppMain.AMS_AME_RUNTIME_WORK)null;
     this.child_head.Clear();
     this.child_tail.Clear();
     this.child_num = 0;
     this.work_head.Clear();
     this.work_tail.Clear();
     this.active_head.Clear();
     this.active_tail.Clear();
     this.work_num   = (short)0;
     this.active_num = (short)0;
     this.texlist    = (AppMain.NNS_TEXLIST)null;
 }
Beispiel #16
0
 public static AppMain.AMS_AME_RUNTIME _amCreateRuntimeGroup(
     AppMain.AMS_AME_ECB ecb,
     AppMain.AMS_AME_NODE node)
 {
     AppMain.AMS_AME_RUNTIME runtime = AppMain._amAllocRuntime();
     runtime.ecb              = ecb;
     runtime.node             = node;
     runtime.child_head.next  = runtime.child_tail;
     runtime.child_tail.prev  = runtime.child_head;
     runtime.work_head.next   = runtime.work_tail;
     runtime.work_tail.prev   = runtime.work_head;
     runtime.active_head.next = runtime.active_tail;
     runtime.active_tail.prev = runtime.active_head;
     for (AppMain.AMS_AME_NODE node1 = node.child; node1 != null; node1 = node1.sibling)
     {
         if (AppMain.AMD_AME_IS_PARTICLE(node1))
         {
             runtime.spawn_runtime = AppMain._amCreateRuntimeGroup(ecb, node1);
             break;
         }
     }
     AppMain._amAddEntry(ecb, runtime);
     return(runtime);
 }
Beispiel #17
0
 public static void _amFreeRuntime(AppMain.AMS_AME_RUNTIME runtime)
 {
     if (runtime.work != null)
     {
         AppMain.amEffectFreeRuntimeWork(runtime.work);
     }
     AppMain.AMS_AME_RUNTIME_WORK next1 = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_head.next;
     for (AppMain.AMS_AME_RUNTIME_WORK workTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_tail; next1 != workTail; next1 = (AppMain.AMS_AME_RUNTIME_WORK)next1.next)
     {
         AppMain.amEffectFreeRuntimeWork(next1);
     }
     AppMain.AMS_AME_RUNTIME_WORK next2 = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_head.next;
     for (AppMain.AMS_AME_RUNTIME_WORK activeTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_tail; next2 != activeTail; next2 = (AppMain.AMS_AME_RUNTIME_WORK)next2.next)
     {
         AppMain.amEffectFreeRuntimeWork(next2);
     }
     AppMain._am_runtime_ref[AppMain._am_runtime_free] = runtime;
     ++AppMain._am_runtime_free;
     if (AppMain._am_runtime_free < 512)
     {
         return;
     }
     AppMain._am_runtime_free = 0;
 }
Beispiel #18
0
 private void amEffectRotate(AppMain.AMS_AME_ECB ecb, ref AppMain.NNS_QUATERNION q)
 {
     AppMain.amQuatMulti(ref ecb.rotate, ref ecb.rotate, ref q);
     for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
     {
         AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
         if ((runtime.state & 8192) != 0 && ((int)runtime.node.flag & 134217728) == 0)
         {
             if (runtime.work != null)
             {
                 AppMain.amQuatMulti(ref runtime.work.rotate[0], ref runtime.work.rotate[0], ref q);
             }
             if ((int)runtime.work_num + (int)runtime.active_num != 0)
             {
                 AppMain.AMS_AME_LIST next1 = runtime.work_head.next;
                 for (AppMain.AMS_AME_LIST workTail = runtime.work_tail; next1 != workTail; next1 = next1.next)
                 {
                     AppMain.AMS_AME_RUNTIME_WORK amsAmeRuntimeWork = (AppMain.AMS_AME_RUNTIME_WORK)next1;
                     if (runtime.work != null)
                     {
                         AppMain.amQuatMulti(ref amsAmeRuntimeWork.rotate[0], ref runtime.work.rotate[0], ref q);
                     }
                 }
                 AppMain.AMS_AME_LIST next2 = runtime.active_head.next;
                 for (AppMain.AMS_AME_LIST activeTail = runtime.active_tail; next2 != activeTail; next2 = next2.next)
                 {
                     AppMain.AMS_AME_RUNTIME_WORK amsAmeRuntimeWork = (AppMain.AMS_AME_RUNTIME_WORK)next2;
                     if (runtime.work != null)
                     {
                         AppMain.amQuatMulti(ref amsAmeRuntimeWork.rotate[0], ref runtime.work.rotate[0], ref q);
                     }
                 }
             }
         }
     }
 }
Beispiel #19
0
    public static int _amDrawModel(object r)
    {
        AppMain.AMS_AME_RUNTIME    runtime = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_MODEL node    = (AppMain.AMS_AME_NODE_MODEL)runtime.node;
        AppMain.AMS_AME_ECB        ecb     = runtime.ecb;
        AppMain.NNS_RGBA           color   = new AppMain.NNS_RGBA();
        int blend = -1;

        if (runtime.ecb.pObj == null)
        {
            return(0);
        }
        uint  drawflag = AppMain._amEffectSetMaterial(runtime, ref blend, node.blend);
        float zBias    = node.z_bias;

        AppMain.SNNS_VECTOR4D pDst1;
        AppMain.amVectorSet(out pDst1, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22);
        AppMain.AMS_AME_LIST activeTail = runtime.active_tail;
        AppMain.AMS_AME_LIST next       = runtime.active_head.next;
        AppMain.NNS_MATRIX   nnsMatrix  = AppMain.GlobalPool <AppMain.NNS_MATRIX> .Alloc();

        AppMain.NNS_VECTOR nnsVector = new AppMain.NNS_VECTOR();
        AppMain.AMS_AME_RUNTIME_WORK_MODEL runtimeWorkModel;
        for (; next != activeTail; next = runtimeWorkModel.next)
        {
            runtimeWorkModel = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)(AppMain.AMS_AME_RUNTIME_WORK) next;
            AppMain.amMatrixPush();
            AppMain.SNNS_VECTOR4D pDst2;
            AppMain.amVectorAdd(out pDst2, runtimeWorkModel.position, ref pDst1);
            AppMain.NNS_QUATERNION rotate = runtimeWorkModel.rotate;
            AppMain.amQuatMultiMatrix(ref rotate, ref pDst2);
            runtimeWorkModel.rotate = rotate;
            float scrollU = runtimeWorkModel.scroll_u;
            float scrollV = runtimeWorkModel.scroll_v;
            uint  num     = drawflag | 268435456U;
            if ((double)scrollU >= 1.0)
            {
                scrollU -= (float)(int)scrollU;
            }
            else
            {
                while ((double)scrollU < 0.0)
                {
                    ++scrollU;
                }
            }
            if ((double)scrollV >= 1.0)
            {
                scrollV -= (float)(int)scrollV;
            }
            else
            {
                while ((double)scrollV < 0.0)
                {
                    ++scrollV;
                }
            }
            drawflag = num | 3145728U;
            color.a  = (float)runtimeWorkModel.color.a * 0.003921569f;
            color.r  = (float)runtimeWorkModel.color.r * 0.003921569f;
            color.g  = (float)runtimeWorkModel.color.g * 0.003921569f;
            color.b  = (float)runtimeWorkModel.color.b * 0.003921569f;
            AppMain.NNS_MATRIX current = AppMain.amMatrixGetCurrent();
            nnsMatrix.Assign(current);
            AppMain.nnScaleMatrix(nnsMatrix, nnsMatrix, runtimeWorkModel.scale.x, runtimeWorkModel.scale.y, runtimeWorkModel.scale.z);
            AppMain.nnCopyMatrix(current, nnsMatrix);
            nnsVector.x = runtimeWorkModel.scale.x;
            nnsVector.y = runtimeWorkModel.scale.y;
            nnsVector.z = runtimeWorkModel.scale.z;
            AppMain.amDrawObjectSetMaterial(runtime.ecb.drawObjState, ecb.pObj, runtime.texlist, nnsVector, ref color, scrollU, scrollV, blend, drawflag);
            runtimeWorkModel.set_scale(nnsVector);
            AppMain.amMatrixPop();
        }
        //AppMain.GlobalPool<AppMain.NNS_VECTOR>.Release(nnsVector);
        AppMain.GlobalPool <AppMain.NNS_MATRIX> .Release(nnsMatrix);

        return(0);
    }
Beispiel #20
0
    public static int _amDrawSprite(object r)
    {
        AppMain.AMS_AME_RUNTIME          runtime    = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_SPRITE      node       = (AppMain.AMS_AME_NODE_SPRITE)runtime.node;
        AppMain.AMS_AME_LIST             next       = runtime.active_head.next;
        AppMain.AMS_AME_LIST             activeTail = runtime.active_tail;
        AppMain.AMS_PARAM_DRAW_PRIMITIVE setParam   = AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Alloc();

        int num1 = AppMain._amEffectSetDrawMode(runtime, setParam, node.blend);

        AppMain.SNNS_VECTOR snnsVector1 = new AppMain.SNNS_VECTOR();
        AppMain.SNNS_VECTOR snnsVector2 = new AppMain.SNNS_VECTOR();
        AppMain.SNNS_VECTOR snnsVector3 = new AppMain.SNNS_VECTOR();
        float zBias = node.z_bias;

        AppMain.amVectorSet(ref snnsVector1, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22);
        AppMain.amVectorSet(ref snnsVector2, AppMain._am_ef_worldViewMtx.M10, AppMain._am_ef_worldViewMtx.M11, AppMain._am_ef_worldViewMtx.M12);
        AppMain.amVectorSet(ref snnsVector3, AppMain._am_ef_worldViewMtx.M00, AppMain._am_ef_worldViewMtx.M01, AppMain._am_ef_worldViewMtx.M02);
        AppMain.SNNS_VECTOR snnsVector4 = new AppMain.SNNS_VECTOR();
        AppMain.SNNS_VECTOR snnsVector5 = new AppMain.SNNS_VECTOR();
        AppMain.SNNS_VECTOR snnsVector6 = new AppMain.SNNS_VECTOR();
        if (((int)node.flag & 4096) != 0)
        {
            AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(6 * (int)runtime.active_num);
            AppMain.NNS_PRIM3D_PCT[]     buffer            = nnsPriM3DPctArray.buffer;
            int   offset = nnsPriM3DPctArray.offset;
            float num2   = 0.0f;
            for (; next != activeTail; next = next.next)
            {
                AppMain.AMS_AME_RUNTIME_WORK_SPRITE runtimeWorkSprite = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)(AppMain.AMS_AME_RUNTIME_WORK) next;
                float pSn;
                float pCs;
                AppMain.amSinCos(runtimeWorkSprite.twist, out pSn, out pCs);
                AppMain.amVectorGetAverage(ref snnsVector5, ref snnsVector3, ref snnsVector2, pCs, -pSn);
                AppMain.amVectorGetAverage(ref snnsVector6, ref snnsVector3, ref snnsVector2, pSn, pCs);
                AppMain.nnScaleVector(ref snnsVector5, ref snnsVector5, runtimeWorkSprite.size.x);
                AppMain.nnScaleVector(ref snnsVector6, ref snnsVector6, runtimeWorkSprite.size.y);
                AppMain.amVectorAdd(ref snnsVector4, runtimeWorkSprite.position, ref snnsVector1);
                num2 = AppMain.nnDistanceVector(ref snnsVector4, AppMain._am_ef_camPos);
                AppMain.nnSubtractVector(ref buffer[offset].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnAddVector(ref buffer[offset].Pos, ref buffer[offset].Pos, ref snnsVector6);
                AppMain.nnAddVector(ref buffer[offset + 1].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnAddVector(ref buffer[offset + 1].Pos, ref buffer[offset + 1].Pos, ref snnsVector6);
                AppMain.nnSubtractVector(ref buffer[offset + 2].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnSubtractVector(ref buffer[offset + 2].Pos, ref buffer[offset + 2].Pos, ref snnsVector6);
                AppMain.nnAddVector(ref buffer[offset + 5].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnSubtractVector(ref buffer[offset + 5].Pos, ref buffer[offset + 5].Pos, ref snnsVector6);
                buffer[offset + 5].Col   = AppMain.AMD_RGBA8888(runtimeWorkSprite.color.r, runtimeWorkSprite.color.g, runtimeWorkSprite.color.b, runtimeWorkSprite.color.a);
                buffer[offset].Col       = buffer[offset + 1].Col = buffer[offset + 2].Col = buffer[offset + 5].Col;
                buffer[offset].Tex.u     = runtimeWorkSprite.st.x;
                buffer[offset].Tex.v     = runtimeWorkSprite.st.y;
                buffer[offset + 1].Tex.u = runtimeWorkSprite.st.z;
                buffer[offset + 1].Tex.v = runtimeWorkSprite.st.y;
                buffer[offset + 2].Tex.u = runtimeWorkSprite.st.x;
                buffer[offset + 2].Tex.v = runtimeWorkSprite.st.w;
                buffer[offset + 5].Tex.u = runtimeWorkSprite.st.z;
                buffer[offset + 5].Tex.v = runtimeWorkSprite.st.w;
                buffer[offset + 3]       = buffer[offset + 1];
                buffer[offset + 4]       = buffer[offset + 2];
                offset += 6;
            }
            setParam.format3D = 4;
            setParam.type     = 0;
            setParam.vtxPCT3D = nnsPriM3DPctArray;
            setParam.texlist  = runtime.texlist;
            setParam.texId    = (int)node.texture_id;
            setParam.count    = 6 * (int)runtime.active_num;
            setParam.ablend   = num1;
            setParam.sortZ    = num2;
            AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam);
        }
        else
        {
            AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray1 = AppMain.amDrawAlloc_NNS_PRIM3D_PC(6 * (int)runtime.active_num);
            int index = 0;
            AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray2 = nnsPriM3DPcArray1;
            float num2 = 0.0f;
            for (; next != activeTail; next = next.next)
            {
                AppMain.AMS_AME_RUNTIME_WORK_SPRITE runtimeWorkSprite = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)(AppMain.AMS_AME_RUNTIME_WORK) next;
                float pSn;
                float pCs;
                AppMain.amSinCos(runtimeWorkSprite.twist, out pSn, out pCs);
                AppMain.amVectorGetAverage(ref snnsVector5, ref snnsVector3, ref snnsVector2, pCs, -pSn);
                AppMain.amVectorGetAverage(ref snnsVector6, ref snnsVector3, ref snnsVector2, pSn, pCs);
                AppMain.nnScaleVector(ref snnsVector5, ref snnsVector5, runtimeWorkSprite.size.x);
                AppMain.nnScaleVector(ref snnsVector6, ref snnsVector6, runtimeWorkSprite.size.y);
                AppMain.amVectorAdd(ref snnsVector4, runtimeWorkSprite.position, ref snnsVector1);
                num2 = AppMain.nnDistanceVector(ref snnsVector4, AppMain._am_ef_camPos);
                AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnAddVector(ref nnsPriM3DPcArray1[index].Pos, ref nnsPriM3DPcArray1[index].Pos, ref snnsVector6);
                AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 1].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 1].Pos, ref nnsPriM3DPcArray1[index + 1].Pos, ref snnsVector6);
                AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 2].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 2].Pos, ref nnsPriM3DPcArray1[index + 2].Pos, ref snnsVector6);
                AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 5].Pos, ref snnsVector4, ref snnsVector5);
                AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 5].Pos, ref nnsPriM3DPcArray1[index + 5].Pos, ref snnsVector6);
                nnsPriM3DPcArray1[index + 5].Col = AppMain.AMD_RGBA8888(runtimeWorkSprite.color.r, runtimeWorkSprite.color.g, runtimeWorkSprite.color.b, runtimeWorkSprite.color.a);
                nnsPriM3DPcArray1[index].Col     = nnsPriM3DPcArray1[index + 1].Col = nnsPriM3DPcArray1[index + 2].Col = nnsPriM3DPcArray1[index + 5].Col;
                nnsPriM3DPcArray1[index + 3]     = nnsPriM3DPcArray1[index + 1];
                nnsPriM3DPcArray1[index + 4]     = nnsPriM3DPcArray1[index + 2];
                index += 6;
            }
            setParam.format3D = 2;
            setParam.type     = 0;
            setParam.vtxPC3D  = nnsPriM3DPcArray2;
            setParam.texlist  = runtime.texlist;
            setParam.texId    = -1;
            setParam.count    = 6 * (int)runtime.active_num;
            setParam.ablend   = num1;
            setParam.sortZ    = num2;
            AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam);
        }
        AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Release(setParam);

        return(0);
    }
Beispiel #21
0
    public static void _amCreateSpawnParticle(
        AppMain.AMS_AME_RUNTIME runtime,
        AppMain.AMS_AME_RUNTIME_WORK work)
    {
        AppMain.NNS_VECTOR4D pVec = new AppMain.NNS_VECTOR4D();
        AppMain.amVectorInit(pVec);
        AppMain.AMS_AME_CREATE_PARAM amsAmeCreateParam = AppMain.GlobalPool <AppMain.AMS_AME_CREATE_PARAM> .Alloc();

        amsAmeCreateParam.ecb             = runtime.ecb;
        amsAmeCreateParam.runtime         = runtime.spawn_runtime;
        amsAmeCreateParam.node            = runtime.spawn_runtime.node;
        amsAmeCreateParam.position        = pVec;
        amsAmeCreateParam.velocity        = pVec;
        amsAmeCreateParam.parent_position = work.position;
        amsAmeCreateParam.parent_velocity = work.velocity;
        if ((runtime.state & 8192) != 0)
        {
            runtime.spawn_runtime.state |= 8192;
        }
        AppMain._amCreateParticle(amsAmeCreateParam);
        if (AppMain.AMD_AME_NODE_TYPE(runtime.node) == AppMain.AMD_AME_NODE_TYPE(amsAmeCreateParam.node))
        {
            AppMain.AMS_AME_NODE node1 = runtime.node;
            AppMain.AMS_AME_NODE node2 = amsAmeCreateParam.node;
            switch (AppMain.AMD_AME_NODE_TYPE(amsAmeCreateParam.node))
            {
            case 512:
                AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE workSimpleSprite = (AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE)work;
                AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE work1            = (AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE)amsAmeCreateParam.work;
                if (((int)node1.flag & (int)node2.flag & 131072) != 0 && (((int)workSimpleSprite.flag ^ (int)work1.flag) & 8) != 0)
                {
                    work1.flag ^= 8U;
                    work1.set_st(work1.st.z, work1.st.y, work1.st.x, work1.st.w);
                }
                if (((int)node1.flag & (int)node2.flag & 262144) != 0 && (((int)workSimpleSprite.flag ^ (int)work1.flag) & 16) != 0)
                {
                    work1.flag ^= 16U;
                    work1.set_st(work1.st.x, work1.st.w, work1.st.z, work1.st.y);
                    break;
                }
                break;

            case 513:
                AppMain.AMS_AME_RUNTIME_WORK_SPRITE runtimeWorkSprite = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)work;
                AppMain.AMS_AME_RUNTIME_WORK_SPRITE work2             = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)amsAmeCreateParam.work;
                if (((int)node1.flag & (int)node2.flag & 4) != 0)
                {
                    if (((int)runtimeWorkSprite.flag & 4) != 0)
                    {
                        work2.flag |= 4U;
                    }
                    else
                    {
                        work2.flag &= 4294967291U;
                    }
                }
                if (((int)node1.flag & (int)node2.flag & 131072) != 0 && (((int)runtimeWorkSprite.flag ^ (int)work2.flag) & 8) != 0)
                {
                    work2.flag ^= 8U;
                    work2.set_st(work2.st.z, work2.st.y, work2.st.x, work2.st.w);
                }
                if (((int)node1.flag & (int)node2.flag & 262144) != 0 && (((int)runtimeWorkSprite.flag ^ (int)work2.flag) & 16) != 0)
                {
                    work2.flag ^= 16U;
                    work2.set_st(work2.st.x, work2.st.w, work2.st.z, work2.st.y);
                    break;
                }
                break;

            case 514:
                AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)work;
                AppMain.AMS_AME_RUNTIME_WORK_LINE work3 = (AppMain.AMS_AME_RUNTIME_WORK_LINE)amsAmeCreateParam.work;
                if (((int)node1.flag & (int)node2.flag & 131072) != 0 && (((int)ameRuntimeWorkLine.flag ^ (int)work3.flag) & 8) != 0)
                {
                    work3.flag ^= 8U;
                    work3.set_st(work3.st.z, work3.st.y, work3.st.x, work3.st.w);
                }
                if (((int)node1.flag & (int)node2.flag & 262144) != 0 && (((int)ameRuntimeWorkLine.flag ^ (int)work3.flag) & 16) != 0)
                {
                    work3.flag ^= 16U;
                    work3.set_st(work3.st.x, work3.st.w, work3.st.z, work3.st.y);
                    break;
                }
                break;

            case 515:
                AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)work;
                AppMain.AMS_AME_RUNTIME_WORK_PLANE work4            = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)amsAmeCreateParam.work;
                if (((int)node1.flag & (int)node2.flag & 131072) != 0 && (((int)runtimeWorkPlane.flag ^ (int)work4.flag) & 8) != 0)
                {
                    work4.flag ^= 8U;
                    work4.set_st(work4.st.z, work4.st.y, work4.st.x, work4.st.w);
                }
                if (((int)node1.flag & (int)node2.flag & 262144) != 0 && (((int)runtimeWorkPlane.flag ^ (int)work4.flag) & 16) != 0)
                {
                    work4.flag ^= 16U;
                    work4.set_st(work4.st.x, work4.st.w, work4.st.z, work4.st.y);
                    break;
                }
                break;
            }
        }
        AppMain.GlobalPool <AppMain.AMS_AME_CREATE_PARAM> .Release(amsAmeCreateParam);

        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(pVec);
    }
Beispiel #22
0
    public static int _amDrawPlane(object r)
    {
        AppMain.AMS_AME_RUNTIME          runtime    = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_PLANE       node       = (AppMain.AMS_AME_NODE_PLANE)runtime.node;
        AppMain.AMS_AME_LIST             next       = runtime.active_head.next;
        AppMain.AMS_AME_LIST             activeTail = runtime.active_tail;
        AppMain.AMS_PARAM_DRAW_PRIMITIVE setParam   = AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Alloc();

        int num1 = AppMain._amEffectSetDrawMode(runtime, setParam, node.blend);

        AppMain.SNNS_VECTOR4D pDst = new AppMain.SNNS_VECTOR4D();
        float zBias = node.z_bias;

        AppMain.amVectorSet(out pDst, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22);
        AppMain.SNNS_VECTOR snnsVector = new AppMain.SNNS_VECTOR();
        if (((int)node.flag & 4096) != 0)
        {
            AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(6 * (int)runtime.active_num);
            AppMain.NNS_PRIM3D_PCT[]     buffer            = nnsPriM3DPctArray.buffer;
            int   offset = nnsPriM3DPctArray.offset;
            float num2   = 0.0f;
            for (; next != activeTail; next = next.next)
            {
                AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)(AppMain.AMS_AME_RUNTIME_WORK) next;
                AppMain.amMatrixPush();
                AppMain.NNS_MATRIX current = AppMain.amMatrixGetCurrent();
                float x = runtimeWorkPlane.size.x;
                float y = runtimeWorkPlane.size.y;
                AppMain.amVectorAdd(ref snnsVector, runtimeWorkPlane.position, ref pDst);
                AppMain.NNS_QUATERNION rotate = runtimeWorkPlane.rotate;
                AppMain.amQuatMultiMatrix(ref rotate, ref snnsVector);
                runtimeWorkPlane.rotate = rotate;
                num2 = AppMain.nnDistanceVector(ref snnsVector, AppMain._am_ef_camPos);
                buffer[offset].Pos.Assign(-x, y, 0.0f);
                buffer[offset + 1].Pos.Assign(x, y, 0.0f);
                buffer[offset + 2].Pos.Assign(-x, -y, 0.0f);
                buffer[offset + 5].Pos.Assign(x, -y, 0.0f);
                AppMain.nnTransformVector(ref buffer[offset].Pos, current, ref buffer[offset].Pos);
                AppMain.nnTransformVector(ref buffer[offset + 1].Pos, current, ref buffer[offset + 1].Pos);
                AppMain.nnTransformVector(ref buffer[offset + 2].Pos, current, ref buffer[offset + 2].Pos);
                AppMain.nnTransformVector(ref buffer[offset + 5].Pos, current, ref buffer[offset + 5].Pos);
                buffer[offset + 5].Col   = AppMain.AMD_RGBA8888(runtimeWorkPlane.color.r, runtimeWorkPlane.color.g, runtimeWorkPlane.color.b, runtimeWorkPlane.color.a);
                buffer[offset].Col       = buffer[offset + 1].Col = buffer[offset + 2].Col = buffer[offset + 5].Col;
                buffer[offset].Tex.u     = runtimeWorkPlane.st.x;
                buffer[offset].Tex.v     = runtimeWorkPlane.st.y;
                buffer[offset + 1].Tex.u = runtimeWorkPlane.st.z;
                buffer[offset + 1].Tex.v = runtimeWorkPlane.st.y;
                buffer[offset + 2].Tex.u = runtimeWorkPlane.st.x;
                buffer[offset + 2].Tex.v = runtimeWorkPlane.st.w;
                buffer[offset + 5].Tex.u = runtimeWorkPlane.st.z;
                buffer[offset + 5].Tex.v = runtimeWorkPlane.st.w;
                buffer[offset + 3]       = buffer[offset + 1];
                buffer[offset + 4]       = buffer[offset + 2];
                offset += 6;
                AppMain.amMatrixPop();
            }
            setParam.format3D = 4;
            setParam.type     = 0;
            setParam.vtxPCT3D = nnsPriM3DPctArray;
            setParam.texlist  = runtime.texlist;
            setParam.texId    = (int)node.texture_id;
            setParam.count    = 6 * (int)runtime.active_num;
            setParam.ablend   = num1;
            setParam.sortZ    = num2;
            AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam);
        }
        else
        {
            AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray1 = AppMain.amDrawAlloc_NNS_PRIM3D_PC(6 * (int)runtime.active_num);
            int index = 0;
            AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray2 = nnsPriM3DPcArray1;
            float num2 = 0.0f;
            for (; next != activeTail; next = next.next)
            {
                AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)(AppMain.AMS_AME_RUNTIME_WORK) next;
                AppMain.amMatrixPush();
                AppMain.NNS_MATRIX current = AppMain.amMatrixGetCurrent();
                float x = runtimeWorkPlane.size.x;
                float y = runtimeWorkPlane.size.y;
                AppMain.amVectorAdd(ref snnsVector, runtimeWorkPlane.position, ref pDst);
                AppMain.NNS_QUATERNION rotate = runtimeWorkPlane.rotate;
                AppMain.amQuatMultiMatrix(ref rotate, ref snnsVector);
                runtimeWorkPlane.rotate = rotate;
                num2 = AppMain.nnDistanceVector(ref snnsVector, AppMain._am_ef_camPos);
                nnsPriM3DPcArray1[index].Pos.Assign(-x, y, 0.0f);
                nnsPriM3DPcArray1[index + 1].Pos.Assign(x, y, 0.0f);
                nnsPriM3DPcArray1[index + 2].Pos.Assign(-x, -y, 0.0f);
                nnsPriM3DPcArray1[index + 5].Pos.Assign(x, -y, 0.0f);
                AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index].Pos, current, ref nnsPriM3DPcArray1[index].Pos);
                AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index + 1].Pos, current, ref nnsPriM3DPcArray1[index + 1].Pos);
                AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index + 2].Pos, current, ref nnsPriM3DPcArray1[index + 2].Pos);
                AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index + 5].Pos, current, ref nnsPriM3DPcArray1[index + 5].Pos);
                nnsPriM3DPcArray1[index + 5].Col = AppMain.AMD_RGBA8888(runtimeWorkPlane.color.r, runtimeWorkPlane.color.g, runtimeWorkPlane.color.b, runtimeWorkPlane.color.a);
                nnsPriM3DPcArray1[index].Col     = nnsPriM3DPcArray1[index + 1].Col = nnsPriM3DPcArray1[index + 2].Col = nnsPriM3DPcArray1[index + 5].Col;
                nnsPriM3DPcArray1[index + 3]     = nnsPriM3DPcArray1[index + 1];
                nnsPriM3DPcArray1[index + 4]     = nnsPriM3DPcArray1[index + 2];
                index += 6;
                AppMain.amMatrixPop();
            }
            setParam.format3D = 2;
            setParam.type     = 0;
            setParam.vtxPC3D  = nnsPriM3DPcArray2;
            setParam.texlist  = runtime.texlist;
            setParam.texId    = -1;
            setParam.count    = 6 * (int)runtime.active_num;
            setParam.ablend   = num1;
            setParam.sortZ    = num2;
            AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam);
        }
        AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Release(setParam);

        return(0);
    }
Beispiel #23
0
    public static int _amUpdatePlane(object r)
    {
        AppMain.AMS_AME_RUNTIME    runtime    = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_PLANE node       = (AppMain.AMS_AME_NODE_PLANE)runtime.node;
        AppMain.AMS_AME_LIST       next       = runtime.active_head.next;
        AppMain.AMS_AME_LIST       activeTail = runtime.active_tail;
        int   transparency = runtime.ecb.transparency;
        float num1;
        float num2;

        if ((double)node.life >= 0.0)
        {
            num1 = node.life;
            num2 = 1f / num1;
        }
        else
        {
            num1 = float.MaxValue;
            num2 = 0.0f;
        }
        float sizeRate = runtime.ecb.size_rate;
        float num3     = node.scale_x_start * sizeRate;
        float num4     = node.scale_y_start * sizeRate;
        float num5     = node.scale_x_end * sizeRate;
        float num6     = node.scale_y_end * sizeRate;

        AppMain.NNS_VECTOR4D   amEffectVel   = AppMain._amEffect_vel;
        AppMain.NNS_QUATERNION nnsQuaternion = new AppMain.NNS_QUATERNION();
        AppMain.NNS_VECTOR4D   pVec          = new AppMain.NNS_VECTOR4D();
        for (; next != activeTail; next = next.next)
        {
            AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)(AppMain.AMS_AME_RUNTIME_WORK) next;
            runtimeWorkPlane.time += AppMain._am_unit_frame;
            float rate = runtimeWorkPlane.time * num2;
            AppMain.amVectorScale(amEffectVel, runtimeWorkPlane.velocity, AppMain._am_unit_time);
            AppMain.amVectorAdd(runtimeWorkPlane.position, amEffectVel);
            if ((double)runtimeWorkPlane.time >= (double)num1)
            {
                if (runtime.spawn_runtime != null)
                {
                    AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)(AppMain.AMS_AME_LIST) runtimeWorkPlane);
                }
                AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtimeWorkPlane);
                --runtime.active_num;
                AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)(AppMain.AMS_AME_LIST) runtimeWorkPlane);
            }
            else
            {
                pVec.x = runtimeWorkPlane.rotate_axis.x;
                pVec.y = runtimeWorkPlane.rotate_axis.y;
                pVec.z = runtimeWorkPlane.rotate_axis.z;
                pVec.w = runtimeWorkPlane.rotate_axis.w;
                AppMain.amQuatRotAxisToQuat(ref nnsQuaternion, pVec, pVec.w * AppMain._am_unit_time);
                AppMain.NNS_QUATERNION rotate = runtimeWorkPlane.rotate;
                AppMain.amQuatMulti(ref rotate, ref nnsQuaternion, ref rotate);
                runtimeWorkPlane.rotate = rotate;
                float num7 = 1f - rate;
                float num8 = (float)((double)num3 * (double)num7 + (double)num5 * (double)rate);
                float num9 = (float)((double)num4 * (double)num7 + (double)num6 * (double)rate);
                runtimeWorkPlane.set_size(runtimeWorkPlane.size.z * num8, runtimeWorkPlane.size.z * num9, runtimeWorkPlane.size.z, runtimeWorkPlane.size.w);
                AppMain.AMS_RGBA8888 pCO;
                AppMain.amEffectLerpColor(out pCO, ref node.color_start, ref node.color_end, rate);
                pCO.a = (byte)((int)pCO.a * transparency >> 8);
                runtimeWorkPlane.set_color(pCO.color);
                if (((int)node.flag & 32768) != 0)
                {
                    AppMain.AMS_AME_TEX_ANIM texAnim = node.tex_anim;
                    if (((int)runtimeWorkPlane.flag & 2) == 0)
                    {
                        runtimeWorkPlane.tex_time += AppMain._am_unit_frame;
                        if ((double)runtimeWorkPlane.tex_time >= (double)texAnim.key_buf[runtimeWorkPlane.tex_no].time)
                        {
                            runtimeWorkPlane.tex_time = 0.0f;
                            ++runtimeWorkPlane.tex_no;
                            if (runtimeWorkPlane.tex_no == texAnim.key_num)
                            {
                                if (((int)node.flag & 65536) != 0)
                                {
                                    runtimeWorkPlane.tex_no = 0;
                                }
                                else
                                {
                                    runtimeWorkPlane.tex_no = texAnim.key_num - 1;
                                    runtimeWorkPlane.flag  |= 2U;
                                }
                            }
                        }
                    }
                    AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = texAnim.key_buf[runtimeWorkPlane.tex_no];
                    runtimeWorkPlane.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b);
                    if (((int)runtimeWorkPlane.flag & 8) != 0)
                    {
                        runtimeWorkPlane.set_st(runtimeWorkPlane.st.z, runtimeWorkPlane.st.y, runtimeWorkPlane.st.x, runtimeWorkPlane.st.w);
                    }
                    if (((int)runtimeWorkPlane.flag & 16) != 0)
                    {
                        runtimeWorkPlane.set_st(runtimeWorkPlane.st.x, runtimeWorkPlane.st.w, runtimeWorkPlane.st.z, runtimeWorkPlane.st.y);
                    }
                }
                else if (((int)node.flag & 16384) != 0)
                {
                    float num10 = node.scroll_u * AppMain._am_unit_time;
                    float num11 = node.scroll_v * AppMain._am_unit_time;
                    if (((int)runtimeWorkPlane.flag & 8) != 0)
                    {
                        num10 = -num10;
                    }
                    if (((int)runtimeWorkPlane.flag & 16) != 0)
                    {
                        num11 = -num11;
                    }
                    runtimeWorkPlane.set_st(runtimeWorkPlane.st.x + num10, runtimeWorkPlane.st.y + num11, runtimeWorkPlane.st.z + num10, runtimeWorkPlane.st.w + num11);
                }
            }
        }
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(pVec);
        return(0);
    }
Beispiel #24
0
    private static int _amUpdateSurface(object r)
    {
        AppMain.AMS_AME_RUNTIME              amsAmeRuntime1 = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_SURFACE         node           = (AppMain.AMS_AME_NODE_SURFACE)amsAmeRuntime1.node;
        AppMain.AMS_AME_RUNTIME_WORK_SURFACE work           = (AppMain.AMS_AME_RUNTIME_WORK_SURFACE)amsAmeRuntime1.work;
        work.time += AppMain._am_unit_frame;
        if ((double)work.time <= 0.0)
        {
            return(0);
        }
        if ((double)node.life != -1.0 && (double)work.time >= (double)node.life)
        {
            return(1);
        }
        AppMain.NNS_VECTOR4D amEffectVel = AppMain._amEffect_vel;
        AppMain.amVectorScale(amEffectVel, work.velocity, AppMain._am_unit_time);
        AppMain.amVectorAdd(work.position, amEffectVel);
        float sizeRate = amsAmeRuntime1.ecb.size_rate;

        if ((double)node.width_variation != 0.0 || (double)node.height_variation != 0.0)
        {
            work.width  += node.width_variation * AppMain._am_unit_time;
            work.height += node.height_variation * AppMain._am_unit_time;
        }
        else
        {
            work.width  = node.width * sizeRate;
            work.height = node.height * sizeRate;
        }
        work.offset       = node.offset * sizeRate;
        work.offset_chaos = node.offset_chaos * sizeRate;
        AppMain.NNS_MATRIX amEffectMtx = AppMain._amEffect_mtx;
        AppMain.nnMakeUnitMatrix(amEffectMtx);
        AppMain.amMatrixPush(amEffectMtx);
        AppMain.NNS_QUATERNION rotate = work.rotate;
        AppMain.amQuatToMatrix((AppMain.NNS_MATRIX)null, ref rotate, null);
        work.rotate = rotate;
        AppMain.NNS_VECTOR4D amEffectPosition  = AppMain._amEffect_position;
        AppMain.NNS_VECTOR4D amEffectVelocity  = AppMain._amEffect_velocity;
        AppMain.NNS_VECTOR4D amEffectDirection = AppMain._amEffect_direction;
        AppMain.AMS_AME_LIST next = amsAmeRuntime1.child_head.next;
        for (AppMain.AMS_AME_LIST childTail = amsAmeRuntime1.child_tail; next != childTail; next = next.next)
        {
            AppMain.AMS_AME_RUNTIME amsAmeRuntime2 = (AppMain.AMS_AME_RUNTIME)next;
            amsAmeRuntime2.amount += node.frequency * AppMain._am_unit_frame;
            while ((double)amsAmeRuntime2.amount >= 1.0)
            {
                --amsAmeRuntime2.amount;
                ++amsAmeRuntime2.count;
                if ((double)node.max_count != -1.0 && (double)((int)amsAmeRuntime2.work_num + (int)amsAmeRuntime2.active_num) < (double)node.max_count)
                {
                    AppMain.AMS_AME_CREATE_PARAM effectCreateParam = AppMain._amEffect_create_param;
                    AppMain.amVectorSet(amEffectDirection, 0.0f, 1f, 0.0f);
                    float num1 = (float)((double)AppMain.nnRandom() / 2.0 + (double)AppMain.nnRandom() * 0.5);
                    float x    = (float)((double)work.width * (double)num1 - (double)work.width * 0.5);
                    float num2 = (float)((double)AppMain.nnRandom() / 2.0 + (double)AppMain.nnRandom() * 0.5);
                    float z    = (float)((double)work.height * (double)num2 - (double)work.height * 0.5);
                    if (((int)node.flag & 1) != 0)
                    {
                        float num3 = AppMain.nnRandom();
                        bool  flag = false;
                        if ((double)AppMain.nnRandom() > 0.5)
                        {
                            flag = true;
                        }
                        if ((double)num3 > 0.5)
                        {
                            float num4 = work.width * 0.5f;
                            x = (double)num4 <= 0.0 || !flag ? num4 : -num4;
                        }
                        else
                        {
                            float num4 = work.height * 0.5f;
                            z = (double)num4 <= 0.0 || !flag ? num4 : -num4;
                        }
                    }
                    AppMain.amVectorSet(amEffectPosition, x, 0.0f, z);
                    AppMain.amMatrixCalcPoint(amEffectPosition, amEffectPosition);
                    AppMain.amMatrixCalcPoint(amEffectDirection, amEffectDirection);
                    AppMain.amVectorScale(amEffectVelocity, amEffectDirection, work.offset + work.offset_chaos * AppMain.nnRandom());
                    AppMain.amVectorAdd(amEffectPosition, amEffectVelocity);
                    AppMain.amVectorScale(amEffectVelocity, amEffectDirection, node.speed + node.speed_chaos * AppMain.nnRandom());
                    effectCreateParam.ecb             = amsAmeRuntime1.ecb;
                    effectCreateParam.runtime         = amsAmeRuntime2;
                    effectCreateParam.node            = amsAmeRuntime2.node;
                    effectCreateParam.parent_position = work.position;
                    effectCreateParam.parent_velocity = work.velocity;
                    effectCreateParam.position        = amEffectPosition;
                    effectCreateParam.velocity        = amEffectVelocity;
                    switch (AppMain.AMD_AME_NODE_TYPE(amsAmeRuntime2.node) & 65280)
                    {
                    case 256:
                        AppMain._amCreateEmitter(effectCreateParam);
                        continue;

                    case 512:
                        AppMain._amCreateParticle(effectCreateParam);
                        continue;

                    default:
                        continue;
                    }
                }
            }
        }
        AppMain.amMatrixPop();
        return(0);
    }
Beispiel #25
0
    private static int _amUpdateCircle(object rr)
    {
        AppMain.AMS_AME_RUNTIME             amsAmeRuntime1 = (AppMain.AMS_AME_RUNTIME)rr;
        AppMain.AMS_AME_NODE_CIRCLE         node           = (AppMain.AMS_AME_NODE_CIRCLE)amsAmeRuntime1.node;
        AppMain.AMS_AME_RUNTIME_WORK_CIRCLE work           = (AppMain.AMS_AME_RUNTIME_WORK_CIRCLE)amsAmeRuntime1.work;
        work.time += AppMain._am_unit_frame;
        if ((double)work.time <= 0.0)
        {
            return(0);
        }
        if ((double)node.life != -1.0 && (double)work.time >= (double)node.life)
        {
            return(1);
        }
        AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D();
        AppMain.amVectorScale(nnsVectoR4D1, work.velocity, AppMain._am_unit_time);
        AppMain.amVectorAdd(work.position, nnsVectoR4D1);
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1);
        float sizeRate = amsAmeRuntime1.ecb.size_rate;

        work.spread += node.spread_variation * AppMain._am_unit_time;
        if ((double)node.radius_variation != 0.0)
        {
            work.radius += node.radius_variation * AppMain._am_unit_time;
        }
        else
        {
            work.radius = node.radius * sizeRate;
        }
        work.offset       = node.offset * sizeRate;
        work.offset_chaos = node.offset_chaos * sizeRate;
        AppMain.NNS_MATRIX amUpdateCircleMtx = AppMain._amUpdateCircle_mtx;
        AppMain.nnMakeUnitMatrix(amUpdateCircleMtx);
        AppMain.amMatrixPush(amUpdateCircleMtx);
        AppMain.NNS_QUATERNION rotate = work.rotate;
        AppMain.amQuatToMatrix((AppMain.NNS_MATRIX)null, ref rotate, null);
        work.rotate = rotate;
        AppMain.NNS_VECTOR4D nnsVectoR4D2 = new AppMain.NNS_VECTOR4D();
        AppMain.NNS_VECTOR4D nnsVectoR4D3 = new AppMain.NNS_VECTOR4D();
        AppMain.NNS_VECTOR4D nnsVectoR4D4 = new AppMain.NNS_VECTOR4D();
        AppMain.AMS_AME_LIST next         = amsAmeRuntime1.child_head.next;
        for (AppMain.AMS_AME_LIST childTail = amsAmeRuntime1.child_tail; next != childTail; next = next.next)
        {
            AppMain.AMS_AME_RUNTIME amsAmeRuntime2 = (AppMain.AMS_AME_RUNTIME)next;
            amsAmeRuntime2.amount += node.frequency * AppMain._am_unit_frame;
            while ((double)amsAmeRuntime2.amount >= 1.0)
            {
                --amsAmeRuntime2.amount;
                ++amsAmeRuntime2.count;
                if ((double)node.max_count != -1.0 && (double)((int)amsAmeRuntime2.work_num + (int)amsAmeRuntime2.active_num) < (double)node.max_count)
                {
                    AppMain.AMS_AME_CREATE_PARAM amsAmeCreateParam = new AppMain.AMS_AME_CREATE_PARAM();
                    AppMain.amVectorSet(nnsVectoR4D4, 0.0f, 1f, 0.0f);
                    float radius = work.radius;
                    int   angle  = (int)((double)AppMain.nnRandom() * 10000000.0);
                    if (((int)node.flag & 1) == 0)
                    {
                        radius *= AppMain.nnRandom();
                    }
                    else if (((int)node.flag & 2) != 0)
                    {
                        int maxCount = (int)node.max_count;
                        angle = (int)((long)((int)ushort.MaxValue / maxCount) * ((long)amsAmeRuntime2.count % (long)maxCount));
                    }
                    float pSn;
                    float pCs;
                    AppMain.amSinCos(angle, out pSn, out pCs);
                    AppMain.amVectorSet(nnsVectoR4D2, pSn * radius, 0.0f, pCs * radius);
                    AppMain.NNS_VECTOR4D   nnsVectoR4D5 = new AppMain.NNS_VECTOR4D();
                    AppMain.NNS_QUATERNION pQuat        = new AppMain.NNS_QUATERNION();
                    AppMain.amVectorOuterProduct(nnsVectoR4D5, nnsVectoR4D4, nnsVectoR4D2);
                    double num = (double)AppMain.amVectorUnit(nnsVectoR4D5);
                    AppMain.amQuatRotAxisToQuat(ref pQuat, nnsVectoR4D5, AppMain.NNM_DEGtoRAD((int)work.spread));
                    AppMain.amQuatMultiVector(nnsVectoR4D4, nnsVectoR4D4, ref pQuat, null);
                    //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D5);
                    AppMain.amMatrixCalcVector(nnsVectoR4D2, nnsVectoR4D2);
                    AppMain.amMatrixCalcVector(nnsVectoR4D4, nnsVectoR4D4);
                    AppMain.amVectorScale(nnsVectoR4D3, nnsVectoR4D4, work.offset + work.offset_chaos * AppMain.nnRandom());
                    AppMain.amVectorAdd(nnsVectoR4D2, nnsVectoR4D3);
                    AppMain.amVectorScale(nnsVectoR4D3, nnsVectoR4D4, node.speed + node.speed_chaos * AppMain.nnRandom());
                    amsAmeCreateParam.ecb             = amsAmeRuntime1.ecb;
                    amsAmeCreateParam.runtime         = amsAmeRuntime2;
                    amsAmeCreateParam.node            = amsAmeRuntime2.node;
                    amsAmeCreateParam.parent_position = work.position;
                    amsAmeCreateParam.parent_velocity = work.velocity;
                    amsAmeCreateParam.position        = nnsVectoR4D2;
                    amsAmeCreateParam.velocity        = nnsVectoR4D3;
                    switch (AppMain.AMD_AME_NODE_TYPE(amsAmeRuntime2.node) & 65280)
                    {
                    case 256:
                        AppMain._amCreateEmitter(amsAmeCreateParam);
                        continue;

                    case 512:
                        AppMain._amCreateParticle(amsAmeCreateParam);
                        continue;

                    default:
                        continue;
                    }
                }
            }
        }
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2);
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D3);
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D4);
        AppMain.amMatrixPop();
        return(0);
    }
Beispiel #26
0
    public static int _amUpdateModel(object r)
    {
        AppMain.AMS_AME_RUNTIME            runtime = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_MODEL         node    = (AppMain.AMS_AME_NODE_MODEL)runtime.node;
        AppMain.AMS_AME_RUNTIME_WORK_MODEL next1   = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)(AppMain.AMS_AME_RUNTIME_WORK) runtime.active_head.next;
        AppMain.AMS_AME_LIST next2      = runtime.active_head.next;
        AppMain.AMS_AME_LIST activeTail = runtime.active_tail;
        int   transparency = runtime.ecb.transparency;
        float num1;
        float num2;

        if ((double)node.life >= 0.0)
        {
            num1 = node.life;
            num2 = 1f / num1;
        }
        else
        {
            num1 = float.MaxValue;
            num2 = 0.0f;
        }
        AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D();
        AppMain.NNS_VECTOR4D nnsVectoR4D2 = new AppMain.NNS_VECTOR4D();
        AppMain.amVectorScale(nnsVectoR4D1, node.scale_start, runtime.ecb.size_rate);
        AppMain.amVectorScale(nnsVectoR4D2, node.scale_end, runtime.ecb.size_rate);
        AppMain.AMS_AME_RUNTIME_WORK_MODEL runtimeWorkModel;
        for (; next2 != activeTail; next2 = runtimeWorkModel.next)
        {
            runtimeWorkModel       = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)(AppMain.AMS_AME_RUNTIME_WORK) next2;
            runtimeWorkModel.time += AppMain._am_unit_frame;
            float num3 = runtimeWorkModel.time * num2;
            AppMain.NNS_VECTOR4D nnsVectoR4D3 = new AppMain.NNS_VECTOR4D();
            AppMain.amVectorScale(nnsVectoR4D3, runtimeWorkModel.velocity, AppMain._am_unit_time);
            AppMain.amVectorAdd(runtimeWorkModel.position, nnsVectoR4D3);
            //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D3);
            if ((double)runtimeWorkModel.time >= (double)num1)
            {
                if (runtime.spawn_runtime != null)
                {
                    AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)runtimeWorkModel);
                }
                AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtimeWorkModel);
                --runtime.active_num;
                AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)runtimeWorkModel);
            }
            else
            {
                AppMain.NNS_QUATERNION nnsQuaternion = new AppMain.NNS_QUATERNION();
                AppMain.NNS_VECTOR4D   nnsVectoR4D4  = new AppMain.NNS_VECTOR4D();
                AppMain.Vector4D_Buf   rotateAxis    = runtimeWorkModel.rotate_axis;
                nnsVectoR4D4.x = rotateAxis.x;
                nnsVectoR4D4.y = rotateAxis.y;
                nnsVectoR4D4.z = rotateAxis.z;
                nnsVectoR4D4.w = rotateAxis.w;
                AppMain.amQuatRotAxisToQuat(ref nnsQuaternion, nnsVectoR4D4, nnsVectoR4D4.w * AppMain._am_unit_time);
                AppMain.NNS_QUATERNION rotate = runtimeWorkModel.rotate;
                AppMain.amQuatMulti(ref rotate, ref rotate, ref nnsQuaternion);
                runtimeWorkModel.rotate = rotate;
                AppMain.amVectorGetInner(nnsVectoR4D4, nnsVectoR4D1, nnsVectoR4D2, num3);
                runtimeWorkModel.set_scale(nnsVectoR4D4);
                AppMain.AMS_RGBA8888 pCO;
                AppMain.amEffectLerpColor(out pCO, ref node.color_start, ref node.color_end, num3);
                pCO.a = (byte)((int)pCO.a * transparency >> 8);
                runtimeWorkModel.set_color(pCO.color);
                runtimeWorkModel.scroll_u += node.scroll_u * AppMain._am_unit_time;
                runtimeWorkModel.scroll_v += node.scroll_v * AppMain._am_unit_time;
                //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D4);
            }
        }
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1);
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2);
        return(0);
    }
Beispiel #27
0
    public static int _amUpdateLine(object r)
    {
        AppMain.AMS_AME_RUNTIME   runtime    = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_LINE node       = (AppMain.AMS_AME_NODE_LINE)runtime.node;
        AppMain.AMS_AME_LIST      next       = runtime.active_head.next;
        AppMain.AMS_AME_LIST      activeTail = runtime.active_tail;
        int   transparency = runtime.ecb.transparency;
        float num1;
        float num2;

        if ((double)node.life >= 0.0)
        {
            num1 = node.life;
            num2 = 1f / num1;
        }
        else
        {
            num1 = 1E+38f;
            num2 = 0.0f;
        }
        float sizeRate = runtime.ecb.size_rate;
        float num3     = node.length_start * sizeRate;
        float num4     = node.length_end * sizeRate;
        float num5     = node.inside_width_start * sizeRate;
        float num6     = node.outside_width_start * sizeRate;
        float num7     = node.inside_width_end * sizeRate;
        float num8     = node.outside_width_end * sizeRate;

        AppMain.NNS_VECTOR4D nnsVectoR4D = new AppMain.NNS_VECTOR4D();
        for (; next != activeTail; next = next.next)
        {
            AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)(AppMain.AMS_AME_RUNTIME_WORK) next;
            ameRuntimeWorkLine.time += AppMain._am_unit_frame;
            float rate = ameRuntimeWorkLine.time * num2;
            AppMain.amVectorScale(nnsVectoR4D, ameRuntimeWorkLine.velocity, AppMain._am_unit_time);
            AppMain.amVectorAdd(ameRuntimeWorkLine.position, nnsVectoR4D);
            if ((double)ameRuntimeWorkLine.time >= (double)num1)
            {
                if (runtime.spawn_runtime != null)
                {
                    AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)ameRuntimeWorkLine);
                }
                AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)ameRuntimeWorkLine);
                --runtime.active_num;
                AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)ameRuntimeWorkLine);
            }
            else
            {
                float num9 = 1f - rate;
                ameRuntimeWorkLine.length        = (float)((double)num3 * (double)num9 + (double)num4 * (double)rate);
                ameRuntimeWorkLine.inside_width  = (float)((double)num5 * (double)num9 + (double)num7 * (double)rate);
                ameRuntimeWorkLine.outside_width = (float)((double)num6 * (double)num9 + (double)num8 * (double)rate);
                AppMain.AMS_RGBA8888 pCO;
                AppMain.amEffectLerpColor(out pCO, ref node.inside_color_start, ref node.inside_color_end, rate);
                pCO.a = (byte)((int)pCO.a * transparency >> 8);
                ameRuntimeWorkLine.set_inside_color(pCO.color);
                AppMain.amEffectLerpColor(out pCO, ref node.outside_color_start, ref node.outside_color_end, rate);
                pCO.a = (byte)((int)pCO.a * transparency >> 8);
                ameRuntimeWorkLine.set_outside_color(pCO.color);
                if (((int)node.flag & 32768) != 0)
                {
                    AppMain.AMS_AME_TEX_ANIM texAnim = node.tex_anim;
                    if (((int)ameRuntimeWorkLine.flag & 2) == 0)
                    {
                        ameRuntimeWorkLine.tex_time += AppMain._am_unit_frame;
                        if ((double)ameRuntimeWorkLine.tex_time >= (double)texAnim.key_buf[ameRuntimeWorkLine.tex_no].time)
                        {
                            ameRuntimeWorkLine.tex_time = 0.0f;
                            ++ameRuntimeWorkLine.tex_no;
                            if (ameRuntimeWorkLine.tex_no == texAnim.key_num)
                            {
                                if (((int)node.flag & 65536) != 0)
                                {
                                    ameRuntimeWorkLine.tex_no = 0;
                                }
                                else
                                {
                                    ameRuntimeWorkLine.tex_no = texAnim.key_num - 1;
                                    ameRuntimeWorkLine.flag  |= 2U;
                                }
                            }
                        }
                    }
                    AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = texAnim.key_buf[ameRuntimeWorkLine.tex_no];
                    ameRuntimeWorkLine.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b);
                    if (((int)ameRuntimeWorkLine.flag & 8) != 0)
                    {
                        ameRuntimeWorkLine.set_st(ameRuntimeWorkLine.st.z, ameRuntimeWorkLine.st.y, ameRuntimeWorkLine.st.x, ameRuntimeWorkLine.st.w);
                    }
                    if (((int)ameRuntimeWorkLine.flag & 16) != 0)
                    {
                        ameRuntimeWorkLine.set_st(ameRuntimeWorkLine.st.x, ameRuntimeWorkLine.st.w, ameRuntimeWorkLine.st.z, ameRuntimeWorkLine.st.y);
                    }
                }
                else if (((int)node.flag & 16384) != 0)
                {
                    float num10 = node.scroll_u * AppMain._am_unit_time;
                    float num11 = node.scroll_v * AppMain._am_unit_time;
                    if (((int)ameRuntimeWorkLine.flag & 8) != 0)
                    {
                        num10 = -num10;
                    }
                    if (((int)ameRuntimeWorkLine.flag & 16) != 0)
                    {
                        num11 = -num11;
                    }
                    ameRuntimeWorkLine.set_st(ameRuntimeWorkLine.st.x + num10, ameRuntimeWorkLine.st.w + num10, ameRuntimeWorkLine.st.z + num11, ameRuntimeWorkLine.st.y + num11);
                }
            }
        }
        //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D);
        return(0);
    }
Beispiel #28
0
    public static void amEffectUpdate(AppMain.AMS_AME_ECB ecb)
    {
        if (ecb.entry_num <= 0)
        {
            return;
        }
        if (ecb.skip_update != 0)
        {
            ecb.skip_update = 0;
        }
        for (AppMain.AMS_AME_ENTRY amsAmeEntry = ecb.entry_head; amsAmeEntry != null; amsAmeEntry = (AppMain.AMS_AME_ENTRY)amsAmeEntry.next)
        {
            AppMain.AMS_AME_RUNTIME runtime = amsAmeEntry.runtime;
            AppMain.AMS_AME_NODE    node1   = runtime.node;
            int num1 = AppMain.AMD_AME_NODE_TYPE(node1);
            if ((runtime.state & 16384) != 0 && (int)runtime.work_num + (int)runtime.active_num == 0)
            {
                if (runtime.spawn_runtime != null)
                {
                    runtime.spawn_runtime.state |= 16384;
                }
                runtime.state |= 32768;
            }
            else
            {
                switch (num1 & 65280)
                {
                case 256:
                    if (runtime.work != null)
                    {
                        AppMain.AmeDelegateFunc ameDelegateFunc = AppMain._am_emitter_func[((num1 & (int)byte.MaxValue) << 2) + 1];
                        if (runtime.work != null)
                        {
                            if (ameDelegateFunc((object)runtime) != 0)
                            {
                                runtime.state |= 32768;
                                AppMain.AMS_AME_LIST next = runtime.child_head.next;
                                for (AppMain.AMS_AME_LIST childTail = runtime.child_tail; next != childTail; next = next.next)
                                {
                                    ((AppMain.AMS_AME_RUNTIME)next).state |= 16384;
                                }
                                if (runtime.parent_runtime != null)
                                {
                                    AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtime);
                                    --runtime.parent_runtime.work_num;
                                    continue;
                                }
                                continue;
                            }
                            for (AppMain.AMS_AME_NODE node2 = node1.child; node2 != null; node2 = node2.sibling)
                            {
                                if (AppMain.AMD_AME_IS_FIELD(node2))
                                {
                                    AppMain._am_field_func[AppMain.AMD_AME_NODE_TYPE(node2) & (int)byte.MaxValue](runtime.ecb, node2, runtime.work);
                                }
                            }
                            continue;
                        }
                        continue;
                    }
                    continue;

                case 512:
                    if (runtime.work_num != (short)0)
                    {
                        AppMain.AMS_AME_RUNTIME_WORK next     = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_head.next;
                        AppMain.AMS_AME_RUNTIME_WORK workTail = (AppMain.AMS_AME_RUNTIME_WORK)runtime.work_tail;
                        while (next != workTail)
                        {
                            AppMain.AMS_AME_RUNTIME_WORK amsAmeRuntimeWork = next;
                            next = (AppMain.AMS_AME_RUNTIME_WORK)next.next;
                            amsAmeRuntimeWork.time += AppMain._am_unit_frame;
                            if ((double)amsAmeRuntimeWork.time > 0.0)
                            {
                                amsAmeRuntimeWork.time -= AppMain._am_unit_frame;
                                AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)amsAmeRuntimeWork);
                                AppMain._amConnectLinkToTail(runtime.active_tail, (AppMain.AMS_AME_LIST)amsAmeRuntimeWork);
                                --runtime.work_num;
                                ++runtime.active_num;
                            }
                        }
                    }
                    int num2 = AppMain._am_particle_func[((num1 & (int)byte.MaxValue) << 2) + 1]((object)runtime);
                    AppMain.AMS_AME_RUNTIME_WORK next1      = (AppMain.AMS_AME_RUNTIME_WORK)runtime.active_head.next;
                    AppMain.AMS_AME_LIST         activeTail = runtime.active_tail;
                    AppMain.AMS_AME_RUNTIME_WORK work;
                    for (AppMain.AMS_AME_LIST next2 = runtime.active_head.next; next2 != activeTail; next2 = work.next)
                    {
                        work = (AppMain.AMS_AME_RUNTIME_WORK)next2;
                        for (AppMain.AMS_AME_NODE node2 = node1.child; node2 != null; node2 = node2.sibling)
                        {
                            if (AppMain.AMD_AME_IS_FIELD(node2))
                            {
                                AppMain._am_field_func[AppMain.AMD_AME_NODE_TYPE(node2) & (int)byte.MaxValue](runtime.ecb, node2, work);
                            }
                        }
                    }
                    continue;

                default:
                    continue;
                }
            }
        }
        for (AppMain.AMS_AME_ENTRY entry = ecb.entry_head; entry != null; entry = (AppMain.AMS_AME_ENTRY)entry.next)
        {
            if ((entry.runtime.state & 32768) != 0)
            {
                AppMain._amFreeRuntime(entry.runtime);
                AppMain._amDelEntry(ecb, entry);
            }
        }
        if (ecb.entry_num != 0)
        {
            return;
        }
        AppMain.amEffectDelete(ecb);
    }
Beispiel #29
0
    public static int _amDrawLine(object r)
    {
        AppMain.AMS_AME_RUNTIME          runtime    = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_LINE        node       = (AppMain.AMS_AME_NODE_LINE)runtime.node;
        AppMain.AMS_AME_LIST             next       = runtime.active_head.next;
        AppMain.AMS_AME_LIST             activeTail = runtime.active_tail;
        AppMain.AMS_PARAM_DRAW_PRIMITIVE setParam   = AppMain.amDrawAlloc_AMS_PARAM_DRAW_PRIMITIVE();
        int num1 = AppMain._amEffectSetDrawMode(runtime, setParam, node.blend);

        AppMain.NNS_VECTOR4D amDrawLineOffset = AppMain._amDrawLine_offset;
        AppMain.NNS_VECTOR4D amDrawLineEye    = AppMain._amDrawLine_eye;
        float zBias = node.z_bias;

        AppMain.amVectorSet(amDrawLineOffset, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22);
        AppMain.amVectorSet(amDrawLineEye, AppMain._am_ef_worldViewMtx.M20, AppMain._am_ef_worldViewMtx.M21, AppMain._am_ef_worldViewMtx.M22);
        AppMain.NNS_VECTOR4D amDrawLinePos0  = AppMain._amDrawLine_pos0;
        AppMain.NNS_VECTOR4D amDrawLinePos1  = AppMain._amDrawLine_pos1;
        AppMain.NNS_VECTOR   amDrawLineVel   = (AppMain.NNS_VECTOR)AppMain._amDrawLine_vel;
        AppMain.NNS_VECTOR   amDrawLineCross = (AppMain.NNS_VECTOR)AppMain._amDrawLine_cross;
        if (((int)node.flag & 4096) != 0)
        {
            AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(6 * (int)runtime.active_num);
            AppMain.NNS_PRIM3D_PCT[]     buffer            = nnsPriM3DPctArray.buffer;
            int   offset = nnsPriM3DPctArray.offset;
            float num2   = 0.0f;
            for (; next != activeTail; next = next.next)
            {
                AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)(AppMain.AMS_AME_RUNTIME_WORK) next;
                double num3 = (double)AppMain.amVectorUnit(amDrawLineVel, ameRuntimeWorkLine.velocity);
                AppMain.nnScaleVector((AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel, ameRuntimeWorkLine.length);
                AppMain.amVectorAdd(amDrawLinePos1, ameRuntimeWorkLine.position, amDrawLineOffset);
                AppMain.nnAddVector((AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos1);
                num2 = AppMain.nnDistanceVector((AppMain.NNS_VECTOR)amDrawLinePos0, AppMain._am_ef_camPos);
                AppMain.nnCrossProductVector(amDrawLineCross, amDrawLineVel, (AppMain.NNS_VECTOR)amDrawLineEye);
                AppMain.nnNormalizeVector(amDrawLineCross, amDrawLineCross);
                AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.outside_width);
                AppMain.nnSubtractVector(ref buffer[offset].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel);
                AppMain.nnAddVector(ref buffer[offset + 1].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel);
                AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.inside_width);
                AppMain.nnSubtractVector(ref buffer[offset + 2].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel);
                AppMain.nnAddVector(ref buffer[offset + 5].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel);
                buffer[offset + 1].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.outside_color.r, ameRuntimeWorkLine.outside_color.g, ameRuntimeWorkLine.outside_color.b, ameRuntimeWorkLine.outside_color.a);
                buffer[offset].Col     = buffer[offset + 1].Col;
                buffer[offset + 5].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.inside_color.r, ameRuntimeWorkLine.inside_color.g, ameRuntimeWorkLine.inside_color.b, ameRuntimeWorkLine.inside_color.a);
                buffer[offset + 2].Col = buffer[offset + 5].Col;
                AppMain.Vector4D_Quat st = ameRuntimeWorkLine.st;
                buffer[offset].Tex.u     = st.x;
                buffer[offset].Tex.v     = st.y;
                buffer[offset + 1].Tex.u = st.z;
                buffer[offset + 1].Tex.v = st.y;
                buffer[offset + 2].Tex.u = st.x;
                buffer[offset + 2].Tex.v = st.w;
                buffer[offset + 5].Tex.u = st.z;
                buffer[offset + 5].Tex.v = st.w;
                buffer[offset + 3]       = buffer[offset + 1];
                buffer[offset + 4]       = buffer[offset + 2];
                offset += 6;
            }
            setParam.format3D = 4;
            setParam.type     = 0;
            setParam.vtxPCT3D = nnsPriM3DPctArray;
            setParam.texlist  = runtime.texlist;
            setParam.texId    = (int)node.texture_id;
            setParam.count    = 6 * (int)runtime.active_num;
            setParam.ablend   = num1;
            setParam.sortZ    = num2;
            AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam);
        }
        else
        {
            AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray1 = new AppMain.NNS_PRIM3D_PC[6 * (int)runtime.active_num];
            int index = 0;
            AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray2 = nnsPriM3DPcArray1;
            float num2 = 0.0f;
            for (; next != activeTail; next = next.next)
            {
                AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)(AppMain.AMS_AME_RUNTIME_WORK) next;
                double num3 = (double)AppMain.amVectorUnit(amDrawLineVel, ameRuntimeWorkLine.velocity);
                AppMain.nnScaleVector((AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel, ameRuntimeWorkLine.length);
                AppMain.amVectorAdd(amDrawLinePos1, ameRuntimeWorkLine.position, amDrawLineOffset);
                AppMain.nnAddVector((AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos1);
                num2 = AppMain.nnDistanceVector((AppMain.NNS_VECTOR)amDrawLinePos0, AppMain._am_ef_camPos);
                AppMain.nnCrossProductVector(amDrawLineCross, amDrawLineVel, (AppMain.NNS_VECTOR)amDrawLineEye);
                AppMain.nnNormalizeVector(amDrawLineCross, amDrawLineCross);
                AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.outside_width);
                AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel);
                AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 1].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel);
                AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.inside_width);
                AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 2].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel);
                AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 5].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel);
                nnsPriM3DPcArray1[index + 1].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.outside_color.r, ameRuntimeWorkLine.outside_color.g, ameRuntimeWorkLine.outside_color.b, ameRuntimeWorkLine.outside_color.a);
                nnsPriM3DPcArray1[index].Col     = nnsPriM3DPcArray1[index + 1].Col;
                nnsPriM3DPcArray1[index + 5].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.inside_color.r, ameRuntimeWorkLine.inside_color.g, ameRuntimeWorkLine.inside_color.b, ameRuntimeWorkLine.inside_color.a);
                nnsPriM3DPcArray1[index + 2].Col = nnsPriM3DPcArray1[index + 5].Col;
                nnsPriM3DPcArray1[index + 3]     = nnsPriM3DPcArray1[index + 1];
                nnsPriM3DPcArray1[index + 4]     = nnsPriM3DPcArray1[index + 2];
                index += 6;
            }
            setParam.format3D = 2;
            setParam.type     = 0;
            setParam.vtxPC3D  = nnsPriM3DPcArray2;
            setParam.texlist  = runtime.texlist;
            setParam.texId    = -1;
            setParam.count    = 6 * (int)runtime.active_num;
            setParam.ablend   = num1;
            setParam.sortZ    = num2;
            AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam);
        }
        return(0);
    }
Beispiel #30
0
    public static int _amUpdateSimpleSprite(object r)
    {
        AppMain.AMS_AME_RUNTIME     runtime    = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_SPRITE node       = (AppMain.AMS_AME_NODE_SPRITE)runtime.node;
        AppMain.AMS_AME_LIST        next       = runtime.active_head.next;
        AppMain.AMS_AME_LIST        activeTail = runtime.active_tail;
        int   transparency = runtime.ecb.transparency;
        float num1;
        float num2;

        if ((double)node.life >= 0.0)
        {
            num1 = node.life;
            num2 = 1f / num1;
        }
        else
        {
            num1 = float.MaxValue;
            num2 = 0.0f;
        }
        float sizeRate = runtime.ecb.size_rate;
        float num3     = node.scale_x_start * sizeRate;
        float num4     = node.scale_y_start * sizeRate;
        float num5     = node.scale_x_end * sizeRate;
        float num6     = node.scale_y_end * sizeRate;

        for (; next != activeTail; next = next.next)
        {
            AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE workSimpleSprite = (AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE)(AppMain.AMS_AME_RUNTIME_WORK) next;
            workSimpleSprite.time += AppMain._am_unit_frame;
            float rate = workSimpleSprite.time * num2;
            AppMain.NNS_VECTOR4D amEffectVel = AppMain._amEffect_vel;
            AppMain.amVectorScale(amEffectVel, workSimpleSprite.velocity, AppMain._am_unit_time);
            AppMain.amVectorAdd(workSimpleSprite.position, amEffectVel);
            if ((double)workSimpleSprite.time >= (double)num1)
            {
                if (runtime.spawn_runtime != null)
                {
                    AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)workSimpleSprite);
                }
                AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)workSimpleSprite);
                --runtime.active_num;
                AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)workSimpleSprite);
            }
            else
            {
                float num7 = 1f - rate;
                float num8 = (float)((double)num3 * (double)num7 + (double)num5 * (double)rate);
                float num9 = (float)((double)num4 * (double)num7 + (double)num6 * (double)rate);
                AppMain.Vector4D_Buf size = workSimpleSprite.size;
                workSimpleSprite.set_size(size.z * num8, size.z * num9, size.z, size.w);
                AppMain.AMS_RGBA8888 pCO;
                AppMain.amEffectLerpColor(out pCO, ref node.color_start, ref node.color_end, rate);
                pCO.a = (byte)((int)pCO.a * transparency >> 8);
                workSimpleSprite.set_color(pCO.color);
                if (((int)node.flag & 32768) != 0)
                {
                    AppMain.AMS_AME_TEX_ANIM texAnim = node.tex_anim;
                    if (((int)workSimpleSprite.flag & 2) == 0)
                    {
                        workSimpleSprite.tex_time += AppMain._am_unit_frame;
                        if ((double)workSimpleSprite.tex_time >= (double)texAnim.key_buf[workSimpleSprite.tex_no].time)
                        {
                            workSimpleSprite.tex_time = 0.0f;
                            ++workSimpleSprite.tex_no;
                            if (workSimpleSprite.tex_no == texAnim.key_num)
                            {
                                if (((int)node.flag & 65536) != 0)
                                {
                                    workSimpleSprite.tex_no = 0;
                                }
                                else
                                {
                                    workSimpleSprite.tex_no = texAnim.key_num - 1;
                                    workSimpleSprite.flag  |= 2U;
                                }
                            }
                        }
                    }
                    AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = texAnim.key_buf[workSimpleSprite.tex_no];
                    Vector4 vector4 = new Vector4(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b);
                    if (((int)workSimpleSprite.flag & 8) != 0)
                    {
                        float x = vector4.X;
                        vector4.X = vector4.Z;
                        vector4.Z = x;
                    }
                    if (((int)workSimpleSprite.flag & 16) != 0)
                    {
                        float y = vector4.Y;
                        vector4.Y = vector4.W;
                        vector4.W = y;
                    }
                    workSimpleSprite.set_st(vector4.X, vector4.Y, vector4.Z, vector4.W);
                }
                else if (((int)node.flag & 16384) != 0)
                {
                    float num10 = node.scroll_u * AppMain._am_unit_time;
                    float num11 = node.scroll_v * AppMain._am_unit_time;
                    if (((int)workSimpleSprite.flag & 8) != 0)
                    {
                        num10 = -num10;
                    }
                    if (((int)workSimpleSprite.flag & 16) != 0)
                    {
                        num11 = -num11;
                    }
                    AppMain.Vector4D_Quat st = workSimpleSprite.st;
                    Vector4 vector4          = new Vector4(st.x + num10, st.y + num11, st.z + num10, st.w + num11);
                    workSimpleSprite.set_st(vector4.X, vector4.Y, vector4.Z, vector4.W);
                }
            }
        }
        return(0);
    }