Example #1
0
    private static int _amInitCircle(object p)
    {
        AppMain.AMS_AME_CREATE_PARAM        amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
        AppMain.AMS_AME_NODE_CIRCLE         node = (AppMain.AMS_AME_NODE_CIRCLE)amsAmeCreateParam.node;
        AppMain.AMS_AME_RUNTIME_WORK_CIRCLE work = (AppMain.AMS_AME_RUNTIME_WORK_CIRCLE)amsAmeCreateParam.work;
        work.time = -node.start_time;
        AppMain.amVectorAdd(work.position, amsAmeCreateParam.parent_position.Value, amsAmeCreateParam.position.Value);
        AppMain.amVectorAdd(work.position, node.translate);
        AppMain.amVectorScale(work.velocity, amsAmeCreateParam.parent_velocity.Value, node.inheritance_rate);
        AppMain.amVectorAdd(work.velocity, amsAmeCreateParam.velocity.Value);
        work.rotate = node.rotate;
        float sizeRate = amsAmeCreateParam.ecb.size_rate;

        work.spread       = node.spread;
        work.radius       = node.radius * sizeRate;
        work.offset       = node.offset * sizeRate;
        work.offset_chaos = node.offset_chaos * sizeRate;
        return(0);
    }
Example #2
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);
    }