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; } } } }
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); }
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); } } } } }
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); } } } } }
private static uint _amEffectSetMaterial( AppMain.AMS_AME_RUNTIME runtime, ref int blend, int NodeBlend) { AppMain.AMS_AME_NODE node = runtime.node; uint num = 0; if (((int)node.flag & 1) != 0) { num |= 8389632U; switch (NodeBlend) { case 50: blend = 0; break; case 162: blend = 1; break; case 674: blend = 2; break; } } return(num); }
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); }
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; }
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 AppMain.AMS_AME_RUNTIME _amAllocRuntime() { AppMain.AMS_AME_RUNTIME amsAmeRuntime = AppMain._am_runtime_ref[AppMain._am_runtime_alloc]; ++AppMain._am_runtime_alloc; if (AppMain._am_runtime_alloc >= 512) { AppMain._am_runtime_alloc = 0; } amsAmeRuntime.Clear(); return(amsAmeRuntime); }
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; } } } } } }
private static int _amEffectSetDrawMode( AppMain.AMS_AME_RUNTIME runtime, AppMain.AMS_PARAM_DRAW_PRIMITIVE param, int NodeBlend) { AppMain.AMS_AME_NODE node = runtime.node; int num = 0; param.ablend = num; param.aTest = ((int)node.flag & 2) == 0 ? (short)0 : (short)1; param.zMask = ((int)node.flag & 33554432) == 0 ? (short)0 : (short)1; param.zTest = ((int)node.flag & 16777216) != 0 ? (short)1 : (short)0; if (((int)node.flag & 1) != 0) { num = 1; param.ablend = num; switch (NodeBlend) { case 50: param.bldSrc = 770; param.bldDst = 771; param.bldMode = 32774; break; case 162: param.bldSrc = 770; param.bldDst = 1; param.bldMode = 32774; break; case 674: param.bldSrc = 770; param.bldDst = 1; param.bldMode = 32779; break; } } return(num); }
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 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 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); }
public static void _amFreeRuntime(AppMain.AMS_AME_RUNTIME runtime) { if (runtime.work != null) { AppMain.amEffectFreeRuntimeWork(runtime.work); } 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.amEffectFreeRuntimeWork(next1); } 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.amEffectFreeRuntimeWork(next2); } AppMain._am_runtime_ref[AppMain._am_runtime_free] = runtime; ++AppMain._am_runtime_free; if (AppMain._am_runtime_free < 512) { return; } AppMain._am_runtime_free = 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); } } } } } }
public static int _amDrawModel(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_MODEL node = (AppMain.AMS_AME_NODE_MODEL)runtime.node; AppMain.AMS_AME_ECB ecb = runtime.ecb; AppMain.NNS_RGBA color = new AppMain.NNS_RGBA(); int blend = -1; if (runtime.ecb.pObj == null) { return(0); } uint drawflag = AppMain._amEffectSetMaterial(runtime, ref blend, node.blend); float zBias = node.z_bias; AppMain.SNNS_VECTOR4D pDst1; AppMain.amVectorSet(out pDst1, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22); AppMain.AMS_AME_LIST activeTail = runtime.active_tail; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.NNS_MATRIX nnsMatrix = AppMain.GlobalPool <AppMain.NNS_MATRIX> .Alloc(); AppMain.NNS_VECTOR nnsVector = new AppMain.NNS_VECTOR(); AppMain.AMS_AME_RUNTIME_WORK_MODEL runtimeWorkModel; for (; next != activeTail; next = runtimeWorkModel.next) { runtimeWorkModel = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)(AppMain.AMS_AME_RUNTIME_WORK) next; AppMain.amMatrixPush(); AppMain.SNNS_VECTOR4D pDst2; AppMain.amVectorAdd(out pDst2, runtimeWorkModel.position, ref pDst1); AppMain.NNS_QUATERNION rotate = runtimeWorkModel.rotate; AppMain.amQuatMultiMatrix(ref rotate, ref pDst2); runtimeWorkModel.rotate = rotate; float scrollU = runtimeWorkModel.scroll_u; float scrollV = runtimeWorkModel.scroll_v; uint num = drawflag | 268435456U; if ((double)scrollU >= 1.0) { scrollU -= (float)(int)scrollU; } else { while ((double)scrollU < 0.0) { ++scrollU; } } if ((double)scrollV >= 1.0) { scrollV -= (float)(int)scrollV; } else { while ((double)scrollV < 0.0) { ++scrollV; } } drawflag = num | 3145728U; color.a = (float)runtimeWorkModel.color.a * 0.003921569f; color.r = (float)runtimeWorkModel.color.r * 0.003921569f; color.g = (float)runtimeWorkModel.color.g * 0.003921569f; color.b = (float)runtimeWorkModel.color.b * 0.003921569f; AppMain.NNS_MATRIX current = AppMain.amMatrixGetCurrent(); nnsMatrix.Assign(current); AppMain.nnScaleMatrix(nnsMatrix, nnsMatrix, runtimeWorkModel.scale.x, runtimeWorkModel.scale.y, runtimeWorkModel.scale.z); AppMain.nnCopyMatrix(current, nnsMatrix); nnsVector.x = runtimeWorkModel.scale.x; nnsVector.y = runtimeWorkModel.scale.y; nnsVector.z = runtimeWorkModel.scale.z; AppMain.amDrawObjectSetMaterial(runtime.ecb.drawObjState, ecb.pObj, runtime.texlist, nnsVector, ref color, scrollU, scrollV, blend, drawflag); runtimeWorkModel.set_scale(nnsVector); AppMain.amMatrixPop(); } //AppMain.GlobalPool<AppMain.NNS_VECTOR>.Release(nnsVector); AppMain.GlobalPool <AppMain.NNS_MATRIX> .Release(nnsMatrix); return(0); }
public static int _amDrawSprite(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_SPRITE node = (AppMain.AMS_AME_NODE_SPRITE)runtime.node; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; AppMain.AMS_PARAM_DRAW_PRIMITIVE setParam = AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Alloc(); int num1 = AppMain._amEffectSetDrawMode(runtime, setParam, node.blend); AppMain.SNNS_VECTOR snnsVector1 = new AppMain.SNNS_VECTOR(); AppMain.SNNS_VECTOR snnsVector2 = new AppMain.SNNS_VECTOR(); AppMain.SNNS_VECTOR snnsVector3 = new AppMain.SNNS_VECTOR(); float zBias = node.z_bias; AppMain.amVectorSet(ref snnsVector1, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22); AppMain.amVectorSet(ref snnsVector2, AppMain._am_ef_worldViewMtx.M10, AppMain._am_ef_worldViewMtx.M11, AppMain._am_ef_worldViewMtx.M12); AppMain.amVectorSet(ref snnsVector3, AppMain._am_ef_worldViewMtx.M00, AppMain._am_ef_worldViewMtx.M01, AppMain._am_ef_worldViewMtx.M02); AppMain.SNNS_VECTOR snnsVector4 = new AppMain.SNNS_VECTOR(); AppMain.SNNS_VECTOR snnsVector5 = new AppMain.SNNS_VECTOR(); AppMain.SNNS_VECTOR snnsVector6 = new AppMain.SNNS_VECTOR(); if (((int)node.flag & 4096) != 0) { AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(6 * (int)runtime.active_num); AppMain.NNS_PRIM3D_PCT[] buffer = nnsPriM3DPctArray.buffer; int offset = nnsPriM3DPctArray.offset; float num2 = 0.0f; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_SPRITE runtimeWorkSprite = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)(AppMain.AMS_AME_RUNTIME_WORK) next; float pSn; float pCs; AppMain.amSinCos(runtimeWorkSprite.twist, out pSn, out pCs); AppMain.amVectorGetAverage(ref snnsVector5, ref snnsVector3, ref snnsVector2, pCs, -pSn); AppMain.amVectorGetAverage(ref snnsVector6, ref snnsVector3, ref snnsVector2, pSn, pCs); AppMain.nnScaleVector(ref snnsVector5, ref snnsVector5, runtimeWorkSprite.size.x); AppMain.nnScaleVector(ref snnsVector6, ref snnsVector6, runtimeWorkSprite.size.y); AppMain.amVectorAdd(ref snnsVector4, runtimeWorkSprite.position, ref snnsVector1); num2 = AppMain.nnDistanceVector(ref snnsVector4, AppMain._am_ef_camPos); AppMain.nnSubtractVector(ref buffer[offset].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnAddVector(ref buffer[offset].Pos, ref buffer[offset].Pos, ref snnsVector6); AppMain.nnAddVector(ref buffer[offset + 1].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnAddVector(ref buffer[offset + 1].Pos, ref buffer[offset + 1].Pos, ref snnsVector6); AppMain.nnSubtractVector(ref buffer[offset + 2].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnSubtractVector(ref buffer[offset + 2].Pos, ref buffer[offset + 2].Pos, ref snnsVector6); AppMain.nnAddVector(ref buffer[offset + 5].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnSubtractVector(ref buffer[offset + 5].Pos, ref buffer[offset + 5].Pos, ref snnsVector6); buffer[offset + 5].Col = AppMain.AMD_RGBA8888(runtimeWorkSprite.color.r, runtimeWorkSprite.color.g, runtimeWorkSprite.color.b, runtimeWorkSprite.color.a); buffer[offset].Col = buffer[offset + 1].Col = buffer[offset + 2].Col = buffer[offset + 5].Col; buffer[offset].Tex.u = runtimeWorkSprite.st.x; buffer[offset].Tex.v = runtimeWorkSprite.st.y; buffer[offset + 1].Tex.u = runtimeWorkSprite.st.z; buffer[offset + 1].Tex.v = runtimeWorkSprite.st.y; buffer[offset + 2].Tex.u = runtimeWorkSprite.st.x; buffer[offset + 2].Tex.v = runtimeWorkSprite.st.w; buffer[offset + 5].Tex.u = runtimeWorkSprite.st.z; buffer[offset + 5].Tex.v = runtimeWorkSprite.st.w; buffer[offset + 3] = buffer[offset + 1]; buffer[offset + 4] = buffer[offset + 2]; offset += 6; } setParam.format3D = 4; setParam.type = 0; setParam.vtxPCT3D = nnsPriM3DPctArray; setParam.texlist = runtime.texlist; setParam.texId = (int)node.texture_id; setParam.count = 6 * (int)runtime.active_num; setParam.ablend = num1; setParam.sortZ = num2; AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam); } else { AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray1 = AppMain.amDrawAlloc_NNS_PRIM3D_PC(6 * (int)runtime.active_num); int index = 0; AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray2 = nnsPriM3DPcArray1; float num2 = 0.0f; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_SPRITE runtimeWorkSprite = (AppMain.AMS_AME_RUNTIME_WORK_SPRITE)(AppMain.AMS_AME_RUNTIME_WORK) next; float pSn; float pCs; AppMain.amSinCos(runtimeWorkSprite.twist, out pSn, out pCs); AppMain.amVectorGetAverage(ref snnsVector5, ref snnsVector3, ref snnsVector2, pCs, -pSn); AppMain.amVectorGetAverage(ref snnsVector6, ref snnsVector3, ref snnsVector2, pSn, pCs); AppMain.nnScaleVector(ref snnsVector5, ref snnsVector5, runtimeWorkSprite.size.x); AppMain.nnScaleVector(ref snnsVector6, ref snnsVector6, runtimeWorkSprite.size.y); AppMain.amVectorAdd(ref snnsVector4, runtimeWorkSprite.position, ref snnsVector1); num2 = AppMain.nnDistanceVector(ref snnsVector4, AppMain._am_ef_camPos); AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnAddVector(ref nnsPriM3DPcArray1[index].Pos, ref nnsPriM3DPcArray1[index].Pos, ref snnsVector6); AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 1].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 1].Pos, ref nnsPriM3DPcArray1[index + 1].Pos, ref snnsVector6); AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 2].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 2].Pos, ref nnsPriM3DPcArray1[index + 2].Pos, ref snnsVector6); AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 5].Pos, ref snnsVector4, ref snnsVector5); AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 5].Pos, ref nnsPriM3DPcArray1[index + 5].Pos, ref snnsVector6); nnsPriM3DPcArray1[index + 5].Col = AppMain.AMD_RGBA8888(runtimeWorkSprite.color.r, runtimeWorkSprite.color.g, runtimeWorkSprite.color.b, runtimeWorkSprite.color.a); nnsPriM3DPcArray1[index].Col = nnsPriM3DPcArray1[index + 1].Col = nnsPriM3DPcArray1[index + 2].Col = nnsPriM3DPcArray1[index + 5].Col; nnsPriM3DPcArray1[index + 3] = nnsPriM3DPcArray1[index + 1]; nnsPriM3DPcArray1[index + 4] = nnsPriM3DPcArray1[index + 2]; index += 6; } setParam.format3D = 2; setParam.type = 0; setParam.vtxPC3D = nnsPriM3DPcArray2; setParam.texlist = runtime.texlist; setParam.texId = -1; setParam.count = 6 * (int)runtime.active_num; setParam.ablend = num1; setParam.sortZ = num2; AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam); } AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Release(setParam); return(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); }
public static int _amDrawPlane(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_PLANE node = (AppMain.AMS_AME_NODE_PLANE)runtime.node; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; AppMain.AMS_PARAM_DRAW_PRIMITIVE setParam = AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Alloc(); int num1 = AppMain._amEffectSetDrawMode(runtime, setParam, node.blend); AppMain.SNNS_VECTOR4D pDst = new AppMain.SNNS_VECTOR4D(); float zBias = node.z_bias; AppMain.amVectorSet(out pDst, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22); AppMain.SNNS_VECTOR snnsVector = new AppMain.SNNS_VECTOR(); if (((int)node.flag & 4096) != 0) { AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(6 * (int)runtime.active_num); AppMain.NNS_PRIM3D_PCT[] buffer = nnsPriM3DPctArray.buffer; int offset = nnsPriM3DPctArray.offset; float num2 = 0.0f; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)(AppMain.AMS_AME_RUNTIME_WORK) next; AppMain.amMatrixPush(); AppMain.NNS_MATRIX current = AppMain.amMatrixGetCurrent(); float x = runtimeWorkPlane.size.x; float y = runtimeWorkPlane.size.y; AppMain.amVectorAdd(ref snnsVector, runtimeWorkPlane.position, ref pDst); AppMain.NNS_QUATERNION rotate = runtimeWorkPlane.rotate; AppMain.amQuatMultiMatrix(ref rotate, ref snnsVector); runtimeWorkPlane.rotate = rotate; num2 = AppMain.nnDistanceVector(ref snnsVector, AppMain._am_ef_camPos); buffer[offset].Pos.Assign(-x, y, 0.0f); buffer[offset + 1].Pos.Assign(x, y, 0.0f); buffer[offset + 2].Pos.Assign(-x, -y, 0.0f); buffer[offset + 5].Pos.Assign(x, -y, 0.0f); AppMain.nnTransformVector(ref buffer[offset].Pos, current, ref buffer[offset].Pos); AppMain.nnTransformVector(ref buffer[offset + 1].Pos, current, ref buffer[offset + 1].Pos); AppMain.nnTransformVector(ref buffer[offset + 2].Pos, current, ref buffer[offset + 2].Pos); AppMain.nnTransformVector(ref buffer[offset + 5].Pos, current, ref buffer[offset + 5].Pos); buffer[offset + 5].Col = AppMain.AMD_RGBA8888(runtimeWorkPlane.color.r, runtimeWorkPlane.color.g, runtimeWorkPlane.color.b, runtimeWorkPlane.color.a); buffer[offset].Col = buffer[offset + 1].Col = buffer[offset + 2].Col = buffer[offset + 5].Col; buffer[offset].Tex.u = runtimeWorkPlane.st.x; buffer[offset].Tex.v = runtimeWorkPlane.st.y; buffer[offset + 1].Tex.u = runtimeWorkPlane.st.z; buffer[offset + 1].Tex.v = runtimeWorkPlane.st.y; buffer[offset + 2].Tex.u = runtimeWorkPlane.st.x; buffer[offset + 2].Tex.v = runtimeWorkPlane.st.w; buffer[offset + 5].Tex.u = runtimeWorkPlane.st.z; buffer[offset + 5].Tex.v = runtimeWorkPlane.st.w; buffer[offset + 3] = buffer[offset + 1]; buffer[offset + 4] = buffer[offset + 2]; offset += 6; AppMain.amMatrixPop(); } setParam.format3D = 4; setParam.type = 0; setParam.vtxPCT3D = nnsPriM3DPctArray; setParam.texlist = runtime.texlist; setParam.texId = (int)node.texture_id; setParam.count = 6 * (int)runtime.active_num; setParam.ablend = num1; setParam.sortZ = num2; AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam); } else { AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray1 = AppMain.amDrawAlloc_NNS_PRIM3D_PC(6 * (int)runtime.active_num); int index = 0; AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray2 = nnsPriM3DPcArray1; float num2 = 0.0f; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)(AppMain.AMS_AME_RUNTIME_WORK) next; AppMain.amMatrixPush(); AppMain.NNS_MATRIX current = AppMain.amMatrixGetCurrent(); float x = runtimeWorkPlane.size.x; float y = runtimeWorkPlane.size.y; AppMain.amVectorAdd(ref snnsVector, runtimeWorkPlane.position, ref pDst); AppMain.NNS_QUATERNION rotate = runtimeWorkPlane.rotate; AppMain.amQuatMultiMatrix(ref rotate, ref snnsVector); runtimeWorkPlane.rotate = rotate; num2 = AppMain.nnDistanceVector(ref snnsVector, AppMain._am_ef_camPos); nnsPriM3DPcArray1[index].Pos.Assign(-x, y, 0.0f); nnsPriM3DPcArray1[index + 1].Pos.Assign(x, y, 0.0f); nnsPriM3DPcArray1[index + 2].Pos.Assign(-x, -y, 0.0f); nnsPriM3DPcArray1[index + 5].Pos.Assign(x, -y, 0.0f); AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index].Pos, current, ref nnsPriM3DPcArray1[index].Pos); AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index + 1].Pos, current, ref nnsPriM3DPcArray1[index + 1].Pos); AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index + 2].Pos, current, ref nnsPriM3DPcArray1[index + 2].Pos); AppMain.nnTransformVector(ref nnsPriM3DPcArray1[index + 5].Pos, current, ref nnsPriM3DPcArray1[index + 5].Pos); nnsPriM3DPcArray1[index + 5].Col = AppMain.AMD_RGBA8888(runtimeWorkPlane.color.r, runtimeWorkPlane.color.g, runtimeWorkPlane.color.b, runtimeWorkPlane.color.a); nnsPriM3DPcArray1[index].Col = nnsPriM3DPcArray1[index + 1].Col = nnsPriM3DPcArray1[index + 2].Col = nnsPriM3DPcArray1[index + 5].Col; nnsPriM3DPcArray1[index + 3] = nnsPriM3DPcArray1[index + 1]; nnsPriM3DPcArray1[index + 4] = nnsPriM3DPcArray1[index + 2]; index += 6; AppMain.amMatrixPop(); } setParam.format3D = 2; setParam.type = 0; setParam.vtxPC3D = nnsPriM3DPcArray2; setParam.texlist = runtime.texlist; setParam.texId = -1; setParam.count = 6 * (int)runtime.active_num; setParam.ablend = num1; setParam.sortZ = num2; AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam); } AppMain.GlobalPool <AppMain.AMS_PARAM_DRAW_PRIMITIVE> .Release(setParam); return(0); }
public static int _amUpdatePlane(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_PLANE node = (AppMain.AMS_AME_NODE_PLANE)runtime.node; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; int transparency = runtime.ecb.transparency; float num1; float num2; if ((double)node.life >= 0.0) { num1 = node.life; num2 = 1f / num1; } else { num1 = float.MaxValue; num2 = 0.0f; } float sizeRate = runtime.ecb.size_rate; float num3 = node.scale_x_start * sizeRate; float num4 = node.scale_y_start * sizeRate; float num5 = node.scale_x_end * sizeRate; float num6 = node.scale_y_end * sizeRate; AppMain.NNS_VECTOR4D amEffectVel = AppMain._amEffect_vel; AppMain.NNS_QUATERNION nnsQuaternion = new AppMain.NNS_QUATERNION(); AppMain.NNS_VECTOR4D pVec = new AppMain.NNS_VECTOR4D(); for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_PLANE runtimeWorkPlane = (AppMain.AMS_AME_RUNTIME_WORK_PLANE)(AppMain.AMS_AME_RUNTIME_WORK) next; runtimeWorkPlane.time += AppMain._am_unit_frame; float rate = runtimeWorkPlane.time * num2; AppMain.amVectorScale(amEffectVel, runtimeWorkPlane.velocity, AppMain._am_unit_time); AppMain.amVectorAdd(runtimeWorkPlane.position, amEffectVel); if ((double)runtimeWorkPlane.time >= (double)num1) { if (runtime.spawn_runtime != null) { AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)(AppMain.AMS_AME_LIST) runtimeWorkPlane); } AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtimeWorkPlane); --runtime.active_num; AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)(AppMain.AMS_AME_LIST) runtimeWorkPlane); } else { pVec.x = runtimeWorkPlane.rotate_axis.x; pVec.y = runtimeWorkPlane.rotate_axis.y; pVec.z = runtimeWorkPlane.rotate_axis.z; pVec.w = runtimeWorkPlane.rotate_axis.w; AppMain.amQuatRotAxisToQuat(ref nnsQuaternion, pVec, pVec.w * AppMain._am_unit_time); AppMain.NNS_QUATERNION rotate = runtimeWorkPlane.rotate; AppMain.amQuatMulti(ref rotate, ref nnsQuaternion, ref rotate); runtimeWorkPlane.rotate = rotate; float num7 = 1f - rate; float num8 = (float)((double)num3 * (double)num7 + (double)num5 * (double)rate); float num9 = (float)((double)num4 * (double)num7 + (double)num6 * (double)rate); runtimeWorkPlane.set_size(runtimeWorkPlane.size.z * num8, runtimeWorkPlane.size.z * num9, runtimeWorkPlane.size.z, runtimeWorkPlane.size.w); AppMain.AMS_RGBA8888 pCO; AppMain.amEffectLerpColor(out pCO, ref node.color_start, ref node.color_end, rate); pCO.a = (byte)((int)pCO.a * transparency >> 8); runtimeWorkPlane.set_color(pCO.color); if (((int)node.flag & 32768) != 0) { AppMain.AMS_AME_TEX_ANIM texAnim = node.tex_anim; if (((int)runtimeWorkPlane.flag & 2) == 0) { runtimeWorkPlane.tex_time += AppMain._am_unit_frame; if ((double)runtimeWorkPlane.tex_time >= (double)texAnim.key_buf[runtimeWorkPlane.tex_no].time) { runtimeWorkPlane.tex_time = 0.0f; ++runtimeWorkPlane.tex_no; if (runtimeWorkPlane.tex_no == texAnim.key_num) { if (((int)node.flag & 65536) != 0) { runtimeWorkPlane.tex_no = 0; } else { runtimeWorkPlane.tex_no = texAnim.key_num - 1; runtimeWorkPlane.flag |= 2U; } } } } AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = texAnim.key_buf[runtimeWorkPlane.tex_no]; runtimeWorkPlane.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b); if (((int)runtimeWorkPlane.flag & 8) != 0) { runtimeWorkPlane.set_st(runtimeWorkPlane.st.z, runtimeWorkPlane.st.y, runtimeWorkPlane.st.x, runtimeWorkPlane.st.w); } if (((int)runtimeWorkPlane.flag & 16) != 0) { runtimeWorkPlane.set_st(runtimeWorkPlane.st.x, runtimeWorkPlane.st.w, runtimeWorkPlane.st.z, runtimeWorkPlane.st.y); } } else if (((int)node.flag & 16384) != 0) { float num10 = node.scroll_u * AppMain._am_unit_time; float num11 = node.scroll_v * AppMain._am_unit_time; if (((int)runtimeWorkPlane.flag & 8) != 0) { num10 = -num10; } if (((int)runtimeWorkPlane.flag & 16) != 0) { num11 = -num11; } runtimeWorkPlane.set_st(runtimeWorkPlane.st.x + num10, runtimeWorkPlane.st.y + num11, runtimeWorkPlane.st.z + num10, runtimeWorkPlane.st.w + num11); } } } //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(pVec); return(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); }
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); }
public static int _amUpdateModel(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_MODEL node = (AppMain.AMS_AME_NODE_MODEL)runtime.node; AppMain.AMS_AME_RUNTIME_WORK_MODEL next1 = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)(AppMain.AMS_AME_RUNTIME_WORK) runtime.active_head.next; AppMain.AMS_AME_LIST next2 = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; int transparency = runtime.ecb.transparency; float num1; float num2; if ((double)node.life >= 0.0) { num1 = node.life; num2 = 1f / num1; } else { num1 = float.MaxValue; num2 = 0.0f; } AppMain.NNS_VECTOR4D nnsVectoR4D1 = new AppMain.NNS_VECTOR4D(); AppMain.NNS_VECTOR4D nnsVectoR4D2 = new AppMain.NNS_VECTOR4D(); AppMain.amVectorScale(nnsVectoR4D1, node.scale_start, runtime.ecb.size_rate); AppMain.amVectorScale(nnsVectoR4D2, node.scale_end, runtime.ecb.size_rate); AppMain.AMS_AME_RUNTIME_WORK_MODEL runtimeWorkModel; for (; next2 != activeTail; next2 = runtimeWorkModel.next) { runtimeWorkModel = (AppMain.AMS_AME_RUNTIME_WORK_MODEL)(AppMain.AMS_AME_RUNTIME_WORK) next2; runtimeWorkModel.time += AppMain._am_unit_frame; float num3 = runtimeWorkModel.time * num2; AppMain.NNS_VECTOR4D nnsVectoR4D3 = new AppMain.NNS_VECTOR4D(); AppMain.amVectorScale(nnsVectoR4D3, runtimeWorkModel.velocity, AppMain._am_unit_time); AppMain.amVectorAdd(runtimeWorkModel.position, nnsVectoR4D3); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D3); if ((double)runtimeWorkModel.time >= (double)num1) { if (runtime.spawn_runtime != null) { AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)runtimeWorkModel); } AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)runtimeWorkModel); --runtime.active_num; AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)runtimeWorkModel); } else { AppMain.NNS_QUATERNION nnsQuaternion = new AppMain.NNS_QUATERNION(); AppMain.NNS_VECTOR4D nnsVectoR4D4 = new AppMain.NNS_VECTOR4D(); AppMain.Vector4D_Buf rotateAxis = runtimeWorkModel.rotate_axis; nnsVectoR4D4.x = rotateAxis.x; nnsVectoR4D4.y = rotateAxis.y; nnsVectoR4D4.z = rotateAxis.z; nnsVectoR4D4.w = rotateAxis.w; AppMain.amQuatRotAxisToQuat(ref nnsQuaternion, nnsVectoR4D4, nnsVectoR4D4.w * AppMain._am_unit_time); AppMain.NNS_QUATERNION rotate = runtimeWorkModel.rotate; AppMain.amQuatMulti(ref rotate, ref rotate, ref nnsQuaternion); runtimeWorkModel.rotate = rotate; AppMain.amVectorGetInner(nnsVectoR4D4, nnsVectoR4D1, nnsVectoR4D2, num3); runtimeWorkModel.set_scale(nnsVectoR4D4); AppMain.AMS_RGBA8888 pCO; AppMain.amEffectLerpColor(out pCO, ref node.color_start, ref node.color_end, num3); pCO.a = (byte)((int)pCO.a * transparency >> 8); runtimeWorkModel.set_color(pCO.color); runtimeWorkModel.scroll_u += node.scroll_u * AppMain._am_unit_time; runtimeWorkModel.scroll_v += node.scroll_v * AppMain._am_unit_time; //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D4); } } //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D1); //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D2); return(0); }
public static int _amUpdateLine(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_LINE node = (AppMain.AMS_AME_NODE_LINE)runtime.node; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; int transparency = runtime.ecb.transparency; float num1; float num2; if ((double)node.life >= 0.0) { num1 = node.life; num2 = 1f / num1; } else { num1 = 1E+38f; num2 = 0.0f; } float sizeRate = runtime.ecb.size_rate; float num3 = node.length_start * sizeRate; float num4 = node.length_end * sizeRate; float num5 = node.inside_width_start * sizeRate; float num6 = node.outside_width_start * sizeRate; float num7 = node.inside_width_end * sizeRate; float num8 = node.outside_width_end * sizeRate; AppMain.NNS_VECTOR4D nnsVectoR4D = new AppMain.NNS_VECTOR4D(); for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)(AppMain.AMS_AME_RUNTIME_WORK) next; ameRuntimeWorkLine.time += AppMain._am_unit_frame; float rate = ameRuntimeWorkLine.time * num2; AppMain.amVectorScale(nnsVectoR4D, ameRuntimeWorkLine.velocity, AppMain._am_unit_time); AppMain.amVectorAdd(ameRuntimeWorkLine.position, nnsVectoR4D); if ((double)ameRuntimeWorkLine.time >= (double)num1) { if (runtime.spawn_runtime != null) { AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)ameRuntimeWorkLine); } AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)ameRuntimeWorkLine); --runtime.active_num; AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)ameRuntimeWorkLine); } else { float num9 = 1f - rate; ameRuntimeWorkLine.length = (float)((double)num3 * (double)num9 + (double)num4 * (double)rate); ameRuntimeWorkLine.inside_width = (float)((double)num5 * (double)num9 + (double)num7 * (double)rate); ameRuntimeWorkLine.outside_width = (float)((double)num6 * (double)num9 + (double)num8 * (double)rate); AppMain.AMS_RGBA8888 pCO; AppMain.amEffectLerpColor(out pCO, ref node.inside_color_start, ref node.inside_color_end, rate); pCO.a = (byte)((int)pCO.a * transparency >> 8); ameRuntimeWorkLine.set_inside_color(pCO.color); AppMain.amEffectLerpColor(out pCO, ref node.outside_color_start, ref node.outside_color_end, rate); pCO.a = (byte)((int)pCO.a * transparency >> 8); ameRuntimeWorkLine.set_outside_color(pCO.color); if (((int)node.flag & 32768) != 0) { AppMain.AMS_AME_TEX_ANIM texAnim = node.tex_anim; if (((int)ameRuntimeWorkLine.flag & 2) == 0) { ameRuntimeWorkLine.tex_time += AppMain._am_unit_frame; if ((double)ameRuntimeWorkLine.tex_time >= (double)texAnim.key_buf[ameRuntimeWorkLine.tex_no].time) { ameRuntimeWorkLine.tex_time = 0.0f; ++ameRuntimeWorkLine.tex_no; if (ameRuntimeWorkLine.tex_no == texAnim.key_num) { if (((int)node.flag & 65536) != 0) { ameRuntimeWorkLine.tex_no = 0; } else { ameRuntimeWorkLine.tex_no = texAnim.key_num - 1; ameRuntimeWorkLine.flag |= 2U; } } } } AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = texAnim.key_buf[ameRuntimeWorkLine.tex_no]; ameRuntimeWorkLine.set_st(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b); if (((int)ameRuntimeWorkLine.flag & 8) != 0) { ameRuntimeWorkLine.set_st(ameRuntimeWorkLine.st.z, ameRuntimeWorkLine.st.y, ameRuntimeWorkLine.st.x, ameRuntimeWorkLine.st.w); } if (((int)ameRuntimeWorkLine.flag & 16) != 0) { ameRuntimeWorkLine.set_st(ameRuntimeWorkLine.st.x, ameRuntimeWorkLine.st.w, ameRuntimeWorkLine.st.z, ameRuntimeWorkLine.st.y); } } else if (((int)node.flag & 16384) != 0) { float num10 = node.scroll_u * AppMain._am_unit_time; float num11 = node.scroll_v * AppMain._am_unit_time; if (((int)ameRuntimeWorkLine.flag & 8) != 0) { num10 = -num10; } if (((int)ameRuntimeWorkLine.flag & 16) != 0) { num11 = -num11; } ameRuntimeWorkLine.set_st(ameRuntimeWorkLine.st.x + num10, ameRuntimeWorkLine.st.w + num10, ameRuntimeWorkLine.st.z + num11, ameRuntimeWorkLine.st.y + num11); } } } //AppMain.GlobalPool<AppMain.NNS_VECTOR4D>.Release(nnsVectoR4D); return(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); }
public static int _amDrawLine(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_LINE node = (AppMain.AMS_AME_NODE_LINE)runtime.node; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; AppMain.AMS_PARAM_DRAW_PRIMITIVE setParam = AppMain.amDrawAlloc_AMS_PARAM_DRAW_PRIMITIVE(); int num1 = AppMain._amEffectSetDrawMode(runtime, setParam, node.blend); AppMain.NNS_VECTOR4D amDrawLineOffset = AppMain._amDrawLine_offset; AppMain.NNS_VECTOR4D amDrawLineEye = AppMain._amDrawLine_eye; float zBias = node.z_bias; AppMain.amVectorSet(amDrawLineOffset, zBias * AppMain._am_ef_worldViewMtx.M20, zBias * AppMain._am_ef_worldViewMtx.M21, zBias * AppMain._am_ef_worldViewMtx.M22); AppMain.amVectorSet(amDrawLineEye, AppMain._am_ef_worldViewMtx.M20, AppMain._am_ef_worldViewMtx.M21, AppMain._am_ef_worldViewMtx.M22); AppMain.NNS_VECTOR4D amDrawLinePos0 = AppMain._amDrawLine_pos0; AppMain.NNS_VECTOR4D amDrawLinePos1 = AppMain._amDrawLine_pos1; AppMain.NNS_VECTOR amDrawLineVel = (AppMain.NNS_VECTOR)AppMain._amDrawLine_vel; AppMain.NNS_VECTOR amDrawLineCross = (AppMain.NNS_VECTOR)AppMain._amDrawLine_cross; if (((int)node.flag & 4096) != 0) { AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(6 * (int)runtime.active_num); AppMain.NNS_PRIM3D_PCT[] buffer = nnsPriM3DPctArray.buffer; int offset = nnsPriM3DPctArray.offset; float num2 = 0.0f; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)(AppMain.AMS_AME_RUNTIME_WORK) next; double num3 = (double)AppMain.amVectorUnit(amDrawLineVel, ameRuntimeWorkLine.velocity); AppMain.nnScaleVector((AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel, ameRuntimeWorkLine.length); AppMain.amVectorAdd(amDrawLinePos1, ameRuntimeWorkLine.position, amDrawLineOffset); AppMain.nnAddVector((AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos1); num2 = AppMain.nnDistanceVector((AppMain.NNS_VECTOR)amDrawLinePos0, AppMain._am_ef_camPos); AppMain.nnCrossProductVector(amDrawLineCross, amDrawLineVel, (AppMain.NNS_VECTOR)amDrawLineEye); AppMain.nnNormalizeVector(amDrawLineCross, amDrawLineCross); AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.outside_width); AppMain.nnSubtractVector(ref buffer[offset].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel); AppMain.nnAddVector(ref buffer[offset + 1].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel); AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.inside_width); AppMain.nnSubtractVector(ref buffer[offset + 2].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel); AppMain.nnAddVector(ref buffer[offset + 5].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel); buffer[offset + 1].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.outside_color.r, ameRuntimeWorkLine.outside_color.g, ameRuntimeWorkLine.outside_color.b, ameRuntimeWorkLine.outside_color.a); buffer[offset].Col = buffer[offset + 1].Col; buffer[offset + 5].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.inside_color.r, ameRuntimeWorkLine.inside_color.g, ameRuntimeWorkLine.inside_color.b, ameRuntimeWorkLine.inside_color.a); buffer[offset + 2].Col = buffer[offset + 5].Col; AppMain.Vector4D_Quat st = ameRuntimeWorkLine.st; buffer[offset].Tex.u = st.x; buffer[offset].Tex.v = st.y; buffer[offset + 1].Tex.u = st.z; buffer[offset + 1].Tex.v = st.y; buffer[offset + 2].Tex.u = st.x; buffer[offset + 2].Tex.v = st.w; buffer[offset + 5].Tex.u = st.z; buffer[offset + 5].Tex.v = st.w; buffer[offset + 3] = buffer[offset + 1]; buffer[offset + 4] = buffer[offset + 2]; offset += 6; } setParam.format3D = 4; setParam.type = 0; setParam.vtxPCT3D = nnsPriM3DPctArray; setParam.texlist = runtime.texlist; setParam.texId = (int)node.texture_id; setParam.count = 6 * (int)runtime.active_num; setParam.ablend = num1; setParam.sortZ = num2; AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam); } else { AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray1 = new AppMain.NNS_PRIM3D_PC[6 * (int)runtime.active_num]; int index = 0; AppMain.NNS_PRIM3D_PC[] nnsPriM3DPcArray2 = nnsPriM3DPcArray1; float num2 = 0.0f; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_LINE ameRuntimeWorkLine = (AppMain.AMS_AME_RUNTIME_WORK_LINE)(AppMain.AMS_AME_RUNTIME_WORK) next; double num3 = (double)AppMain.amVectorUnit(amDrawLineVel, ameRuntimeWorkLine.velocity); AppMain.nnScaleVector((AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel, ameRuntimeWorkLine.length); AppMain.amVectorAdd(amDrawLinePos1, ameRuntimeWorkLine.position, amDrawLineOffset); AppMain.nnAddVector((AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos0, (AppMain.NNS_VECTOR)amDrawLinePos1); num2 = AppMain.nnDistanceVector((AppMain.NNS_VECTOR)amDrawLinePos0, AppMain._am_ef_camPos); AppMain.nnCrossProductVector(amDrawLineCross, amDrawLineVel, (AppMain.NNS_VECTOR)amDrawLineEye); AppMain.nnNormalizeVector(amDrawLineCross, amDrawLineCross); AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.outside_width); AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel); AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 1].Pos, (AppMain.NNS_VECTOR)amDrawLinePos0, amDrawLineVel); AppMain.nnScaleVector(amDrawLineVel, amDrawLineCross, ameRuntimeWorkLine.inside_width); AppMain.nnSubtractVector(ref nnsPriM3DPcArray1[index + 2].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel); AppMain.nnAddVector(ref nnsPriM3DPcArray1[index + 5].Pos, (AppMain.NNS_VECTOR)amDrawLinePos1, amDrawLineVel); nnsPriM3DPcArray1[index + 1].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.outside_color.r, ameRuntimeWorkLine.outside_color.g, ameRuntimeWorkLine.outside_color.b, ameRuntimeWorkLine.outside_color.a); nnsPriM3DPcArray1[index].Col = nnsPriM3DPcArray1[index + 1].Col; nnsPriM3DPcArray1[index + 5].Col = AppMain.AMD_RGBA8888(ameRuntimeWorkLine.inside_color.r, ameRuntimeWorkLine.inside_color.g, ameRuntimeWorkLine.inside_color.b, ameRuntimeWorkLine.inside_color.a); nnsPriM3DPcArray1[index + 2].Col = nnsPriM3DPcArray1[index + 5].Col; nnsPriM3DPcArray1[index + 3] = nnsPriM3DPcArray1[index + 1]; nnsPriM3DPcArray1[index + 4] = nnsPriM3DPcArray1[index + 2]; index += 6; } setParam.format3D = 2; setParam.type = 0; setParam.vtxPC3D = nnsPriM3DPcArray2; setParam.texlist = runtime.texlist; setParam.texId = -1; setParam.count = 6 * (int)runtime.active_num; setParam.ablend = num1; setParam.sortZ = num2; AppMain.amDrawPrimitive3D(runtime.ecb.drawState, setParam); } return(0); }
public static int _amUpdateSimpleSprite(object r) { AppMain.AMS_AME_RUNTIME runtime = (AppMain.AMS_AME_RUNTIME)r; AppMain.AMS_AME_NODE_SPRITE node = (AppMain.AMS_AME_NODE_SPRITE)runtime.node; AppMain.AMS_AME_LIST next = runtime.active_head.next; AppMain.AMS_AME_LIST activeTail = runtime.active_tail; int transparency = runtime.ecb.transparency; float num1; float num2; if ((double)node.life >= 0.0) { num1 = node.life; num2 = 1f / num1; } else { num1 = float.MaxValue; num2 = 0.0f; } float sizeRate = runtime.ecb.size_rate; float num3 = node.scale_x_start * sizeRate; float num4 = node.scale_y_start * sizeRate; float num5 = node.scale_x_end * sizeRate; float num6 = node.scale_y_end * sizeRate; for (; next != activeTail; next = next.next) { AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE workSimpleSprite = (AppMain.AMS_AME_RUNTIME_WORK_SIMPLE_SPRITE)(AppMain.AMS_AME_RUNTIME_WORK) next; workSimpleSprite.time += AppMain._am_unit_frame; float rate = workSimpleSprite.time * num2; AppMain.NNS_VECTOR4D amEffectVel = AppMain._amEffect_vel; AppMain.amVectorScale(amEffectVel, workSimpleSprite.velocity, AppMain._am_unit_time); AppMain.amVectorAdd(workSimpleSprite.position, amEffectVel); if ((double)workSimpleSprite.time >= (double)num1) { if (runtime.spawn_runtime != null) { AppMain._amCreateSpawnParticle(runtime, (AppMain.AMS_AME_RUNTIME_WORK)workSimpleSprite); } AppMain.amEffectDisconnectLink((AppMain.AMS_AME_LIST)workSimpleSprite); --runtime.active_num; AppMain.amEffectFreeRuntimeWork((AppMain.AMS_AME_RUNTIME_WORK)workSimpleSprite); } else { float num7 = 1f - rate; float num8 = (float)((double)num3 * (double)num7 + (double)num5 * (double)rate); float num9 = (float)((double)num4 * (double)num7 + (double)num6 * (double)rate); AppMain.Vector4D_Buf size = workSimpleSprite.size; workSimpleSprite.set_size(size.z * num8, size.z * num9, size.z, size.w); AppMain.AMS_RGBA8888 pCO; AppMain.amEffectLerpColor(out pCO, ref node.color_start, ref node.color_end, rate); pCO.a = (byte)((int)pCO.a * transparency >> 8); workSimpleSprite.set_color(pCO.color); if (((int)node.flag & 32768) != 0) { AppMain.AMS_AME_TEX_ANIM texAnim = node.tex_anim; if (((int)workSimpleSprite.flag & 2) == 0) { workSimpleSprite.tex_time += AppMain._am_unit_frame; if ((double)workSimpleSprite.tex_time >= (double)texAnim.key_buf[workSimpleSprite.tex_no].time) { workSimpleSprite.tex_time = 0.0f; ++workSimpleSprite.tex_no; if (workSimpleSprite.tex_no == texAnim.key_num) { if (((int)node.flag & 65536) != 0) { workSimpleSprite.tex_no = 0; } else { workSimpleSprite.tex_no = texAnim.key_num - 1; workSimpleSprite.flag |= 2U; } } } } AppMain.AMS_AME_TEX_ANIM_KEY amsAmeTexAnimKey = texAnim.key_buf[workSimpleSprite.tex_no]; Vector4 vector4 = new Vector4(amsAmeTexAnimKey.l, amsAmeTexAnimKey.t, amsAmeTexAnimKey.r, amsAmeTexAnimKey.b); if (((int)workSimpleSprite.flag & 8) != 0) { float x = vector4.X; vector4.X = vector4.Z; vector4.Z = x; } if (((int)workSimpleSprite.flag & 16) != 0) { float y = vector4.Y; vector4.Y = vector4.W; vector4.W = y; } workSimpleSprite.set_st(vector4.X, vector4.Y, vector4.Z, vector4.W); } else if (((int)node.flag & 16384) != 0) { float num10 = node.scroll_u * AppMain._am_unit_time; float num11 = node.scroll_v * AppMain._am_unit_time; if (((int)workSimpleSprite.flag & 8) != 0) { num10 = -num10; } if (((int)workSimpleSprite.flag & 16) != 0) { num11 = -num11; } AppMain.Vector4D_Quat st = workSimpleSprite.st; Vector4 vector4 = new Vector4(st.x + num10, st.y + num11, st.z + num10, st.w + num11); workSimpleSprite.set_st(vector4.X, vector4.Y, vector4.Z, vector4.W); } } } return(0); }