public override uint OnCollision(HitDetection hit)
    {
        int          iVar2;
        int          iVar4;
        Vehicle      vVar9;
        VigTransform auStack32;

        if (hit.self.type == 2 && (hit.self.flags & 0x4000000) == 0)
        {
            vVar9 = (Vehicle)hit.self;

            if (vVar9.id < 0)
            {
                GameManager.instance.FUN_15AA8(~vVar9.id, 8, 255, 64, 16);
            }

            vVar9.physics1.X += physics1.Z * 6;
            vVar9.physics1.Z += physics2.X * 6;
            iVar4             = (int)GameManager.FUN_2AC5C();
            vVar9.physics1.Y += (((iVar4 << 12) >> 15) - 0x800) * 0x80;

            if ((flags & 0x1000000) == 0)
            {
                flags     |= 0x1000000;
                vVar9.flip = 200;
                iVar2      = GameManager.instance.FUN_1DD9C();
                GameManager.instance.FUN_1E580(iVar2, vData.sndList, 3, vVar9.vTransform.position);
                GameManager.instance.FUN_2F798(this, hit);
                auStack32          = new VigTransform();
                auStack32.position = Utilities.FUN_24148(vTransform, hit.position);
                auStack32.rotation = Utilities.FUN_2A5EC(hit.normal1);
                LevelManager.instance.FUN_4E56C(auStack32, 123);
            }
        }

        return(0);
    }
