TimeOfImpact.smali

.class public Lorg/jbox2d/collision/TimeOfImpact;
.super Ljava/lang/Object;
.source "TimeOfImpact.java"


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;,
        Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;,
        Lorg/jbox2d/collision/TimeOfImpact$TOIInput;
    }
.end annotation


# static fields
.field static final synthetic $assertionsDisabled:Z

.field public static final MAX_ITERATIONS:I = 0x14

.field public static final MAX_ROOT_ITERATIONS:I = 0x32

.field public static toiCalls:I

.field public static toiIters:I

.field public static toiMaxIters:I

.field public static toiMaxRootIters:I

.field public static toiRootIters:I


# instance fields
.field private final cache:Lorg/jbox2d/collision/Distance$SimplexCache;

.field private final distanceInput:Lorg/jbox2d/collision/DistanceInput;

.field private final distanceOutput:Lorg/jbox2d/collision/DistanceOutput;

.field private final fcn:Lorg/jbox2d/collision/SeparationFunction;

.field private final indexes:[I

.field private final pool:Lorg/jbox2d/pooling/IWorldPool;

.field private final sweepA:Lorg/jbox2d/common/Sweep;

.field private final sweepB:Lorg/jbox2d/common/Sweep;

.field private final xfA:Lorg/jbox2d/common/Transform;

.field private final xfB:Lorg/jbox2d/common/Transform;


# direct methods
.method static constructor <clinit>()V
    .registers 2

    .prologue
    const/4 v1, 0x0

    .line 42
    const-class v0, Lorg/jbox2d/collision/TimeOfImpact;

    invoke-virtual {v0}, Ljava/lang/Class;->desiredAssertionStatus()Z

    move-result v0

    if-nez v0, :cond_17

    const/4 v0, 0x1

    :goto_a
    sput-boolean v0, Lorg/jbox2d/collision/TimeOfImpact;->$assertionsDisabled:Z

    .line 46
    sput v1, Lorg/jbox2d/collision/TimeOfImpact;->toiCalls:I

    .line 47
    sput v1, Lorg/jbox2d/collision/TimeOfImpact;->toiIters:I

    .line 48
    sput v1, Lorg/jbox2d/collision/TimeOfImpact;->toiMaxIters:I

    .line 49
    sput v1, Lorg/jbox2d/collision/TimeOfImpact;->toiRootIters:I

    .line 50
    sput v1, Lorg/jbox2d/collision/TimeOfImpact;->toiMaxRootIters:I

    return-void

    :cond_17
    move v0, v1

    .line 42
    goto :goto_a
.end method

.method public constructor <init>(Lorg/jbox2d/pooling/IWorldPool;)V
    .registers 3

    .prologue
    .line 97
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 84
    new-instance v0, Lorg/jbox2d/collision/Distance$SimplexCache;

    invoke-direct {v0}, Lorg/jbox2d/collision/Distance$SimplexCache;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->cache:Lorg/jbox2d/collision/Distance$SimplexCache;

    .line 85
    new-instance v0, Lorg/jbox2d/collision/DistanceInput;

    invoke-direct {v0}, Lorg/jbox2d/collision/DistanceInput;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    .line 86
    new-instance v0, Lorg/jbox2d/common/Transform;

    invoke-direct {v0}, Lorg/jbox2d/common/Transform;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->xfA:Lorg/jbox2d/common/Transform;

    .line 87
    new-instance v0, Lorg/jbox2d/common/Transform;

    invoke-direct {v0}, Lorg/jbox2d/common/Transform;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->xfB:Lorg/jbox2d/common/Transform;

    .line 88
    new-instance v0, Lorg/jbox2d/collision/DistanceOutput;

    invoke-direct {v0}, Lorg/jbox2d/collision/DistanceOutput;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->distanceOutput:Lorg/jbox2d/collision/DistanceOutput;

    .line 89
    new-instance v0, Lorg/jbox2d/collision/SeparationFunction;

    invoke-direct {v0}, Lorg/jbox2d/collision/SeparationFunction;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->fcn:Lorg/jbox2d/collision/SeparationFunction;

    .line 90
    const/4 v0, 0x2

    new-array v0, v0, [I

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->indexes:[I

    .line 91
    new-instance v0, Lorg/jbox2d/common/Sweep;

    invoke-direct {v0}, Lorg/jbox2d/common/Sweep;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->sweepA:Lorg/jbox2d/common/Sweep;

    .line 92
    new-instance v0, Lorg/jbox2d/common/Sweep;

    invoke-direct {v0}, Lorg/jbox2d/common/Sweep;-><init>()V

    iput-object v0, p0, Lorg/jbox2d/collision/TimeOfImpact;->sweepB:Lorg/jbox2d/common/Sweep;

    .line 98
    iput-object p1, p0, Lorg/jbox2d/collision/TimeOfImpact;->pool:Lorg/jbox2d/pooling/IWorldPool;

    .line 99
    return-void
.end method


# virtual methods
.method public final timeOfImpact(Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;Lorg/jbox2d/collision/TimeOfImpact$TOIInput;)V
    .registers 26

    .prologue
    .line 114
    sget v2, Lorg/jbox2d/collision/TimeOfImpact;->toiCalls:I

    add-int/lit8 v2, v2, 0x1

    sput v2, Lorg/jbox2d/collision/TimeOfImpact;->toiCalls:I

    .line 116
    sget-object v2, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->UNKNOWN:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 117
    move-object/from16 v0, p2

    iget v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->tMax:F

    move-object/from16 v0, p1

    iput v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    .line 119
    move-object/from16 v0, p2

    iget-object v4, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->proxyA:Lorg/jbox2d/collision/Distance$DistanceProxy;

    .line 120
    move-object/from16 v0, p2

    iget-object v6, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->proxyB:Lorg/jbox2d/collision/Distance$DistanceProxy;

    .line 122
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepA:Lorg/jbox2d/common/Sweep;

    move-object/from16 v0, p2

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->sweepA:Lorg/jbox2d/common/Sweep;

    invoke-virtual {v2, v3}, Lorg/jbox2d/common/Sweep;->set(Lorg/jbox2d/common/Sweep;)Lorg/jbox2d/common/Sweep;

    .line 123
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepB:Lorg/jbox2d/common/Sweep;

    move-object/from16 v0, p2

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->sweepB:Lorg/jbox2d/common/Sweep;

    invoke-virtual {v2, v3}, Lorg/jbox2d/common/Sweep;->set(Lorg/jbox2d/common/Sweep;)Lorg/jbox2d/common/Sweep;

    .line 127
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepA:Lorg/jbox2d/common/Sweep;

    invoke-virtual {v2}, Lorg/jbox2d/common/Sweep;->normalize()V

    .line 128
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepB:Lorg/jbox2d/common/Sweep;

    invoke-virtual {v2}, Lorg/jbox2d/common/Sweep;->normalize()V

    .line 130
    move-object/from16 v0, p2

    iget v10, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->tMax:F

    .line 132
    iget v2, v4, Lorg/jbox2d/collision/Distance$DistanceProxy;->m_radius:F

    iget v3, v6, Lorg/jbox2d/collision/Distance$DistanceProxy;->m_radius:F

    add-float/2addr v2, v3

    .line 134
    sget v3, Lorg/jbox2d/common/Settings;->linearSlop:F

    const/high16 v5, 0x40400000    # 3.0f

    sget v7, Lorg/jbox2d/common/Settings;->linearSlop:F

    mul-float/2addr v5, v7

    sub-float/2addr v2, v5

    invoke-static {v3, v2}, Lorg/jbox2d/common/MathUtils;->max(FF)F

    move-result v17

    .line 135
    const/high16 v2, 0x3e800000    # 0.25f

    sget v3, Lorg/jbox2d/common/Settings;->linearSlop:F

    mul-float v18, v2, v3

    .line 137
    sget-boolean v2, Lorg/jbox2d/collision/TimeOfImpact;->$assertionsDisabled:Z

    if-nez v2, :cond_69

    cmpl-float v2, v17, v18

    if-gtz v2, :cond_69

    new-instance v2, Ljava/lang/AssertionError;

    invoke-direct {v2}, Ljava/lang/AssertionError;-><init>()V

    throw v2

    .line 139
    :cond_69
    const/4 v8, 0x0

    .line 140
    const/4 v2, 0x0

    .line 142
    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->cache:Lorg/jbox2d/collision/Distance$SimplexCache;

    const/4 v5, 0x0

    iput v5, v3, Lorg/jbox2d/collision/Distance$SimplexCache;->count:I

    .line 143
    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    move-object/from16 v0, p2

    iget-object v5, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->proxyA:Lorg/jbox2d/collision/Distance$DistanceProxy;

    iput-object v5, v3, Lorg/jbox2d/collision/DistanceInput;->proxyA:Lorg/jbox2d/collision/Distance$DistanceProxy;

    .line 144
    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    move-object/from16 v0, p2

    iget-object v5, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIInput;->proxyB:Lorg/jbox2d/collision/Distance$DistanceProxy;

    iput-object v5, v3, Lorg/jbox2d/collision/DistanceInput;->proxyB:Lorg/jbox2d/collision/Distance$DistanceProxy;

    .line 145
    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    const/4 v5, 0x0

    iput-boolean v5, v3, Lorg/jbox2d/collision/DistanceInput;->useRadii:Z

    move v9, v2

    .line 150
    :goto_8e
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepA:Lorg/jbox2d/common/Sweep;

    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->xfA:Lorg/jbox2d/common/Transform;

    invoke-virtual {v2, v3, v8}, Lorg/jbox2d/common/Sweep;->getTransform(Lorg/jbox2d/common/Transform;F)V

    .line 151
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepB:Lorg/jbox2d/common/Sweep;

    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->xfB:Lorg/jbox2d/common/Transform;

    invoke-virtual {v2, v3, v8}, Lorg/jbox2d/common/Sweep;->getTransform(Lorg/jbox2d/common/Transform;F)V

    .line 156
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->xfA:Lorg/jbox2d/common/Transform;

    iput-object v3, v2, Lorg/jbox2d/collision/DistanceInput;->transformA:Lorg/jbox2d/common/Transform;

    .line 157
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->xfB:Lorg/jbox2d/common/Transform;

    iput-object v3, v2, Lorg/jbox2d/collision/DistanceInput;->transformB:Lorg/jbox2d/common/Transform;

    .line 158
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->pool:Lorg/jbox2d/pooling/IWorldPool;

    invoke-interface {v2}, Lorg/jbox2d/pooling/IWorldPool;->getDistance()Lorg/jbox2d/collision/Distance;

    move-result-object v2

    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceOutput:Lorg/jbox2d/collision/DistanceOutput;

    move-object/from16 v0, p0

    iget-object v5, v0, Lorg/jbox2d/collision/TimeOfImpact;->cache:Lorg/jbox2d/collision/Distance$SimplexCache;

    move-object/from16 v0, p0

    iget-object v7, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceInput:Lorg/jbox2d/collision/DistanceInput;

    invoke-virtual {v2, v3, v5, v7}, Lorg/jbox2d/collision/Distance;->distance(Lorg/jbox2d/collision/DistanceOutput;Lorg/jbox2d/collision/Distance$SimplexCache;Lorg/jbox2d/collision/DistanceInput;)V

    .line 166
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceOutput:Lorg/jbox2d/collision/DistanceOutput;

    iget v2, v2, Lorg/jbox2d/collision/DistanceOutput;->distance:F

    const/4 v3, 0x0

    cmpg-float v2, v2, v3

    if-gtz v2, :cond_ee

    .line 168
    sget-object v2, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->OVERLAPPED:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 169
    const/4 v2, 0x0

    move-object/from16 v0, p1

    iput v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    .line 298
    :goto_e5
    sget v2, Lorg/jbox2d/collision/TimeOfImpact;->toiMaxIters:I

    invoke-static {v2, v9}, Lorg/jbox2d/common/MathUtils;->max(II)I

    move-result v2

    sput v2, Lorg/jbox2d/collision/TimeOfImpact;->toiMaxIters:I

    .line 299
    return-void

    .line 173
    :cond_ee
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->distanceOutput:Lorg/jbox2d/collision/DistanceOutput;

    iget v2, v2, Lorg/jbox2d/collision/DistanceOutput;->distance:F

    add-float v3, v17, v18

    cmpg-float v2, v2, v3

    if-gez v2, :cond_105

    .line 175
    sget-object v2, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->TOUCHING:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 176
    move-object/from16 v0, p1

    iput v8, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    goto :goto_e5

    .line 181
    :cond_105
    move-object/from16 v0, p0

    iget-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact;->fcn:Lorg/jbox2d/collision/SeparationFunction;

    move-object/from16 v0, p0

    iget-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact;->cache:Lorg/jbox2d/collision/Distance$SimplexCache;

    move-object/from16 v0, p0

    iget-object v5, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepA:Lorg/jbox2d/common/Sweep;

    move-object/from16 v0, p0

    iget-object v7, v0, Lorg/jbox2d/collision/TimeOfImpact;->sweepB:Lorg/jbox2d/common/Sweep;

    invoke-virtual/range {v2 .. v8}, Lorg/jbox2d/collision/SeparationFunction;->initialize(Lorg/jbox2d/collision/Distance$SimplexCache;Lorg/jbox2d/collision/Distance$DistanceProxy;Lorg/jbox2d/common/Sweep;Lorg/jbox2d/collision/Distance$DistanceProxy;Lorg/jbox2d/common/Sweep;F)F

    .line 186
    const/4 v7, 0x0

    .line 188
    const/4 v2, 0x0

    move v3, v10

    .line 192
    :cond_11b
    move-object/from16 v0, p0

    iget-object v5, v0, Lorg/jbox2d/collision/TimeOfImpact;->fcn:Lorg/jbox2d/collision/SeparationFunction;

    move-object/from16 v0, p0

    iget-object v11, v0, Lorg/jbox2d/collision/TimeOfImpact;->indexes:[I

    invoke-virtual {v5, v11, v3}, Lorg/jbox2d/collision/SeparationFunction;->findMinSeparation([IF)F

    move-result v15

    .line 195
    add-float v5, v17, v18

    cmpl-float v5, v15, v5

    if-lez v5, :cond_145

    .line 197
    sget-object v2, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->SEPARATED:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 198
    move-object/from16 v0, p1

    iput v10, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    .line 199
    const/4 v2, 0x1

    move v3, v2

    .line 280
    :goto_139
    add-int/lit8 v2, v9, 0x1

    .line 281
    sget v5, Lorg/jbox2d/collision/TimeOfImpact;->toiIters:I

    add-int/lit8 v5, v5, 0x1

    sput v5, Lorg/jbox2d/collision/TimeOfImpact;->toiIters:I

    .line 283
    if-eqz v3, :cond_20f

    move v9, v2

    .line 285
    goto :goto_e5

    .line 204
    :cond_145
    sub-float v5, v17, v18

    cmpl-float v5, v15, v5

    if-lez v5, :cond_14e

    move v8, v3

    move v3, v7

    .line 207
    goto :goto_139

    .line 211
    :cond_14e
    move-object/from16 v0, p0

    iget-object v5, v0, Lorg/jbox2d/collision/TimeOfImpact;->fcn:Lorg/jbox2d/collision/SeparationFunction;

    move-object/from16 v0, p0

    iget-object v11, v0, Lorg/jbox2d/collision/TimeOfImpact;->indexes:[I

    const/4 v12, 0x0

    aget v11, v11, v12

    move-object/from16 v0, p0

    iget-object v12, v0, Lorg/jbox2d/collision/TimeOfImpact;->indexes:[I

    const/4 v13, 0x1

    aget v12, v12, v13

    invoke-virtual {v5, v11, v12, v8}, Lorg/jbox2d/collision/SeparationFunction;->evaluate(IIF)F

    move-result v14

    .line 216
    sub-float v5, v17, v18

    cmpg-float v5, v14, v5

    if-gez v5, :cond_177

    .line 217
    sget-object v2, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->FAILED:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 218
    move-object/from16 v0, p1

    iput v8, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    .line 219
    const/4 v2, 0x1

    move v3, v2

    .line 220
    goto :goto_139

    .line 224
    :cond_177
    add-float v5, v17, v18

    cmpg-float v5, v14, v5

    if-gtz v5, :cond_18a

    .line 226
    sget-object v2, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->TOUCHING:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v2, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 227
    move-object/from16 v0, p1

    iput v8, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    .line 228
    const/4 v2, 0x1

    move v3, v2

    .line 229
    goto :goto_139

    .line 233
    :cond_18a
    const/4 v5, 0x0

    move v11, v3

    move v12, v8

    move v13, v5

    .line 238
    :goto_18e
    and-int/lit8 v5, v13, 0x1

    const/16 v16, 0x1

    move/from16 v0, v16

    if-ne v5, v0, :cond_1ed

    .line 240
    sub-float v5, v17, v14

    sub-float v16, v11, v12

    mul-float v5, v5, v16

    sub-float v16, v15, v14

    div-float v5, v5, v16

    add-float/2addr v5, v12

    .line 246
    :goto_1a1
    add-int/lit8 v16, v13, 0x1

    .line 247
    sget v13, Lorg/jbox2d/collision/TimeOfImpact;->toiRootIters:I

    add-int/lit8 v13, v13, 0x1

    sput v13, Lorg/jbox2d/collision/TimeOfImpact;->toiRootIters:I

    .line 249
    move-object/from16 v0, p0

    iget-object v13, v0, Lorg/jbox2d/collision/TimeOfImpact;->fcn:Lorg/jbox2d/collision/SeparationFunction;

    move-object/from16 v0, p0

    iget-object v0, v0, Lorg/jbox2d/collision/TimeOfImpact;->indexes:[I

    move-object/from16 v19, v0

    const/16 v20, 0x0

    aget v19, v19, v20

    move-object/from16 v0, p0

    iget-object v0, v0, Lorg/jbox2d/collision/TimeOfImpact;->indexes:[I

    move-object/from16 v20, v0

    const/16 v21, 0x1

    aget v20, v20, v21

    move/from16 v0, v19

    move/from16 v1, v20

    invoke-virtual {v13, v0, v1, v5}, Lorg/jbox2d/collision/SeparationFunction;->evaluate(IIF)F

    move-result v13

    .line 251
    sub-float v19, v13, v17

    invoke-static/range {v19 .. v19}, Lorg/jbox2d/common/MathUtils;->abs(F)F

    move-result v19

    cmpg-float v19, v19, v18

    if-gez v19, :cond_1f4

    move v3, v5

    .line 271
    :cond_1d4
    sget v5, Lorg/jbox2d/collision/TimeOfImpact;->toiMaxRootIters:I

    move/from16 v0, v16

    invoke-static {v5, v0}, Lorg/jbox2d/common/MathUtils;->max(II)I

    move-result v5

    sput v5, Lorg/jbox2d/collision/TimeOfImpact;->toiMaxRootIters:I

    .line 273
    add-int/lit8 v2, v2, 0x1

    .line 275
    sget v5, Lorg/jbox2d/common/Settings;->maxPolygonVertices:I

    if-eq v2, v5, :cond_223

    const/16 v5, 0x32

    move/from16 v0, v16

    if-ne v0, v5, :cond_11b

    move v3, v7

    .line 276
    goto/16 :goto_139

    .line 243
    :cond_1ed
    const/high16 v5, 0x3f000000    # 0.5f

    add-float v16, v12, v11

    mul-float v5, v5, v16

    goto :goto_1a1

    .line 258
    :cond_1f4
    cmpl-float v19, v13, v17

    if-lez v19, :cond_20c

    move v12, v13

    move v13, v15

    move/from16 v22, v11

    move v11, v5

    move/from16 v5, v22

    .line 266
    :goto_1ff
    const/16 v14, 0x32

    move/from16 v0, v16

    if-eq v0, v14, :cond_1d4

    move v14, v12

    move v15, v13

    move/from16 v13, v16

    move v12, v11

    move v11, v5

    .line 269
    goto :goto_18e

    :cond_20c
    move v11, v12

    move v12, v14

    .line 263
    goto :goto_1ff

    .line 288
    :cond_20f
    const/16 v3, 0x14

    if-ne v2, v3, :cond_220

    .line 291
    sget-object v3, Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;->FAILED:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    move-object/from16 v0, p1

    iput-object v3, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->state:Lorg/jbox2d/collision/TimeOfImpact$TOIOutputState;

    .line 292
    move-object/from16 v0, p1

    iput v8, v0, Lorg/jbox2d/collision/TimeOfImpact$TOIOutput;->t:F

    move v9, v2

    .line 293
    goto/16 :goto_e5

    :cond_220
    move v9, v2

    .line 295
    goto/16 :goto_8e

    :cond_223
    move v3, v7

    goto/16 :goto_139
.end method