Esempio n. 1
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);
    }
Esempio n. 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);
 }
Esempio n. 3
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;
 }
Esempio n. 4
0
    private static AppMain.AMS_AME_ECB _amEffectCreate(
        AppMain.AMS_AME_HEADER header,
        int attribute,
        int priority)
    {
        AppMain.AMS_AME_ECB amsAmeEcb = AppMain._am_ecb_ref[AppMain._am_ecb_alloc];
        ++AppMain._am_ecb_alloc;
        if (AppMain._am_ecb_alloc >= 128)
        {
            AppMain._am_ecb_alloc = 0;
        }
        amsAmeEcb.Clear();
        amsAmeEcb.attribute    = attribute;
        amsAmeEcb.priority     = priority;
        amsAmeEcb.transparency = 256;
        amsAmeEcb.size_rate    = 1f;
        AppMain.amVectorInit(ref amsAmeEcb.translate);
        AppMain.amQuatInit(ref amsAmeEcb.rotate);
        amsAmeEcb.bounding.Assign(header.bounding);
        AppMain.AMS_AME_ECB next = (AppMain.AMS_AME_ECB)AppMain._am_ecb_head.next;
        while (next != AppMain._am_ecb_tail && next.priority <= priority)
        {
            next = (AppMain.AMS_AME_ECB)next.next;
        }
        next.prev.next = (AppMain.AMS_AME_LIST)amsAmeEcb;
        amsAmeEcb.prev = next.prev;
        next.prev      = (AppMain.AMS_AME_LIST)amsAmeEcb;
        amsAmeEcb.next = (AppMain.AMS_AME_LIST)next;
        AppMain.AMS_AME_CREATE_PARAM amsAmeCreateParam = new AppMain.AMS_AME_CREATE_PARAM();
        AppMain.NNS_VECTOR4D         amEffectCreateVec = AppMain._amEffectCreate_vec;
        AppMain.AMS_AME_NODE         sibling           = header.node[0];
        AppMain.amVectorInit(ref amEffectCreateVec);
        for (; sibling != null; sibling = sibling.sibling)
        {
            amsAmeCreateParam.ecb             = amsAmeEcb;
            amsAmeCreateParam.runtime         = (AppMain.AMS_AME_RUNTIME)null;
            amsAmeCreateParam.node            = sibling;
            amsAmeCreateParam.position        = amEffectCreateVec;
            amsAmeCreateParam.velocity        = amEffectCreateVec;
            amsAmeCreateParam.parent_position = amEffectCreateVec;
            amsAmeCreateParam.parent_velocity = amEffectCreateVec;
            switch (AppMain.AMD_AME_SUPER_CLASS_ID(sibling))
            {
            case 256:
                AppMain._amCreateRuntimeEmitter(amsAmeCreateParam).state |= 8192;
                break;

            case 512:
                AppMain._amCreateRuntimeParticle(amsAmeCreateParam).state |= 8192;
                break;
            }
        }
        amsAmeEcb.skip_update = 1;
        return(amsAmeEcb);
    }
Esempio n. 5
0
    public static int _amInitSprite(object p)
    {
        AppMain.AMS_AME_CREATE_PARAM        amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
        AppMain.AMS_AME_NODE_SPRITE         node = (AppMain.AMS_AME_NODE_SPRITE)amsAmeCreateParam.node;
        AppMain.AMS_AME_RUNTIME_WORK_SPRITE work = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)amsAmeCreateParam.work;
        work.time = -node.start_time;
        AppMain.AMS_RGBA8888 colorStart = node.color_start;
        colorStart.color = node.color_start.color;
        colorStart.a     = (byte)((int)colorStart.a * amsAmeCreateParam.ecb.transparency >> 8);
        work.set_color(colorStart.color);
        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);
        float z = node.size + node.size_chaos * AppMain.nnRandom();

        work.set_size(z * node.scale_x_start, z * node.scale_x_start, z, 0.0f);
        work.twist = node.twist_angle + node.twist_angle_chaos * AppMain.nnRandom();
        if (((int)node.flag & 4) != 0 && (double)AppMain.nnRandom() > 0.5)
        {
            work.flag |= 4U;
        }
        work.twist_speed = ((int)work.flag & 4) == 0 ? node.twist_angle_speed : -node.twist_angle_speed;
        if (((int)node.flag & 32768) != 0)
        {
            work.tex_time = 0.0f;
            work.tex_no   = 0;
            if (((int)node.flag & 524288) != 0)
            {
                work.tex_no = (int)(100.0 * (double)AppMain.nnRandom()) % node.tex_anim.key_num;
            }
            AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = node.tex_anim.key_buf[work.tex_no];
            work.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b);
        }
        else if (((int)node.flag & 8192) != 0)
        {
            work.set_st(node.cropping_l, node.cropping_t, node.cropping_r, node.cropping_b);
        }
        else
        {
            work.set_st(0.0f, 0.0f, 1f, 1f);
        }
        if (((int)node.flag & 1048576) != 0 || ((int)node.flag & 131072) != 0 && (double)AppMain.nnRandom() > 0.5)
        {
            work.flag |= 8U;
            work.set_st(work.st.z, work.st.y, work.st.x, work.st.w);
        }
        if (((int)node.flag & 2097152) != 0 || ((int)node.flag & 262144) != 0 && (double)AppMain.nnRandom() > 0.5)
        {
            work.flag |= 16U;
            work.set_st(work.st.x, work.st.w, work.st.z, work.st.y);
        }
        return(0);
    }
