Exemplo n.º 1
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);
                 }
             }
         }
     }
 }
Exemplo n.º 2
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);
         }
     }
 }
Exemplo n.º 3
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);
                 }
             }
         }
     }
 }
Exemplo n.º 4
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;
             }
         }
     }
 }
Exemplo n.º 5
0
 public static void _amDelEntry(AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_ENTRY entry)
 {
     if (entry.prev == null)
     {
         ecb.entry_head = (AppMain.AMS_AME_ENTRY)entry.next;
     }
     else
     {
         entry.prev.next = entry.next;
     }
     if (entry.next == null)
     {
         ecb.entry_tail = (AppMain.AMS_AME_ENTRY)entry.prev;
     }
     else
     {
         entry.next.prev = entry.prev;
     }
     AppMain._am_entry_ref[AppMain._am_entry_free] = entry;
     ++AppMain._am_entry_free;
     if (AppMain._am_entry_free >= 512)
     {
         AppMain._am_entry_free = 0;
     }
     --ecb.entry_num;
 }
Exemplo n.º 6
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;
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 7
0
 public override void Clear()
 {
     this.next      = (AppMain.AMS_AME_LIST)null;
     this.prev      = (AppMain.AMS_AME_LIST)null;
     this.attribute = 0;
     this.priority  = 0;
     this.translate.Clear();
     this.rotate.Clear();
     this.bounding.Clear();
     this.transparency = 0;
     this.size_rate    = 0.0f;
     this.pObj         = (AppMain.NNS_OBJECT)null;
     this.entry_head   = (AppMain.AMS_AME_ENTRY)null;
     this.entry_tail   = (AppMain.AMS_AME_ENTRY)null;
     this.entry_num    = 0;
     this.drawState    = 0U;
     this.drawObjState = 0U;
     this.skip_update  = 0;
 }
Exemplo n.º 8
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;
 }
Exemplo n.º 9
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;
 }
Exemplo n.º 10
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);
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 11
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);
    }