Beispiel #2
0
    public Vehicle DAT_BC;        //0xBC

    //FUN_80 (TSUNAMI.DLL)
    public override uint UpdateW(int arg1, int arg2)
    {
        byte       bVar1;
        Ballistic  puVar2;
        int        iVar3;
        TileData   tVar3;
        VigObject  oVar3;
        int        iVar4;
        int        iVar6;
        int        iVar7;
        int        iVar8;
        int        iVar9;
        VigObject  oVar9;
        Vehicle    vVar9;
        Vector3Int uStack192;
        Vector3Int uStack176;
        Vector3Int iStack160;
        Vector3Int iStack144;
        Vector3Int iStack128;
        Matrix3x3  uStack112;
        Vector3Int iStack80;
        Vector3Int sStack64;
        Vector3Int uStack56;
        Vector3Int uStack48;
        Vector3Int uStack40;

        oVar9 = DAT_80;

        if (arg1 != 2)
        {
            if (arg1 < 3)
            {
                if (arg1 != 0)
                {
                    return(0);
                }

                bVar1 = DAT_19;
                DAT_A4++;

                if (4 < bVar1)
                {
                    if (bVar1 != 5)
                    {
                        return(0);
                    }

                    iStack144 = new Vector3Int(DAT_AC, DAT_AC, DAT_AC);
                    iStack128 = new Vector3Int(DAT_B0, DAT_B0, DAT_B0);
                    Utilities.FUN_2449C(DAT_84_2.rotation, iStack144, ref vTransform.rotation);
                    Utilities.FUN_2449C(DAT_84_2.rotation, iStack128, ref oVar9.vTransform.rotation);
                    iVar9  = DAT_AC - 245;
                    iVar3  = DAT_B0 + 245;
                    DAT_AC = iVar9;
                    DAT_B0 = iVar3;
                    return(0);
                }

                if (bVar1 == 0)
                {
                    uStack192 = new Vector3Int(DAT_AC, DAT_AC, DAT_AC);
                    uStack176 = new Vector3Int(DAT_B0, DAT_B0, DAT_B0);
                    Utilities.FUN_2449C(DAT_84_2.rotation, uStack192, ref vTransform.rotation);
                    Utilities.FUN_2449C(DAT_84_2.rotation, uStack176, ref oVar9.vTransform.rotation);
                    iVar9  = DAT_AC + 122;
                    iVar3  = DAT_B0 - 122;
                    DAT_AC = iVar9;
                    DAT_B0 = iVar3;
                }

                iStack144 = new Vector3Int(vTransform.rotation.V02, 0, vTransform.rotation.V22);

                if (DAT_19 == 1)
                {
                    iVar3 = DAT_B4 + 1017;
                }
                else
                {
                    if (DAT_19 != 3)
                    {
                        goto LAB_25C;
                    }

                    iVar3 = DAT_B4 - 2034;
                }

                DAT_B4 = iVar3;
LAB_25C:
                iStack160   = new Vector3Int();
                iStack160.x = iStack144.x * DAT_B4 >> 12;
                iStack160.z = iStack144.z * DAT_B4 >> 12;
                iStack160.y = 0x10000;
                iStack128   = new Vector3Int();
                iStack128.x = vTransform.position.x + iStack160.x;
                iStack128.y = vTransform.position.y + 0x10000;
                iStack128.z = vTransform.position.z + iStack160.z;
                tVar3       = GameManager.instance.terrain.GetTileByPosition((uint)iStack128.x, (uint)iStack128.z);

                if (tVar3.DAT_10[3] != 7)
                {
                    vTransform.position = iStack128;
                }

                iVar3 = FUN_2CFBC(vTransform.position);

                if (iVar3 - 0x5000 < vTransform.position.y)
                {
                    vTransform.position.y = iVar3 - 0x5000;
                }

                if (GameManager.instance.DAT_DB0 != 0)
                {
                    if (iVar3 > GameManager.instance.DAT_DB0)
                    {
                        vTransform.position.y = GameManager.instance.DAT_DB0;
                    }
                }

                oVar9.vTransform.position = Utilities.FUN_24148(vTransform, screen);
                vVar9 = (Vehicle)oVar9;
                oVar3 = vVar9.target;

                if (oVar3 != null)
                {
                    iStack80   = new Vector3Int();
                    iStack80.x = oVar3.screen.x - vTransform.position.x;
                    iStack80.y = oVar3.screen.y - vTransform.position.y;
                    iStack80.z = oVar3.screen.z - vTransform.position.z;
                    Utilities.FUN_29FC8(iStack80, out uStack48);
                    sStack64 = new Vector3Int(uStack48.z, 0, -uStack48.x);
                    iVar3    = uStack48.y * sStack64.z;

                    if (iVar3 < 0)
                    {
                        iVar3 += 4095;
                    }

                    iVar6      = uStack48.z;
                    iVar4      = iVar6 * iVar6 - uStack48.x * sStack64.z;
                    uStack56   = new Vector3Int();
                    uStack56.x = iVar3 >> 12;

                    if (iVar4 < 0)
                    {
                        iVar4 += 4095;
                    }

                    iVar6      = -uStack48.y * iVar6;
                    uStack56.y = iVar4 >> 12;

                    if (iVar6 < 0)
                    {
                        iVar6 += 4095;
                    }

                    uStack56.z    = iVar6 >> 12;
                    uStack112     = new Matrix3x3();
                    uStack112.V00 = (short)sStack64.x;
                    uStack112.V01 = (short)uStack56.x;
                    uStack112.V02 = (short)uStack48.x;
                    uStack112.V10 = (short)sStack64.y;
                    uStack112.V11 = (short)uStack56.y;
                    uStack112.V12 = (short)uStack48.y;
                    uStack112.V20 = (short)sStack64.z;
                    uStack112.V21 = (short)uStack56.z;
                    uStack112.V22 = (short)uStack48.z;
                    uStack112     = Utilities.MatrixNormal(uStack112);
                    Utilities.FUN_248C4(vTransform.rotation, uStack112, out uStack112);
                    iVar3 = 64;

                    if (DAT_19 == 2)
                    {
                        iVar3 = 256;
                    }

                    iVar6 = uStack112.V02;
                    iVar4 = -iVar3;

                    if (-iVar3 <= iVar6)
                    {
                        iVar4 = iVar3;

                        if (iVar6 <= iVar3)
                        {
                            iVar4 = iVar6;
                        }
                    }

                    iVar6 = -uStack112.V01;
                    iVar7 = -iVar3;

                    if (-iVar3 <= iVar6)
                    {
                        iVar7 = iVar3;

                        if (iVar6 <= iVar3)
                        {
                            iVar7 = iVar6;
                        }
                    }

                    FUN_24700(0, (short)iVar4, (short)iVar7);
                    vTransform.rotation = Utilities.MatrixNormal(vTransform.rotation);
                }

                uStack40 = new Vector3Int(DAT_B0, DAT_B0, DAT_B0);
                Utilities.FUN_2449C(vTransform.rotation, uStack40, ref oVar9.vTransform.rotation);

                if ((DAT_A4 & 3) != 0)
                {
                    return(0);
                }

                puVar2        = vData.ini.FUN_2C17C(1, typeof(Ballistic), 8) as Ballistic;
                puVar2.type   = 7;
                puVar2.flags  = 0x24;
                puVar2.screen = vTransform.position;
                puVar2.FUN_3066C();
                puVar2.vTransform = vTransform;
                return(0);
            }

            return(0);
        }

        switch (DAT_19)
        {
        case 0:
            DAT_19++;
            oVar9.flags |= 2;
            GameManager.instance.FUN_30CB0(this, 50);
            flags &= 0xffffffdf;
            return(0);

        case 1:
            iVar8 = 30;
            DAT_19++;
            break;

        case 2:
            iVar8 = 15;
            DAT_19++;
            break;

        case 3:
        case 4:
            if (DAT_A4 - DAT_A8 < 5)
            {
                iVar8  = 5;
                DAT_19 = 4;
                DAT_B4 = 4577;
            }
            else
            {
                iVar8        = 15;
                DAT_19       = 5;
                DAT_AC       = 0x1000;
                DAT_B0       = 0x199;
                DAT_84_2     = vTransform;
                oVar9.flags &= 0xfffffffd;
            }

            break;

        case 5:
            oVar9.FUN_30B78();
            oVar9.flags &= 0xf9ffffdf;
            GameManager.instance.FUN_309A0(this);
            GameManager.instance.DAT_1084--;
            goto default;

        default:
            return(0);
        }

LAB_994:
        GameManager.instance.FUN_30CB0(this, iVar8);
        return(0);
    }
    //FUN_1570 (HARBOR.DLL)
    public override uint UpdateW(int arg1, int arg2)
    {
        short                sVar1;
        sbyte                sVar2;
        VigObject            unaff_s2;
        VigObject            unaff_s3;
        short                sVar3;
        short                sVar4;
        VigObject            unaff_s5;
        int                  iVar5;
        VigObject            unaff_s6;
        int                  iVar6;
        int                  iVar7;
        uint                 uVar7;
        ConfigContainer      ccVar7;
        int                  iVar8;
        BufferedBinaryReader pcVar9;
        int                  iVar10;
        VigObject            oVar10;
        VigObject            oVar12;
        Vehicle              ppcVar11;
        Vector3Int           local_48;
        Vector3Int           local_38;
        Vector3Int           local_28;
        VigTransform         auStack136;
        VigTransform         auStack104;

        switch (arg1)
        {
        case 0:
            break;

        case 1:
            child2.type = 3;
            FUN_14C0((VigChild)child2, _CHILD_TYPE.Child);
            FUN_1518(child2, 3);
            sVar1 = id;

            if (sVar1 == 114)
            {
                DAT_A8      = 0x200;
                child2.vr.y = 0x200;
                sVar4       = -0x200;
            }
            else
            {
                if (114 < sVar1)
                {
                    if (sVar1 == 115)
                    {
                        DAT_A8 = 0;
                        DAT_AA = -0x755;
                        return(0);
                    }

                    return(0);
                }

                if (sVar1 != 113)
                {
                    return(0);
                }

                DAT_A8      = -0x200;
                child2.vr.y = -0x200;
                sVar4       = 0x400;
            }

            DAT_AA = sVar4;
            child2.ApplyTransformation();
            return(0);

        default:
            return(0);

        case 8:
            uVar7 = FUN_32B90((uint)arg2) ? 1U : 0;
            return(uVar7);
        }

        switch (tags)
        {
        case 1:
            oVar12   = child2;
            ppcVar11 = DAT_80 as Vehicle;
            oVar10   = oVar12.child2;
            unaff_s3 = oVar10.child2;

            if (oVar10 == null || unaff_s3 == null)
            {
                return(0);    //FUN_15D9C
            }
            DAT_A4--;
            oVar10.vr.x   += DAT_B4;
            unaff_s3.vr.x -= DAT_B4;
            oVar10.ApplyTransformation();
            unaff_s3.ApplyTransformation();

            if (DAT_80 == null)
            {
                iVar10 = DAT_A4;
            }
            else
            {
                pcVar9     = ppcVar11.vCollider.reader;
                ccVar7     = unaff_s3.FUN_2C5F4(0x8000);
                auStack136 = GameManager.instance.FUN_2CEAC(unaff_s3, ccVar7);
                local_48   = new Vector3Int();
                local_48.x = (pcVar9.ReadInt32(4) + pcVar9.ReadInt32(16)) / 2;
                local_48.z = (pcVar9.ReadInt32(12) + pcVar9.ReadInt32(24)) / 2;
                local_48.y = pcVar9.ReadInt32(8);
                local_38   = Utilities.FUN_24148(ppcVar11.vTransform, local_48);
                local_28   = new Vector3Int();
                local_28.x = auStack136.position.x - local_38.x;
                local_28.y = auStack136.position.y - local_38.y;
                local_28.z = auStack136.position.z - local_38.z;
                iVar10     = Utilities.FUN_29E84(local_28);

                if (iVar10 < 0x50001)
                {
                    iVar8 = ppcVar11.vTransform.rotation.V12;
                    ppcVar11.physics1.X = local_28.x * 4 + ppcVar11.physics1.X / 2;
                    ppcVar11.physics1.Y = local_28.y + ppcVar11.physics1.Y / 2;
                    ppcVar11.physics2.X = 0;
                    ppcVar11.physics2.Y = 0;
                    ppcVar11.physics2.Z = 0;
                    ppcVar11.physics1.Z = local_28.z * 4 + ppcVar11.physics1.Z / 2;

                    if (iVar8 < 0)
                    {
                        iVar8 += 7;
                    }

                    iVar5 = -ppcVar11.vTransform.rotation.V10;

                    if (0 < ppcVar11.vTransform.rotation.V10)
                    {
                        iVar5 += 7;
                    }

                    ppcVar11.FUN_24700((short)(iVar8 >> 3), 0, (short)(iVar5 >> 3));
                    ppcVar11.vTransform.rotation = Utilities.MatrixNormal(ppcVar11.vTransform.rotation);

                    if (DAT_A4 == 0)
                    {
                        if (iVar10 < 0x18001)
                        {
                            tags  = 3;
                            iVar7 = GameManager.instance.FUN_1DD9C();
                            GameManager.instance.FUN_1E628(iVar7, vData.sndList, 2, vTransform.position);
                            LevelManager.instance.FUN_4DD54(ppcVar11, local_48, 142);
                            ppcVar11.vTransform.position.x += auStack136.position.x - local_38.x;
                            ppcVar11.vTransform.position.y += auStack136.position.y - local_38.y;
                            ppcVar11.vTransform.position.z += auStack136.position.z - local_38.z;
                            sVar1               = (short)oVar12.vr.y;
                            DAT_BC              = 0;
                            DAT_B8              = (DAT_AA - sVar1) / 120;
                            auStack104          = Utilities.FUN_2A3EC(auStack136);
                            DAT_84_2            = Utilities.CompMatrixLV(auStack104, ppcVar11.vTransform);
                            ppcVar11.physics1.X = 0;
                            ppcVar11.physics1.Y = 0;
                            ppcVar11.physics1.Z = 0;
                            ppcVar11.state      = _VEHICLE_TYPE.CraneSmall;
                        }
                        else
                        {
                            tags = 2;
                        }

                        DAT_B4 = -4;
                        return(0);
                    }

                    return(0);
                }

                iVar10 = DAT_A4;
                DAT_80 = null;
            }

            if (iVar10 != 0)
            {
                return(0);
            }

            tags   = 2;
            DAT_B4 = -1;
            break;

        case 2:
            oVar10   = child2.child2;
            unaff_s2 = oVar10.child2;

            if (oVar10 == null || unaff_s2 == null)
            {
                return(0);    //FUN_15D9C
            }
            unaff_s2.vr.x -= DAT_B4;
            sVar3          = (short)(oVar10.vr.x + DAT_B4);
            oVar10.vr.x    = sVar3;

            if (sVar3 << 16 < 1)
            {
                oVar10.vr.x   = 0;
                unaff_s2.vr.x = 0;
                tags          = 0;
                FUN_30BA8();

                if (DAT_18 != 0)
                {
                    GameManager.instance.FUN_1DE78(DAT_18);
                    DAT_18 = 0;
                }
            }

            unaff_s2.ApplyTransformation();
            oVar10.ApplyTransformation();
            return(0);

        case 3:
            oVar12   = child2;
            oVar10   = oVar12.child2;
            unaff_s5 = oVar10.child2;

            if (oVar10 == null || unaff_s5 == null)
            {
                return(0);    //FUN_15D9C
            }
            if (-0x200 < oVar10.vr.x)
            {
                oVar10.vr.x   += DAT_B4;
                unaff_s5.vr.x -= DAT_B4;
                unaff_s5.ApplyTransformation();
                oVar10.ApplyTransformation();
            }

            iVar10 = DAT_B8;

            if (iVar10 < 1)
            {
                if (iVar10 < DAT_BC)
                {
                    iVar10 = DAT_BC - 1;
                    DAT_BC = iVar10;
                }
            }
            else
            {
                if (DAT_BC < iVar10)
                {
                    iVar10 = DAT_BC + 1;
                    DAT_BC = iVar10;
                }
            }

            oVar12.vr.y += DAT_BC;
            oVar12.ApplyTransformation();
            iVar10 = DAT_AA - oVar12.vr.y;

            if (DAT_BC < 0)
            {
                iVar10 = -iVar10;
            }

            if (10 < iVar10)
            {
                ccVar7            = unaff_s5.FUN_2C5F4(0x8000);
                auStack136        = GameManager.instance.FUN_2CEAC(unaff_s5, ccVar7);
                DAT_80.vTransform = Utilities.CompMatrixLV(auStack136, DAT_84_2);
                return(0);
            }

            tags = 4;

            if (DAT_18 != 0)
            {
                GameManager.instance.FUN_1DE78(DAT_18);
                DAT_18 = 0;
            }

            iVar7 = GameManager.instance.FUN_1DD9C();
            GameManager.instance.FUN_1E628(iVar7, vData.sndList, 2, vTransform.position);
            DAT_A4 = 60;
            DAT_B4 = 11;
            DAT_BC = 0;
            DAT_B8 = -DAT_B8;
            ((Vehicle)DAT_80).FUN_41FEC();
            DAT_80 = null;
            break;

        case 4:
            iVar10 = DAT_A4 - 1;
            DAT_A4 = iVar10;

            if (0 < iVar10)
            {
                return(0);
            }

            tags  = 5;
            sVar2 = (sbyte)GameManager.instance.FUN_1DD9C();
            GameManager.instance.FUN_1E628(sVar2, vData.sndList, 1, vTransform.position);
            goto case 5;

        case 5:
            oVar12   = child2;
            oVar10   = oVar12.child2;
            unaff_s6 = oVar10.child2;

            if (oVar10 == null || unaff_s6 == null)
            {
                return(0);    //FUN_15D9C
            }
            if (oVar10.vr.x < 5)
            {
                oVar10.vr.x   += DAT_B4;
                unaff_s6.vr.x -= DAT_B4;
                unaff_s6.ApplyTransformation();
                oVar10.ApplyTransformation();
            }

            iVar10 = DAT_B8;

            if (iVar10 < 1)
            {
                if (iVar10 < DAT_BC)
                {
                    iVar10 = DAT_BC - 1;
                    DAT_BC = iVar10;
                }
            }
            else
            {
                if (DAT_BC < iVar10)
                {
                    iVar10 = DAT_BC + 1;
                    DAT_BC = iVar10;
                }
            }

            oVar12.vr.y += DAT_BC;
            oVar12.ApplyTransformation();
            iVar6 = DAT_A8 - oVar12.vr.y;

            if (DAT_BC < 0)
            {
                iVar6 = -iVar6;
            }

            if ((iVar6 & 0xfff) < 11)
            {
                tags = 0;
                FUN_30BA8();

                if (DAT_18 == 0)
                {
                    return(0);
                }

                GameManager.instance.FUN_1DE78(DAT_18);
                DAT_18 = 0;
            }

            break;
        }

        return(0);
    }
    public long FUN_5105C(int param1, bool param2, ref VigTransform param3)
    {
        long       lVar1;
        int        iVar2;
        int        iVar3;
        int        iVar4;
        Vector3Int local_28;
        Vector3Int local_18;
        Vector3Int local_10;
        Vector3Int local_8;

        FUN_285E4(param1, ref param3.position, out local_28);

        if ((DAT_0C & 1) == 0)
        {
            if ((DAT_0C & 8) == 0)
            {
                local_10   = GameManager.instance.terrain.FUN_1B998((uint)param3.position.x, (uint)param3.position.z);
                local_10   = Utilities.VectorNormal(local_10);
                local_28.y = -(local_28.x * local_10.x + local_28.z * local_10.z) / local_10.y;
            }
            else
            {
                local_10   = new Vector3Int(0, -0x1000, 0);
                local_28.y = 0;
            }

            lVar1 = Utilities.VectorNormal2(local_28, out local_8);
        }
        else
        {
            local_28.y = DAT_00[1].DAT_00.y - DAT_00[0].DAT_00.y;
            lVar1      = Utilities.VectorNormal2(local_28, out local_8);
            iVar2      = local_8.x;
            iVar4      = iVar2 * local_8.y;

            if (iVar4 < 0)
            {
                iVar4 += 4095;
            }

            iVar3      = local_8.z;
            local_10   = new Vector3Int();
            local_10.x = iVar4 >> 12;
            iVar4      = iVar2 * iVar2 - iVar3 * iVar3;
            iVar3      = iVar3 * local_8.y;

            if (iVar4 < 0)
            {
                iVar4 += 4095;
            }

            local_10.y = iVar4 >> 12;

            if (iVar3 < 0)
            {
                iVar3 += 4095;
            }

            local_10.z = iVar3 >> 12;
            local_10   = Utilities.VectorNormal(local_10);
        }

        if (!param2)
        {
            local_8.x = -local_8.x;
            local_8.y = -local_8.y;
            local_8.z = -local_8.z;
        }

        local_18            = Utilities.FUN_2A1E0(local_10, local_8);
        param3.rotation.V00 = (short)-local_18.x;
        param3.rotation.V10 = (short)-local_18.y;
        param3.rotation.V20 = (short)-local_18.z;
        param3.rotation.V01 = (short)-local_10.x;
        param3.rotation.V11 = (short)-local_10.y;
        param3.rotation.V21 = (short)-local_10.z;
        param3.rotation.V02 = (short)local_8.x;
        param3.rotation.V12 = (short)local_8.y;
        param3.rotation.V22 = (short)local_8.z;
        return(lVar1);
    }