Esempio n. 6
0
 public static int _amInitLine(object p)
 {
     AppMain.AMS_AME_CREATE_PARAM      amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
     AppMain.AMS_AME_NODE_LINE         node = (AppMain.AMS_AME_NODE_LINE)amsAmeCreateParam.node;
     AppMain.AMS_AME_RUNTIME_WORK_LINE work = (AppMain.AMS_AME_RUNTIME_WORK_LINE)amsAmeCreateParam.work;
     work.time          = -node.start_time;
     work.length        = node.length_start;
     work.inside_width  = node.inside_width_start;
     work.outside_width = node.outside_width_start;
     AppMain.AMS_RGBA8888 insideColorStart = node.inside_color_start;
     insideColorStart.a = (byte)((int)insideColorStart.a * amsAmeCreateParam.ecb.transparency >> 8);
     work.set_inside_color(insideColorStart.color);
     AppMain.AMS_RGBA8888 outsideColorStart = node.outside_color_start;
     outsideColorStart.a = (byte)((int)outsideColorStart.a * amsAmeCreateParam.ecb.transparency >> 8);
     work.set_outside_color(outsideColorStart.color);
     AppMain.amVectorAdd(ref work.position, ref amsAmeCreateParam.parent_position.UnsafeValue, ref amsAmeCreateParam.position.UnsafeValue);
     AppMain.amVectorAdd(work.position, node.translate);
     AppMain.amVectorScale(work.velocity, amsAmeCreateParam.parent_velocity.Value, node.inheritance_rate);
     AppMain.amVectorAdd(work.velocity, amsAmeCreateParam.velocity.Value);
     if (((int)node.flag & 32768) != 0)
     {
         work.tex_time = 0.0f;
         work.tex_no   = 0;
         if (((int)node.flag & 524288) != 0)
         {
             work.tex_no = (int)(100.0 * (double)AppMain.nnRandom()) % node.tex_anim.key_num;
         }
         AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = node.tex_anim.key_buf[work.tex_no];
         work.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b);
     }
     else if (((int)node.flag & 8192) != 0)
     {
         work.set_st(node.cropping_l, node.cropping_t, node.cropping_r, node.cropping_b);
     }
     else
     {
         work.set_st(0.0f, 0.0f, 1f, 1f);
     }
     if (((int)node.flag & 1048576) != 0 || ((int)node.flag & 131072) != 0 && (double)AppMain.nnRandom() > 0.5)
     {
         work.flag |= 8U;
         work.set_st(work.st.z, work.st.y, work.st.x, work.st.w);
     }
     if (((int)node.flag & 2097152) != 0 || ((int)node.flag & 262144) != 0 && (double)AppMain.nnRandom() > 0.5)
     {
         work.flag |= 16U;
         work.set_st(work.st.x, work.st.w, work.st.z, work.st.y);
     }
     return(0);
 }
Esempio n. 7
0
 private static int _amInitDirectional(object p)
 {
     AppMain.AMS_AME_CREATE_PARAM             amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
     AppMain.AMS_AME_NODE_DIRECTIONAL         node = (AppMain.AMS_AME_NODE_DIRECTIONAL)amsAmeCreateParam.node;
     AppMain.AMS_AME_RUNTIME_WORK_DIRECTIONAL work = (AppMain.AMS_AME_RUNTIME_WORK_DIRECTIONAL)amsAmeCreateParam.work;
     work.time = -node.start_time;
     AppMain.amVectorAdd(ref work.position, amsAmeCreateParam.parent_position.Value, amsAmeCreateParam.position.Value);
     AppMain.amVectorAdd(ref work.position, node.translate);
     AppMain.amVectorScale(ref work.velocity, amsAmeCreateParam.parent_velocity.Value, node.inheritance_rate);
     AppMain.amVectorAdd(ref work.velocity, amsAmeCreateParam.velocity.Value);
     work.rotate = node.rotate;
     work.spread = node.spread;
     return(0);
 }
