Пример #1
0
    private static void GmTvxSetModelEx(
        AppMain.TVX_FILE model_tvx,
        AppMain.NNS_TEXLIST model_tex,
        ref AppMain.VecFx32 pos,
        ref AppMain.VecFx32 scale,
        uint flag,
        short rotate_z,
        ref AppMain.GMS_TVX_EX_WORK ex_work)
    {
        if (!AppMain.GmMainIsDrawEnable())
        {
            return;
        }
        AppMain.GMS_TVX_DRAW_WORK[] gmTvxDrawWork = AppMain.gm_tvx_draw_work;
        uint textureNum = AppMain.AoTvxGetTextureNum(model_tvx);

        for (uint tex_no = 0; tex_no < textureNum; ++tex_no)
        {
            uint vertexNum = AppMain.AoTvxGetVertexNum(model_tvx, tex_no);
            int  textureId = AppMain.AoTvxGetTextureId(model_tvx, tex_no);
            for (int index = 0; index < AppMain.GMD_TVX_DRAW_WORK_NUM; ++index)
            {
                if (gmTvxDrawWork[index].tex == null && gmTvxDrawWork[index].tex_id == -1 || gmTvxDrawWork[index].tex == model_tex && gmTvxDrawWork[index].tex_id == textureId && (gmTvxDrawWork[index].u_wrap == ex_work.u_wrap && gmTvxDrawWork[index].v_wrap == ex_work.v_wrap))
                {
                    if ((long)gmTvxDrawWork[index].stack_num >= (long)AppMain.GMD_TVX_DRAW_STACK_NUM)
                    {
                        return;
                    }
                    gmTvxDrawWork[index].tex          = model_tex;
                    gmTvxDrawWork[index].tex_id       = textureId;
                    gmTvxDrawWork[index].u_wrap       = ex_work.u_wrap;
                    gmTvxDrawWork[index].v_wrap       = ex_work.v_wrap;
                    gmTvxDrawWork[index].all_vtx_num += vertexNum;
                    AppMain.GMS_TVX_DRAW_STACK gmsTvxDrawStack = gmTvxDrawWork[index].stack[(int)gmTvxDrawWork[index].stack_num];
                    gmsTvxDrawStack.vtx       = AppMain.AoTvxGetVertex(model_tvx, tex_no);
                    gmsTvxDrawStack.vtx_num   = vertexNum;
                    gmsTvxDrawStack.pos       = pos;
                    gmsTvxDrawStack.scale     = scale;
                    gmsTvxDrawStack.disp_flag = flag;
                    gmsTvxDrawStack.rotate_z  = (int)rotate_z;
                    gmsTvxDrawStack.coord     = ex_work.coord;
                    gmsTvxDrawStack.color     = ex_work.color;
                    ++gmTvxDrawWork[index].stack_num;
                    break;
                }
            }
        }
    }
Пример #2
0
    // Token: 0x0600052B RID: 1323 RVA: 0x0002B790 File Offset: 0x00029990
    private static void GmTvxSetModelEx(AppMain.TVX_FILE model_tvx, AppMain.NNS_TEXLIST model_tex, ref AppMain.VecFx32 pos, ref AppMain.VecFx32 scale, uint flag, short rotate_z, ref AppMain.GMS_TVX_EX_WORK ex_work)
    {
        if (!AppMain.GmMainIsDrawEnable())
        {
            return;
        }
        AppMain.GMS_TVX_DRAW_WORK[] array = AppMain.gm_tvx_draw_work;
        uint num = AppMain.AoTvxGetTextureNum(model_tvx);

        for (uint num2 = 0U; num2 < num; num2 += 1U)
        {
            uint num3 = AppMain.AoTvxGetVertexNum(model_tvx, num2);
            int  num4 = AppMain.AoTvxGetTextureId(model_tvx, num2);
            int  i    = 0;
            while (i < AppMain.GMD_TVX_DRAW_WORK_NUM)
            {
                if ((array[i].tex == null && array[i].tex_id == -1) || (array[i].tex == model_tex && array[i].tex_id == num4 && array[i].u_wrap == ex_work.u_wrap && array[i].v_wrap == ex_work.v_wrap))
                {
                    if ((ulong)array[i].stack_num >= (ulong)((long)AppMain.GMD_TVX_DRAW_STACK_NUM))
                    {
                        return;
                    }
                    array[i].tex          = model_tex;
                    array[i].tex_id       = num4;
                    array[i].u_wrap       = ex_work.u_wrap;
                    array[i].v_wrap       = ex_work.v_wrap;
                    array[i].all_vtx_num += num3;
                    AppMain.GMS_TVX_DRAW_STACK gms_TVX_DRAW_STACK = array[i].stack[(int)((UIntPtr)array[i].stack_num)];
                    gms_TVX_DRAW_STACK.vtx       = AppMain.AoTvxGetVertex(model_tvx, num2);
                    gms_TVX_DRAW_STACK.vtx_num   = num3;
                    gms_TVX_DRAW_STACK.pos       = pos;
                    gms_TVX_DRAW_STACK.scale     = scale;
                    gms_TVX_DRAW_STACK.disp_flag = flag;
                    gms_TVX_DRAW_STACK.rotate_z  = (int)rotate_z;
                    gms_TVX_DRAW_STACK.coord     = ex_work.coord;
                    gms_TVX_DRAW_STACK.color     = ex_work.color;
                    array[i].stack_num          += 1U;
                    break;
                }
                else
                {
                    i++;
                }
            }
        }
    }
