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); } } } } }
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); } } }
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); } } } } }
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; } } } }
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; }
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; } } } } } }
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; }
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; }
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; }
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); } } } } } }
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); }