Esempio n. 8
0
    private static int _amInitOmni(object p)
    {
        AppMain.AMS_AME_CREATE_PARAM      amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
        AppMain.AMS_AME_NODE_OMNI         node = (AppMain.AMS_AME_NODE_OMNI)amsAmeCreateParam.node;
        AppMain.AMS_AME_RUNTIME_WORK_OMNI work = (AppMain.AMS_AME_RUNTIME_WORK_OMNI)amsAmeCreateParam.work;
        work.time = -node.start_time;
        AppMain.amVectorAdd(ref work.position, ref amsAmeCreateParam.parent_position.UnsafeValue, ref amsAmeCreateParam.position.UnsafeValue);
        AppMain.amVectorAdd(ref work.position, node.translate);
        AppMain.amVectorScale(ref work.velocity, amsAmeCreateParam.parent_velocity.Value, node.inheritance_rate);
        AppMain.amVectorAdd(ref work.velocity, amsAmeCreateParam.velocity.Value);
        work.rotate = node.rotate;
        float sizeRate = amsAmeCreateParam.ecb.size_rate;

        work.offset       = node.offset * sizeRate;
        work.offset_chaos = node.offset_chaos * sizeRate;
        return(0);
    }
Esempio n. 9
0
    public static void _amCreateParticle(AppMain.AMS_AME_CREATE_PARAM param)
    {
        AppMain.AMS_AME_RUNTIME_WORK_MODEL runtimeWorkModel = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)AppMain._amAllocRuntimeWork();
        param.work = (AppMain.AMS_AME_RUNTIME_WORK)runtimeWorkModel;
        int num = AppMain._am_particle_func[(AppMain.AMD_AME_NODE_TYPE(param.node) & (int)byte.MaxValue) << 2]((object)param);

        if ((double)runtimeWorkModel.time < 0.0)
        {
            AppMain._amConnectLinkToTail(param.runtime.work_tail, (AppMain.AMS_AME_LIST)runtimeWorkModel);
            ++param.runtime.work_num;
        }
        else
        {
            AppMain._amConnectLinkToTail(param.runtime.active_tail, (AppMain.AMS_AME_LIST)runtimeWorkModel);
            ++param.runtime.active_num;
        }
    }
Esempio n. 10
0
    private static int _amInitSurface(object p)
    {
        AppMain.AMS_AME_CREATE_PARAM         amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
        AppMain.AMS_AME_NODE_SURFACE         node = (AppMain.AMS_AME_NODE_SURFACE)amsAmeCreateParam.node;
        AppMain.AMS_AME_RUNTIME_WORK_SURFACE work = (AppMain.AMS_AME_RUNTIME_WORK_SURFACE)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.width        = node.width * sizeRate;
        work.height       = node.height * sizeRate;
        work.offset       = node.offset * sizeRate;
        work.offset_chaos = node.offset_chaos * sizeRate;
        return(0);
    }
Esempio n. 11
0
 public static int _amInitModel(object p)
 {
     AppMain.AMS_AME_CREATE_PARAM       amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
     AppMain.AMS_AME_NODE_MODEL         node = (AppMain.AMS_AME_NODE_MODEL)amsAmeCreateParam.node;
     AppMain.AMS_AME_RUNTIME_WORK_MODEL work = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)amsAmeCreateParam.work;
     work.time = -node.start_time;
     work.scale.Assign(node.scale_start);
     work.set_color(node.color_start.color);
     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);
     if (((int)node.flag & 4) != 0)
     {
         AppMain.NNS_VECTOR4D nnsVectoR4D = new AppMain.NNS_VECTOR4D();
         AppMain.amVectorRandom(nnsVectoR4D);
         AppMain.NNS_QUATERNION rotate = work.rotate;
         AppMain.amQuatRotAxisToQuat(ref rotate, nnsVectoR4D, (float)((double)AppMain.nnRandom() * 2.0 * 3.14159274101257));
         work.rotate = rotate;
     }
     else
     {
         work.rotate = node.rotate;
     }
     if (((int)node.flag & 8) != 0)
     {
         AppMain.NNS_VECTOR4D pDst = new AppMain.NNS_VECTOR4D();
         AppMain.amVectorRandom(pDst);
         work.set_rotate_axis(pDst.x, pDst.y, pDst.z, node.rotate_axis.w);
     }
     else
     {
         work.rotate_axis.Assign(node.rotate_axis);
     }
     return(0);
 }
