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 _amApplyDrag( AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_NODE node, AppMain.AMS_AME_RUNTIME_WORK work) { AppMain.AMS_AME_NODE_DRAG amsAmeNodeDrag = (AppMain.AMS_AME_NODE_DRAG)node; float amUnitTime = AppMain._am_unit_time; AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D(); AppMain.NNS_VECTOR4D nnsVectoR4D2 = new AppMain.NNS_VECTOR4D(); AppMain.NNS_VECTOR4D nnsVectoR4D3 = new AppMain.NNS_VECTOR4D(); AppMain.amVectorCopy(nnsVectoR4D3, amsAmeNodeDrag.position); if (((int)amsAmeNodeDrag.flag & 1) != 0) { AppMain.amVectorAdd(nnsVectoR4D3, ecb.translate); } AppMain.amVectorSub(nnsVectoR4D2, work.position, nnsVectoR4D3); double num = (double)AppMain.amVectorUnit(nnsVectoR4D2); AppMain.amVectorScale(nnsVectoR4D1, nnsVectoR4D2, (float)((double)amsAmeNodeDrag.magnitude * (double)amUnitTime * (double)amUnitTime * 0.5)); AppMain.amVectorAdd(work.position, nnsVectoR4D1); AppMain.amVectorScale(nnsVectoR4D1, nnsVectoR4D2, amsAmeNodeDrag.magnitude * amUnitTime); AppMain.amVectorAdd(work.velocity, nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D3); }
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 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); } } } } }
private void amEffectUpdateGroup(int attr, int flag) { uint num1 = (uint)(attr & -65536); uint num2 = (uint)(attr & (int)ushort.MaxValue); if (num1 == 0U) { num1 = 4294901760U; } switch (flag) { case 0: for (AppMain.AMS_AME_ECB next = (AppMain.AMS_AME_ECB)AppMain._am_ecb_head.next; next != AppMain._am_ecb_tail; next = (AppMain.AMS_AME_ECB)next.next) { if (((long)next.attribute & (long)num1) != 0L && ((long)next.attribute & (long)num2) != 0L) { AppMain.amEffectUpdate(next); } } break; case 1: for (AppMain.AMS_AME_ECB next = (AppMain.AMS_AME_ECB)AppMain._am_ecb_head.next; next != AppMain._am_ecb_tail; next = (AppMain.AMS_AME_ECB)next.next) { if (((long)next.attribute & (long)num1 | (long)next.attribute & (long)num2) == (long)attr) { AppMain.amEffectUpdate(next); } } break; } }
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 void Clear() { this.ecb = (AppMain.AMS_AME_ECB)null; this.texlist = (AppMain.NNS_TEXLIST)null; this.texlistbuf = (object)null; this.texlist_data_work = (AppMain.OBS_DATA_WORK)null; this._object = (AppMain.NNS_OBJECT)null; this.object_data_work = (AppMain.OBS_DATA_WORK)null; this.eff = (object)null; this.eff_data_work = (AppMain.OBS_DATA_WORK)null; this.ambtex = (object)null; this.ambtex_data_work = (AppMain.OBS_DATA_WORK)null; this.model = (object)null; this.model_data_work = (AppMain.OBS_DATA_WORK)null; this.flag = 0U; this.command_state = 0U; this.disp_rot.Clear(); this.disp_ofst.Clear(); this.dup_draw_ofst.Clear(); this.user_dir_quat.Clear(); this.user_attr = 0; this.tex_reg_index = 0; this.model_reg_index = 0; this.speed = 0.0f; }
public static void _amApplyVortex( AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_NODE node, AppMain.AMS_AME_RUNTIME_WORK work) { AppMain.AMS_AME_NODE_VORTEX amsAmeNodeVortex = (AppMain.AMS_AME_NODE_VORTEX)node; AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D(); 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.amVectorCopy(nnsVectoR4D1, amsAmeNodeVortex.position); AppMain.amVectorCopy(nnsVectoR4D3, amsAmeNodeVortex.axis); if (((int)amsAmeNodeVortex.flag & 1) != 0) { AppMain.amVectorAdd(nnsVectoR4D1, ecb.translate); } if (((int)amsAmeNodeVortex.flag & 2) != 0) { AppMain.amQuatMultiVector(nnsVectoR4D3, nnsVectoR4D3, ref ecb.rotate, null); } AppMain.amVectorSub(nnsVectoR4D2, work.position, nnsVectoR4D1); AppMain.amVectorOuterProduct(nnsVectoR4D4, nnsVectoR4D3, nnsVectoR4D2); AppMain.amVectorScale(nnsVectoR4D2, nnsVectoR4D4, AppMain._am_unit_time); AppMain.amVectorAdd(work.velocity, nnsVectoR4D2); AppMain.amVectorOuterProduct(nnsVectoR4D4, nnsVectoR4D3, nnsVectoR4D4); AppMain.amVectorScale(nnsVectoR4D2, nnsVectoR4D4, AppMain._am_unit_time); AppMain.amVectorAdd(work.velocity, nnsVectoR4D2); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D3); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D4); }
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 amEffectSetObject( AppMain.AMS_AME_ECB ecb, AppMain.NNS_OBJECT object_, int state) { ecb.pObj = object_; ecb.drawObjState = (uint)state; }
public static void amEffectExecute() { for (AppMain.AMS_AME_ECB next = (AppMain.AMS_AME_ECB)AppMain._am_ecb_head.next; next != AppMain._am_ecb_tail; next = (AppMain.AMS_AME_ECB)next.next) { if (next.entry_num < 0) { AppMain._amEffectFinalize(next); } } }
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); }
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; }
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 static void _amApplyNoise( AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_NODE node, AppMain.AMS_AME_RUNTIME_WORK work) { AppMain.AMS_AME_NODE_NOISE amsAmeNodeNoise = (AppMain.AMS_AME_NODE_NOISE)node; float num = amsAmeNodeNoise.magnitude * AppMain._am_unit_time; AppMain.SNNS_VECTOR4D pSrc; pSrc.x = (AppMain.nnRandom() - 0.5f) * num * amsAmeNodeNoise.axis.x; pSrc.y = (AppMain.nnRandom() - 0.5f) * num * amsAmeNodeNoise.axis.y; pSrc.z = (AppMain.nnRandom() - 0.5f) * num * amsAmeNodeNoise.axis.z; pSrc.w = 1f; AppMain.amVectorAdd(work.position, ref pSrc); }
public static void _amApplyUniform( AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_NODE node, AppMain.AMS_AME_RUNTIME_WORK work) { AppMain.AMS_AME_NODE_UNIFORM amsAmeNodeUniform = (AppMain.AMS_AME_NODE_UNIFORM)node; float amUnitTime = AppMain._am_unit_time; AppMain.NNS_VECTOR4D nnsVectoR4D = new AppMain.NNS_VECTOR4D(); AppMain.amVectorScale(nnsVectoR4D, amsAmeNodeUniform.direction, amsAmeNodeUniform.magnitude * amUnitTime); if (((int)amsAmeNodeUniform.flag & 2) != 0) { AppMain.amQuatMultiVector(nnsVectoR4D, nnsVectoR4D, ref ecb.rotate, null); } AppMain.amVectorAdd(work.position, nnsVectoR4D); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D); }
public static void _amApplyGravity( AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_NODE node, AppMain.AMS_AME_RUNTIME_WORK work) { AppMain.AMS_AME_NODE_GRAVITY amsAmeNodeGravity = (AppMain.AMS_AME_NODE_GRAVITY)node; float amUnitTime = AppMain._am_unit_time; AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D(); AppMain.NNS_VECTOR4D nnsVectoR4D2 = new AppMain.NNS_VECTOR4D(); AppMain.amVectorCopy(nnsVectoR4D2, amsAmeNodeGravity.direction); if (((int)amsAmeNodeGravity.flag & 2) != 0) { AppMain.amQuatMultiVector(nnsVectoR4D2, nnsVectoR4D2, ref ecb.rotate, null); } AppMain.amVectorScale(nnsVectoR4D1, nnsVectoR4D2, (float)((double)amsAmeNodeGravity.magnitude * (double)amUnitTime * (double)amUnitTime * 0.5)); AppMain.amVectorAdd(work.position, nnsVectoR4D1); AppMain.amVectorScale(nnsVectoR4D1, nnsVectoR4D2, amsAmeNodeGravity.magnitude * amUnitTime); AppMain.amVectorAdd(work.velocity, nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2); }
public static void _amApplyRadial( AppMain.AMS_AME_ECB ecb, AppMain.AMS_AME_NODE node, AppMain.AMS_AME_RUNTIME_WORK work) { AppMain.AMS_AME_NODE_RADIAL amsAmeNodeRadial = (AppMain.AMS_AME_NODE_RADIAL)node; float amUnitTime = AppMain._am_unit_time; AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D(); AppMain.NNS_VECTOR4D nnsVectoR4D2 = new AppMain.NNS_VECTOR4D(); AppMain.amVectorCopy(nnsVectoR4D2, amsAmeNodeRadial.position); if (((int)amsAmeNodeRadial.flag & 1) != 0) { AppMain.amVectorAdd(nnsVectoR4D2, ecb.translate); } AppMain.amVectorSub(nnsVectoR4D1, work.position, nnsVectoR4D2); float num1 = 1f / (float)Math.Pow((double)AppMain.amVectorScalor(nnsVectoR4D1), (double)amsAmeNodeRadial.attenuation); double num2 = (double)AppMain.amVectorScaleUnit(nnsVectoR4D1, nnsVectoR4D1, amsAmeNodeRadial.magnitude * num1 * amUnitTime); AppMain.amVectorAdd(work.position, nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2); }
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; }
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; }
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 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); }
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); } } } } } }
private void amEffectDrawGroup(AppMain.NNS_TEXLIST texlist, int attr, uint state, int flag) { if (AppMain._am_enable_draw == 0) { return; } uint num1 = (uint)(attr & -65536); uint num2 = (uint)(attr & (int)ushort.MaxValue); if (num1 == 0U) { num1 = 4294901760U; } switch (flag) { case 0: for (AppMain.AMS_AME_ECB next = (AppMain.AMS_AME_ECB)AppMain._am_ecb_head.next; next != AppMain._am_ecb_tail; next = (AppMain.AMS_AME_ECB)next.next) { if (0L != ((long)next.attribute & (long)num1) && 0L != ((long)next.attribute & (long)num2)) { AppMain.amEffectDraw(next, texlist, state); } } break; case 1: for (AppMain.AMS_AME_ECB next = (AppMain.AMS_AME_ECB)AppMain._am_ecb_head.next; next != AppMain._am_ecb_tail; next = (AppMain.AMS_AME_ECB)next.next) { if (((long)next.attribute & (long)num1 | (long)next.attribute & (long)num2) == (long)attr) { AppMain.amEffectDraw(next, texlist, state); } } break; } }
public static int amEffectIsDelete(AppMain.AMS_AME_ECB ecb) { return(ecb.entry_num >= 0 ? 0 : 1); }
public static void amEffectDelete(AppMain.AMS_AME_ECB ecb) { ecb.entry_num = -1; }
private void amEffectRotate(AppMain.AMS_AME_ECB ecb, int x, int y, int z) { AppMain.NNS_QUATERNION nnsQuaternion = new AppMain.NNS_QUATERNION(); AppMain.amQuatEulerToQuatXYZ(ref nnsQuaternion, x, y, z); this.amEffectRotate(ecb, ref nnsQuaternion); }
private void amEffectSetTransparency(AppMain.AMS_AME_ECB ecb, float t) { ecb.transparency = (int)((double)t * 256.0); }
public static void amEffectSetRotate(AppMain.AMS_AME_ECB ecb, ref AppMain.NNS_QUATERNION q) { AppMain.amEffectSetRotate(ecb, ref q, 0); }
public static void amEffectSetSizeRate(AppMain.AMS_AME_ECB ecb, float t) { ecb.size_rate = t; }