Пример #3
0
    // Token: 0x0600052C RID: 1324 RVA: 0x0002B92C File Offset: 0x00029B2C
    private static void GmTvxExecuteDraw()
    {
        AppMain.GMS_TVX_DRAW_WORK[] array = AppMain.gm_tvx_draw_work;
        if (array == null)
        {
            return;
        }
        if (array[0].tex == null)
        {
            return;
        }
        uint num = AppMain.GmMainGetLightColor();

        AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldSrc   = 770;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldDst   = 771;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldMode  = 32774;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.aTest    = 1;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.zMask    = 0;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.zTest    = 1;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.noSort   = 1;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.format3D = 4;
        uint num2 = 0U;

        while ((ulong)num2 < (ulong)((long)AppMain.GMD_TVX_DRAW_WORK_NUM))
        {
            if (array[(int)((UIntPtr)num2)].tex_id == -1)
            {
                return;
            }
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend  = 0;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.texlist = array[(int)((UIntPtr)num2)].tex;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.uwrap   = array[(int)((UIntPtr)num2)].u_wrap;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.vwrap   = array[(int)((UIntPtr)num2)].v_wrap;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.type    = 1;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.count   = (int)(array[(int)((UIntPtr)num2)].all_vtx_num + array[(int)((UIntPtr)num2)].stack_num * 2U - 2U);
            AppMain.NNS_PRIM3D_PCT_ARRAY nns_PRIM3D_PCT_ARRAY = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(AppMain._AMS_PARAM_DRAW_PRIMITIVE.count);
            AppMain.NNS_PRIM3D_PCT[]     buffer = nns_PRIM3D_PCT_ARRAY.buffer;
            int offset = nns_PRIM3D_PCT_ARRAY.offset;
            int num3   = 0;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.vtxPCT3D = nns_PRIM3D_PCT_ARRAY;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.texId    = array[(int)((UIntPtr)num2)].tex_id;
            SNNS_MATRIX snns_MATRIX  = default(SNNS_MATRIX);
            SNNS_MATRIX snns_MATRIX2 = default(SNNS_MATRIX);
            AppMain.nnMakeUnitMatrix(ref snns_MATRIX2);
            for (uint num4 = 0U; num4 < array[(int)((UIntPtr)num2)].stack_num; num4 += 1U)
            {
                AppMain.GMS_TVX_DRAW_STACK gms_TVX_DRAW_STACK = array[(int)((UIntPtr)num2)].stack[(int)((UIntPtr)num4)];
                if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_BLEND) != 0U)
                {
                    AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend = 1;
                }
                float num5 = AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.pos.x);
                float num6 = -AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.pos.y);
                float num7 = AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.pos.z);
                AppMain.nnMakeUnitMatrix(ref snns_MATRIX);
                if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_ROTATE) != 0U)
                {
                    AppMain.nnRotateZMatrix(ref snns_MATRIX, ref snns_MATRIX, (int)((ushort)gms_TVX_DRAW_STACK.rotate_z));
                }
                if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_SCALE) != 0U)
                {
                    AppMain.nnScaleMatrix(ref snns_MATRIX, ref snns_MATRIX, AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.scale.x), AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.scale.y), AppMain.FXM_FX32_TO_FLOAT(gms_TVX_DRAW_STACK.scale.z));
                }
                uint num8 = num;
                if ((gms_TVX_DRAW_STACK.disp_flag & AppMain.GMD_TVX_DISP_LIGHT_DISABLE) != 0U)
                {
                    num8 = gms_TVX_DRAW_STACK.color;
                }
                SNNS_VECTOR snns_VECTOR      = default(SNNS_VECTOR);
                int         num9             = num3 + offset;
                AppMain.AOS_TVX_VERTEX[] vtx = gms_TVX_DRAW_STACK.vtx;
                int num10 = 0;
                while ((long)num10 < (long)((ulong)gms_TVX_DRAW_STACK.vtx_num))
                {
                    snns_VECTOR.x = vtx[num10].x;
                    snns_VECTOR.y = vtx[num10].y;
                    snns_VECTOR.z = vtx[num10].z;
                    int num11 = num9 + num10;
                    if (gms_TVX_DRAW_STACK.disp_flag != 0U)
                    {
                        AppMain.nnTransformVector(ref buffer[num11].Pos, ref snns_MATRIX, ref snns_VECTOR);
                    }
                    else
                    {
                        buffer[num11].Pos.Assign(snns_VECTOR.x, snns_VECTOR.y, snns_VECTOR.z);
                    }
                    AppMain.NNS_PRIM3D_PCT[] array2 = buffer;
                    int num12 = num11;
                    array2[num12].Pos.x = array2[num12].Pos.x + num5;
                    AppMain.NNS_PRIM3D_PCT[] array3 = buffer;
                    int num13 = num11;
                    array3[num13].Pos.y = array3[num13].Pos.y + num6;
                    AppMain.NNS_PRIM3D_PCT[] array4 = buffer;
                    int num14 = num11;
                    array4[num14].Pos.z = array4[num14].Pos.z + num7;
                    buffer[num11].Tex.u = vtx[num10].u + gms_TVX_DRAW_STACK.coord.u;
                    buffer[num11].Tex.v = vtx[num10].v + gms_TVX_DRAW_STACK.coord.v;
                    buffer[num11].Col   = (vtx[num10].c & num8);
                    num10++;
                }
                num3 += (int)(gms_TVX_DRAW_STACK.vtx_num + 2U);
                if (num4 != 0U)
                {
                    int num15 = num9 - 1;
                    buffer[num15] = buffer[num15 + 1];
                }
                if (num4 != array[(int)((UIntPtr)num2)].stack_num - 1U)
                {
                    int num15 = num9 + (int)(gms_TVX_DRAW_STACK.vtx_num - 1U);
                    buffer[num15 + 1] = buffer[num15];
                }
            }
            AppMain.amMatrixPush(ref snns_MATRIX2);
            AppMain.ObjDraw3DNNDrawPrimitive(AppMain._AMS_PARAM_DRAW_PRIMITIVE);
            AppMain.amMatrixPop();
            array[(int)((UIntPtr)num2)].tex         = null;
            array[(int)((UIntPtr)num2)].tex_id      = -1;
            array[(int)((UIntPtr)num2)].stack_num   = 0U;
            array[(int)((UIntPtr)num2)].all_vtx_num = 0U;
            num2 += 1U;
        }
    }