Esempio n. 12
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);
    }
Esempio n. 13
0
    private static int _amUpdateOmni(object r)
    {
        AppMain.AMS_AME_RUNTIME           amsAmeRuntime1 = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_OMNI         node           = (AppMain.AMS_AME_NODE_OMNI)amsAmeRuntime1.node;
        AppMain.AMS_AME_RUNTIME_WORK_OMNI work           = (AppMain.AMS_AME_RUNTIME_WORK_OMNI)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(ref amEffectVel, work.velocity, AppMain._am_unit_time);
        AppMain.amVectorAdd(ref work.position, amEffectVel);
        float sizeRate = amsAmeRuntime1.ecb.size_rate;

        work.offset       = node.offset * sizeRate;
        work.offset_chaos = node.offset_chaos * sizeRate;
        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;
                    effectCreateParam.Clear();
                    AppMain.amVectorRandom(ref amEffectDirection);
                    AppMain.amVectorScale(ref amEffectVelocity, amEffectDirection, work.offset + work.offset_chaos * AppMain.nnRandom());
                    amEffectPosition.Assign(amEffectVelocity);
                    AppMain.amVectorScale(ref 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_SUPER_CLASS_ID(amsAmeRuntime2.node))
                    {
                    case 256:
                        AppMain._amCreateEmitter(effectCreateParam);
                        continue;

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

                    default:
                        continue;
                    }
                }
            }
        }
        return(0);
    }
Esempio n. 14
0
 private void amEffectCreateParticle(AppMain.AMS_AME_CREATE_PARAM param)
 {
     AppMain._amCreateParticle(param);
 }
Esempio n. 15
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);
    }
Esempio n. 16
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);
    }
Esempio n. 17
0
    private static int _amUpdateDirectional(object r)
    {
        AppMain.AMS_AME_RUNTIME                  amsAmeRuntime1         = (AppMain.AMS_AME_RUNTIME)r;
        AppMain.AMS_AME_NODE_DIRECTIONAL         node                   = (AppMain.AMS_AME_NODE_DIRECTIONAL)amsAmeRuntime1.node;
        AppMain.AMS_AME_RUNTIME_WORK_DIRECTIONAL runtimeWorkDirectional = new AppMain.AMS_AME_RUNTIME_WORK_DIRECTIONAL(amsAmeRuntime1.work);
        runtimeWorkDirectional.time += AppMain._am_unit_frame;
        if ((double)runtimeWorkDirectional.time <= 0.0)
        {
            return(0);
        }
        if ((double)node.life != -1.0 && (double)runtimeWorkDirectional.time >= (double)node.life)
        {
            return(1);
        }
        AppMain.NNS_VECTOR4D amEffectVel = AppMain._amEffect_vel;
        AppMain.amVectorScale(ref amEffectVel, runtimeWorkDirectional.velocity, AppMain._am_unit_time);
        AppMain.amVectorAdd(ref runtimeWorkDirectional.position, amEffectVel);
        runtimeWorkDirectional.spread += node.spread_variation * AppMain._am_unit_time;
        AppMain.NNS_MATRIX amEffectMtx = AppMain._amEffect_mtx;
        AppMain.nnMakeUnitMatrix(amEffectMtx);
        AppMain.amMatrixPush(amEffectMtx);
        AppMain.NNS_QUATERNION rotate = runtimeWorkDirectional.rotate;
        AppMain.amQuatToMatrix((AppMain.NNS_MATRIX)null, ref rotate, null);
        runtimeWorkDirectional.rotate = rotate;
        AppMain.AMS_AME_LIST next              = amsAmeRuntime1.child_head.next;
        AppMain.AMS_AME_LIST childTail         = amsAmeRuntime1.child_tail;
        AppMain.NNS_VECTOR4D amEffectPosition  = AppMain._amEffect_position;
        AppMain.NNS_VECTOR4D amEffectVelocity  = AppMain._amEffect_velocity;
        AppMain.NNS_VECTOR4D amEffectDirection = AppMain._amEffect_direction;
        for (; 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;
                    effectCreateParam.Clear();
                    AppMain.amEffectRandomConeVectorDeg(ref amEffectDirection, runtimeWorkDirectional.spread);
                    AppMain.amMatrixCalcPoint(amEffectDirection, amEffectDirection);
                    AppMain.amVectorScale(ref amEffectVelocity, ref amEffectDirection, node.offset + node.offset_chaos * AppMain.nnRandom());
                    amEffectPosition.Assign(amEffectVelocity);
                    AppMain.amVectorScale(ref amEffectVelocity, ref amEffectDirection, node.speed + node.speed_chaos * AppMain.nnRandom());
                    effectCreateParam.ecb             = amsAmeRuntime1.ecb;
                    effectCreateParam.runtime         = amsAmeRuntime2;
                    effectCreateParam.node            = amsAmeRuntime2.node;
                    effectCreateParam.parent_position = runtimeWorkDirectional.position;
                    effectCreateParam.parent_velocity = runtimeWorkDirectional.velocity;
                    effectCreateParam.position        = amEffectPosition;
                    effectCreateParam.velocity        = amEffectVelocity;
                    switch (AppMain.AMD_AME_SUPER_CLASS_ID(amsAmeRuntime2.node))
                    {
                    case 256:
                        AppMain._amCreateEmitter(effectCreateParam);
                        continue;

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

                    default:
                        continue;
                    }
                }
            }
        }
        AppMain.amMatrixPop();
        return(0);
    }
