package org.runite.client;

abstract class Model extends GameObject {

    boolean aBoolean2699 = false;

    private static int method1878(int[][] var0, int var1, int var2) {
        int var3 = var1 >> 7;
        int var4 = var2 >> 7;
        if (var3 >= 0 && var4 >= 0 && var3 < var0.length && var4 < var0[0].length) {
            int var5 = var1 & 127;
            int var6 = var2 & 127;
            int var7 = var0[var3][var4] * (128 - var5) + var0[var3 + 1][var4] * var5 >> 7;
            int var8 = var0[var3][var4 + 1] * (128 - var5) + var0[var3 + 1][var4 + 1] * var5 >> 7;
            return var7 * (128 - var6) + var8 * var6 >> 7;
        } else {
            return 0;
        }
    }

    abstract int method1872();

    abstract int method1871();

    abstract boolean method1873();

    abstract void method1874();

    private void method1875(Class3_Sub17 var1, AnimationHeader var2, AnimationHeader var3, int var4, int var5, boolean[] var6, boolean var7, boolean var8, int var9, int[] var10) {
        int var11;
        if (var3 == null || var4 == 0) {
            for (var11 = 0; var11 < var2.anInt1383; ++var11) {
                short var12 = var2.aShortArray1385[var11];
                if (var6 == null || var6[var12] == var7 || var1.anIntArray2466[var12] == 0) {
                    short var13 = var2.aShortArray1387[var11];
                    int var14;
                    if (var13 != -1) {
                        var14 = var9 & var1.anIntArray2455[var13];
                        if (var14 == 65535) {
                            this.method1891(0, var1.anIntArrayArray2460[var13], 0, 0, 0, var8);
                        } else {
                            this.method1899(0, var1.anIntArrayArray2460[var13], 0, 0, 0, var8, var14, var10);
                        }
                    }

                    var14 = var9 & var1.anIntArray2455[var12];
                    if (var14 == 65535) {
                        this.method1891(var1.anIntArray2466[var12], var1.anIntArrayArray2460[var12], var2.aShortArray1388[var11], var2.aShortArray1396[var11], var2.aShortArray1395[var11], var8);
                    } else {
                        this.method1899(var1.anIntArray2466[var12], var1.anIntArrayArray2460[var12], var2.aShortArray1388[var11], var2.aShortArray1396[var11], var2.aShortArray1395[var11], var8, var14, var10);
                    }
                }
            }

        } else {
            var11 = 0;
            int var34 = 0;

            for (int var35 = 0; var35 < var1.anInt2462; ++var35) {
                boolean var36 = false;
                if (var11 < var2.anInt1383 && var2.aShortArray1385[var11] == var35) {
                    var36 = true;
                }

                boolean var15 = false;
                if (var34 < var3.anInt1383 && var3.aShortArray1385[var34] == var35) {
                    var15 = true;
                }

                if (var36 || var15) {
                    if (var6 != null && var6[var35] != var7 && var1.anIntArray2466[var35] != 0) {
                        if (var36) {
                            ++var11;
                        }

                        if (var15) {
                            ++var34;
                        }
                    } else {
                        short var16 = 0;
                        int var17 = var1.anIntArray2466[var35];
                        if (var17 == 3) {
                            var16 = 128;
                        }

                        short var19;
                        short var18;
                        short var21;
                        short var20;
                        byte var22;
                        if (var36) {
                            var18 = var2.aShortArray1388[var11];
                            var19 = var2.aShortArray1396[var11];
                            var20 = var2.aShortArray1395[var11];
                            var21 = var2.aShortArray1387[var11];
                            var22 = var2.aByteArray1393[var11];
                            ++var11;
                        } else {
                            var18 = var16;
                            var19 = var16;
                            var20 = var16;
                            var21 = -1;
                            var22 = 0;
                        }

                        short var23;
                        short var25;
                        short var24;
                        byte var27;
                        short var26;
                        if (var15) {
                            var23 = var3.aShortArray1388[var34];
                            var24 = var3.aShortArray1396[var34];
                            var25 = var3.aShortArray1395[var34];
                            var26 = var3.aShortArray1387[var34];
                            var27 = var3.aByteArray1393[var34];
                            ++var34;
                        } else {
                            var23 = var16;
                            var24 = var16;
                            var25 = var16;
                            var26 = -1;
                            var27 = 0;
                        }

                        int var29;
                        int var28;
                        int var31;
                        int var30;
                        if ((var22 & 2) == 0 && (var27 & 1) == 0) {
                            if (var17 == 2) {
                                var31 = var23 - var18 & 0x7FF;
                                int var32 = var24 - var19 & 0x7FF;
                                int var33 = var25 - var20 & 0x7FF;
                                if (var31 >= 1024) {
                                    var31 -= 2048;
                                }

                                if (var32 >= 1024) {
                                    var32 -= 2048;
                                }

                                if (var33 >= 1024) {
                                    var33 -= 2048;
                                }

                                var28 = var18 + var31 * var4 / var5 & 0x7FF;
                                var29 = var19 + var32 * var4 / var5 & 0x7FF;
                                var30 = var20 + var33 * var4 / var5 & 0x7FF;
                            } else if (var17 == 7) {
                                var31 = var23 - var18 & 63;
                                if (var31 >= 32) {
                                    var31 -= 64;
                                }

                                var28 = var18 + var31 * var4 / var5 & 63;
                                var29 = var19 + (var24 - var19) * var4 / var5;
                                var30 = var20 + (var25 - var20) * var4 / var5;
                            } else {
                                var28 = var18 + (var23 - var18) * var4 / var5;
                                var29 = var19 + (var24 - var19) * var4 / var5;
                                var30 = var20 + (var25 - var20) * var4 / var5;
                            }
                        } else {
                            var28 = var18;
                            var29 = var19;
                            var30 = var20;
                        }

                        if (var21 != -1) {
                            var31 = var9 & var1.anIntArray2455[var21];
                            if (var31 == 65535) {
                                this.method1891(0, var1.anIntArrayArray2460[var21], 0, 0, 0, var8);
                            } else {
                                this.method1899(0, var1.anIntArrayArray2460[var21], 0, 0, 0, var8, var31, var10);
                            }
                        } else if (var26 != -1) {
                            var31 = var9 & var1.anIntArray2455[var26];
                            if (var31 == 65535) {
                                this.method1891(0, var1.anIntArrayArray2460[var26], 0, 0, 0, var8);
                            } else {
                                this.method1899(0, var1.anIntArrayArray2460[var26], 0, 0, 0, var8, var31, var10);
                            }
                        }

                        var31 = var9 & var1.anIntArray2455[var35];
                        if (var31 == 65535) {
                            this.method1891(var17, var1.anIntArrayArray2460[var35], var28, var29, var30, var8);
                        } else {
                            this.method1899(var17, var1.anIntArrayArray2460[var35], var28, var29, var30, var8, var31, var10);
                        }
                    }
                }
            }

        }
    }