Пример #4
0
    private static void GmTvxExecuteDraw()
    {
        AppMain.GMS_TVX_DRAW_WORK[] gmTvxDrawWork = AppMain.gm_tvx_draw_work;
        if (gmTvxDrawWork == null || gmTvxDrawWork[0].tex == null)
        {
            return;
        }
        uint lightColor = AppMain.GmMainGetLightColor();

        AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldSrc   = 770;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldDst   = 771;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.bldMode  = 32774;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.aTest    = (short)1;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.zMask    = (short)0;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.zTest    = (short)1;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.noSort   = (short)1;
        AppMain._AMS_PARAM_DRAW_PRIMITIVE.format3D = 4;
        for (uint index1 = 0; (long)index1 < (long)AppMain.GMD_TVX_DRAW_WORK_NUM && gmTvxDrawWork[(int)index1].tex_id != -1; ++index1)
        {
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend  = 0;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.texlist = gmTvxDrawWork[(int)index1].tex;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.uwrap   = gmTvxDrawWork[(int)index1].u_wrap;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.vwrap   = gmTvxDrawWork[(int)index1].v_wrap;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.type    = 1;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.count   = (int)gmTvxDrawWork[(int)index1].all_vtx_num + (int)gmTvxDrawWork[(int)index1].stack_num * 2 - 2;
            AppMain.NNS_PRIM3D_PCT_ARRAY nnsPriM3DPctArray = AppMain.amDrawAlloc_NNS_PRIM3D_PCT(AppMain._AMS_PARAM_DRAW_PRIMITIVE.count);
            AppMain.NNS_PRIM3D_PCT[]     buffer            = nnsPriM3DPctArray.buffer;
            int offset = nnsPriM3DPctArray.offset;
            int num1   = 0;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.vtxPCT3D = nnsPriM3DPctArray;
            AppMain._AMS_PARAM_DRAW_PRIMITIVE.texId    = gmTvxDrawWork[(int)index1].tex_id;
            AppMain.SNNS_MATRIX snnsMatrix1 = new AppMain.SNNS_MATRIX();
            AppMain.SNNS_MATRIX snnsMatrix2 = new AppMain.SNNS_MATRIX();
            AppMain.nnMakeUnitMatrix(ref snnsMatrix2);
            for (uint index2 = 0; index2 < gmTvxDrawWork[(int)index1].stack_num; ++index2)
            {
                AppMain.GMS_TVX_DRAW_STACK gmsTvxDrawStack = gmTvxDrawWork[(int)index1].stack[(int)index2];
                if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_BLEND) != 0)
                {
                    AppMain._AMS_PARAM_DRAW_PRIMITIVE.ablend = 1;
                }
                float num2 = AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.pos.x);
                float num3 = -AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.pos.y);
                float num4 = AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.pos.z);
                AppMain.nnMakeUnitMatrix(ref snnsMatrix1);
                if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_ROTATE) != 0)
                {
                    AppMain.nnRotateZMatrix(ref snnsMatrix1, ref snnsMatrix1, (int)(ushort)gmsTvxDrawStack.rotate_z);
                }
                if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_SCALE) != 0)
                {
                    AppMain.nnScaleMatrix(ref snnsMatrix1, ref snnsMatrix1, AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.scale.x), AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.scale.y), AppMain.FXM_FX32_TO_FLOAT(gmsTvxDrawStack.scale.z));
                }
                uint num5 = lightColor;
                if (((int)gmsTvxDrawStack.disp_flag & (int)AppMain.GMD_TVX_DISP_LIGHT_DISABLE) != 0)
                {
                    num5 = gmsTvxDrawStack.color;
                }
                AppMain.SNNS_VECTOR src = new AppMain.SNNS_VECTOR();
                int num6 = num1 + offset;
                AppMain.AOS_TVX_VERTEX[] vtx = gmsTvxDrawStack.vtx;
                for (int index3 = 0; (long)index3 < (long)gmsTvxDrawStack.vtx_num; ++index3)
                {
                    src.x = vtx[index3].x;
                    src.y = vtx[index3].y;
                    src.z = vtx[index3].z;
                    int index4 = num6 + index3;
                    if (gmsTvxDrawStack.disp_flag != 0U)
                    {
                        AppMain.nnTransformVector(ref buffer[index4].Pos, ref snnsMatrix1, ref src);
                    }
                    else
                    {
                        buffer[index4].Pos.Assign(src.x, src.y, src.z);
                    }
                    buffer[index4].Pos.x += num2;
                    buffer[index4].Pos.y += num3;
                    buffer[index4].Pos.z += num4;
                    buffer[index4].Tex.u  = vtx[index3].u + gmsTvxDrawStack.coord.u;
                    buffer[index4].Tex.v  = vtx[index3].v + gmsTvxDrawStack.coord.v;
                    buffer[index4].Col    = vtx[index3].c & num5;
                }
                num1 += (int)gmsTvxDrawStack.vtx_num + 2;
                if (index2 != 0U)
                {
                    int index3 = num6 - 1;
                    buffer[index3] = buffer[index3 + 1];
                }
                if ((int)index2 != (int)gmTvxDrawWork[(int)index1].stack_num - 1)
                {
                    int index3 = num6 + ((int)gmsTvxDrawStack.vtx_num - 1);
                    buffer[index3 + 1] = buffer[index3];
                }
            }
            AppMain.amMatrixPush(ref snnsMatrix2);
            AppMain.ObjDraw3DNNDrawPrimitive(AppMain._AMS_PARAM_DRAW_PRIMITIVE);
            AppMain.amMatrixPop();
            gmTvxDrawWork[(int)index1].tex         = (AppMain.NNS_TEXLIST)null;
            gmTvxDrawWork[(int)index1].tex_id      = -1;
            gmTvxDrawWork[(int)index1].stack_num   = 0U;
            gmTvxDrawWork[(int)index1].all_vtx_num = 0U;
        }
    }