Esempio n. 18
0
    public static int _amInitPlane(object p)
    {
        AppMain.AMS_AME_CREATE_PARAM       amsAmeCreateParam = (AppMain.AMS_AME_CREATE_PARAM)p;
        AppMain.AMS_AME_NODE_PLANE         node = (AppMain.AMS_AME_NODE_PLANE)amsAmeCreateParam.node;
        AppMain.AMS_AME_RUNTIME_WORK_PLANE work = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)amsAmeCreateParam.work;
        work.time = -node.start_time;
        AppMain.AMS_RGBA8888 colorStart = node.color_start;
        work.set_color(colorStart.r, colorStart.g, colorStart.b, (byte)((int)colorStart.a * amsAmeCreateParam.ecb.transparency >> 8));
        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);
        if (((int)node.flag & 4) != 0)
        {
            AppMain.NNS_VECTOR4D nnsVectoR4D = new AppMain.NNS_VECTOR4D();
            float radian = (float)((double)AppMain.nnRandom() * 2.0 * 3.14159274101257);
            AppMain.amVectorRandom(nnsVectoR4D);
            AppMain.NNS_QUATERNION rotate = work.rotate;
            AppMain.amQuatRotAxisToQuat(ref rotate, nnsVectoR4D, radian);
            work.rotate = rotate;
            //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D);
        }
        else
        {
            work.rotate = node.rotate;
        }
        if (((int)node.flag & 8) != 0)
        {
            AppMain.NNS_VECTOR4D pDst = new AppMain.NNS_VECTOR4D();
            AppMain.amVectorRandom(pDst);
            work.set_rotate_axis(pDst.x, pDst.y, pDst.z, node.rotate_axis.w);
            //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(pDst);
        }
        else
        {
            work.rotate_axis.Assign(node.rotate_axis);
        }
        float z = node.size + node.size_chaos * AppMain.nnRandom();

        work.set_size(z * node.scale_x_start, z * node.scale_y_start, z, 0.0f);
        if (((int)node.flag & 32768) != 0)
        {
            work.tex_time = 0.0f;
            work.tex_no   = 0;
            if (((int)node.flag & 524288) != 0)
            {
                work.tex_no = (int)(100.0 * (double)AppMain.nnRandom()) % node.tex_anim.key_num;
            }
            AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = node.tex_anim.key_buf[work.tex_no];
            work.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b);
        }
        else if (((int)node.flag & 8192) != 0)
        {
            work.set_st(node.cropping_l, node.cropping_t, node.cropping_r, node.cropping_b);
        }
        else
        {
            work.set_st(0.0f, 0.0f, 1f, 1f);
        }
        if (((int)node.flag & 1048576) != 0 || ((int)node.flag & 131072) != 0 && (double)AppMain.nnRandom() > 0.5)
        {
            work.flag |= 8U;
            work.set_st(work.st.z, work.st.y, work.st.x, work.st.w);
        }
        if (((int)node.flag & 2097152) != 0 || ((int)node.flag & 262144) != 0 && (double)AppMain.nnRandom() > 0.5)
        {
            work.flag |= 16U;
            work.set_st(work.st.x, work.st.w, work.st.z, work.st.y);
        }
        return(0);
    }