    abstract void method1876(int var1);

    final void method1877(Class3_Sub28_Sub5 var1, int var2) {
        if (var2 != -1) {
            if (this.method1873()) {
                AnimationHeader var3 = var1.animations[var2];
                Class3_Sub17 var4 = var3.skins;

                for (int var5 = 0; var5 < var3.anInt1383; ++var5) {
                    short var6 = var3.aShortArray1385[var5];
                    if (var4.aBooleanArray2463[var6]) {
                        if (var3.aShortArray1387[var5] != -1) {
                            this.method1889(0, 0, 0, 0);
                        }

                        this.method1889(var4.anIntArray2466[var6], var3.aShortArray1388[var5], var3.aShortArray1396[var5], var3.aShortArray1395[var5]);
                    }
                }

                this.method1879();
            }
        }
    }

    abstract void method1879();

    final void method1880(Class3_Sub28_Sub5 var1, int var2, Class3_Sub28_Sub5 var3, int var4, int var5, int var6, boolean var7) {
        if (var2 != -1) {
            if (this.method1873()) {
                AnimationHeader var8 = var1.animations[var2];
                Class3_Sub17 var9 = var8.skins;
                AnimationHeader var10 = null;
                if (var3 != null) {
                    var10 = var3.animations[var4];
                    if (var10.skins != var9) {
                        var10 = null;
                    }
                }

                this.method1875(var9, var8, var10, var5, var6, null, false, var7, 65535, null);
                this.method1879();
            }
        }
    }

    abstract void resize(int var1, int var2, int var3);

    abstract Model method1882(boolean var1, boolean var2, boolean var3);

    abstract int method1883();

    abstract int method1884();

    abstract void method1885();

    abstract void method1886(int var1);

