WorldRayCastWrapper.smali

.class Lorg/jbox2d/dynamics/WorldRayCastWrapper;
.super Ljava/lang/Object;
.source "World.java"

# interfaces
.implements Lorg/jbox2d/callbacks/TreeRayCastCallback;


# instance fields
.field broadPhase:Lorg/jbox2d/collision/broadphase/BroadPhase;

.field callback:Lorg/jbox2d/callbacks/RayCastCallback;

.field private final output:Lorg/jbox2d/collision/RayCastOutput;

.field private final point:Lorg/jbox2d/common/Vec2;

.field private final temp:Lorg/jbox2d/common/Vec2;


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

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

    .line 2025
    new-instance v0, Lorg/jbox2d/collision/RayCastOutput;

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

    iput-object v0, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->output:Lorg/jbox2d/collision/RayCastOutput;

    .line 2026
    new-instance v0, Lorg/jbox2d/common/Vec2;

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

    iput-object v0, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->temp:Lorg/jbox2d/common/Vec2;

    .line 2027
    new-instance v0, Lorg/jbox2d/common/Vec2;

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

    iput-object v0, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->point:Lorg/jbox2d/common/Vec2;

    return-void
.end method


# virtual methods
.method public raycastCallback(Lorg/jbox2d/collision/RayCastInput;I)F
    .registers 8

    .prologue
    .line 2030
    iget-object v0, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->broadPhase:Lorg/jbox2d/collision/broadphase/BroadPhase;

    invoke-interface {v0, p2}, Lorg/jbox2d/collision/broadphase/BroadPhase;->getUserData(I)Ljava/lang/Object;

    move-result-object v0

    .line 2031
    check-cast v0, Lorg/jbox2d/dynamics/FixtureProxy;

    .line 2032
    iget-object v1, v0, Lorg/jbox2d/dynamics/FixtureProxy;->fixture:Lorg/jbox2d/dynamics/Fixture;

    .line 2033
    iget v0, v0, Lorg/jbox2d/dynamics/FixtureProxy;->childIndex:I

    .line 2034
    iget-object v2, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->output:Lorg/jbox2d/collision/RayCastOutput;

    invoke-virtual {v1, v2, p1, v0}, Lorg/jbox2d/dynamics/Fixture;->raycast(Lorg/jbox2d/collision/RayCastOutput;Lorg/jbox2d/collision/RayCastInput;I)Z

    move-result v0

    .line 2036
    if-eqz v0, :cond_44

    .line 2037
    iget-object v0, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->output:Lorg/jbox2d/collision/RayCastOutput;

    iget v0, v0, Lorg/jbox2d/collision/RayCastOutput;->fraction:F

    .line 2039
    iget-object v2, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->temp:Lorg/jbox2d/common/Vec2;

    iget-object v3, p1, Lorg/jbox2d/collision/RayCastInput;->p2:Lorg/jbox2d/common/Vec2;

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

    move-result-object v2

    invoke-virtual {v2, v0}, Lorg/jbox2d/common/Vec2;->mulLocal(F)Lorg/jbox2d/common/Vec2;

    .line 2040
    iget-object v2, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->point:Lorg/jbox2d/common/Vec2;

    iget-object v3, p1, Lorg/jbox2d/collision/RayCastInput;->p1:Lorg/jbox2d/common/Vec2;

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

    move-result-object v2

    const/high16 v3, 0x3f800000    # 1.0f

    sub-float/2addr v3, v0

    invoke-virtual {v2, v3}, Lorg/jbox2d/common/Vec2;->mulLocal(F)Lorg/jbox2d/common/Vec2;

    move-result-object v2

    iget-object v3, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->temp:Lorg/jbox2d/common/Vec2;

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

    .line 2041
    iget-object v2, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->callback:Lorg/jbox2d/callbacks/RayCastCallback;

    iget-object v3, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->point:Lorg/jbox2d/common/Vec2;

    iget-object v4, p0, Lorg/jbox2d/dynamics/WorldRayCastWrapper;->output:Lorg/jbox2d/collision/RayCastOutput;

    iget-object v4, v4, Lorg/jbox2d/collision/RayCastOutput;->normal:Lorg/jbox2d/common/Vec2;

    invoke-interface {v2, v1, v3, v4, v0}, Lorg/jbox2d/callbacks/RayCastCallback;->reportFixture(Lorg/jbox2d/dynamics/Fixture;Lorg/jbox2d/common/Vec2;Lorg/jbox2d/common/Vec2;F)F

    move-result v0

    .line 2044
    :goto_43
    return v0

    :cond_44
    iget v0, p1, Lorg/jbox2d/collision/RayCastInput;->maxFraction:F

    goto :goto_43
.end method