    final void method1887(Class3_Sub28_Sub5 var1, int var2, Class3_Sub28_Sub5 var3, int var4, int var5, int var6, int var7, boolean var8, int[] var9) {
        if (var2 != -1) {
            if (this.method1873()) {
                AnimationHeader var10 = var1.animations[var2];
                Class3_Sub17 var11 = var10.skins;
                AnimationHeader var12 = null;
                if (var3 != null) {
                    var12 = var3.animations[var4];
                    if (var12.skins != var11) {
                        var12 = null;
                    }
                }

                this.method1875(var11, var10, var12, var5, var6, null, false, var8, var7, var9);
                this.method1879();
            }
        }
    }

    abstract int method1888();

    abstract void method1889(int var1, int var2, int var3, int var4);

    abstract Model method1890(boolean var1, boolean var2, boolean var3);

    abstract void method1891(int var1, int[] var2, int var3, int var4, int var5, boolean var6);

    final void method1892(Class3_Sub28_Sub5 var1, int var2, Class3_Sub28_Sub5 var3, int var4, int var5, int var6, Class3_Sub28_Sub5 var7, int var8, Class3_Sub28_Sub5 var9, int var10, int var11, int var12, boolean[] debugArray530, boolean var14) {
        if (var2 != -1) {
            if (debugArray530 == null || var8 == -1) {
                this.method1880(var1, var2, var3, var4, var5, var6, var14);
            } else if (this.method1873()) {
                AnimationHeader var15 = var1.animations[var2];
                Class3_Sub17 var16 = var15.skins;
                AnimationHeader var17 = null;
                if (var3 != null) {
                    var17 = var3.animations[var4];
                    if (var17.skins != var16) {
                        var17 = null;
                    }
                }

                AnimationHeader var18 = var7.animations[var8];
                AnimationHeader var19 = null;
                if (var9 != null) {
                    var19 = var9.animations[var10];
                    if (var19.skins != var16) {
                        var19 = null;
                    }
                }

                this.method1875(var16, var15, var17, var5, var6, debugArray530, false, var14, 65535, null);
                this.method1891(0, new int[0], 0, 0, 0, var14);
                this.method1875(var16, var18, var19, var11, var12, debugArray530, true, var14, 65535, null);
                this.method1879();
            }
        }
    }

    abstract void method1893(int var2, int var3, int var4, int var5, int var6, int var7);

    abstract Model method1894(boolean var1, boolean var2, boolean var3);

    final void method1895(int[][] var1, int var2, int var3, int var4, int var5, int var6) {
        int var10 = -var5 / 2;
        int var11 = -var6 / 2;
        int var12 = method1878(var1, var2 + var10, var4 + var11);
        int var13 = var5 / 2;
        int var14 = -var6 / 2;
        int var15 = method1878(var1, var2 + var13, var4 + var14);
        int var16 = -var5 / 2;
        int var17 = var6 / 2;
        int var18 = method1878(var1, var2 + var16, var4 + var17);
        int var19 = var5 / 2;
        int var20 = var6 / 2;
        int var21 = method1878(var1, var2 + var19, var4 + var20);
        int var22 = var12 < var15 ? var12 : var15;
        int var23 = var18 < var21 ? var18 : var21;
        int var24 = var15 < var21 ? var15 : var21;
        int var25 = var12 < var18 ? var12 : var18;
        if (var6 != 0) {
            int var26 = (int) (Math.atan2(var22 - var23, var6) * 325.95D) & 0x7FF;
            if (var26 != 0) {
                this.method1896(var26);
            }
        }

        if (var5 != 0) {
            int var27 = (int) (Math.atan2(var25 - var24, var5) * 325.95D) & 0x7FF;
            if (var27 != 0) {
                this.method1886(var27);
            }
        }

        int var28 = var12 + var21;
        if (var15 + var18 < var28) {
            var28 = var15 + var18;
        }

        var28 = (var28 >> 1) - var3;
        if (var28 != 0) {
            this.method1897(0, var28, 0);
        }

    }

    abstract void method1896(int var1);

    final void method1867(int var1, int var2, int var3, int var4, int var5) {
    }

    abstract void method1897(int var1, int var2, int var3);

    abstract int method1898();

    abstract void animate(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, long var9, int var11, Class127_Sub1 var12);

    abstract void method1899(int var1, int[] var2, int var3, int var4, int var5, boolean var6, int var7, int[] var8);

    abstract void method1900();

}
