Bend.smali

.class public Lcom/censivn/C3DEngine/effects/modifiers/Bend;
.super Lcom/censivn/C3DEngine/effects/core/Modifier;
.source "Bend.java"

# interfaces
.implements Lcom/censivn/C3DEngine/effects/IEffects;


# instance fields
.field private cst:I

.field private frc:F

.field private maa:I

.field private mia:I

.field private ofs:F


# direct methods
.method public constructor <init>(FF)V
    .registers 4

    .prologue
    const/4 v0, 0x0

    .line 20
    invoke-direct {p0}, Lcom/censivn/C3DEngine/effects/core/Modifier;-><init>()V

    .line 15
    iput v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->cst:I

    .line 17
    iput v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    .line 18
    iput v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    .line 21
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->force(F)V

    .line 22
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->offset(F)V

    .line 23
    return-void
.end method


# virtual methods
.method public apply()V
    .registers 19

    .prologue
    .line 60
    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->force()F

    move-result v2

    const/4 v3, 0x0

    cmpl-float v2, v2, v3

    if-nez v2, :cond_a

    .line 92
    :cond_9
    return-void

    .line 63
    :cond_a
    move-object/from16 v0, p0

    iget v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    if-nez v2, :cond_1c

    .line 64
    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mod:Lcom/censivn/C3DEngine/effects/core/MeshProxy;

    invoke-virtual {v2}, Lcom/censivn/C3DEngine/effects/core/MeshProxy;->getMaxAxis()I

    move-result v2

    move-object/from16 v0, p0

    iput v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    .line 65
    :cond_1c
    move-object/from16 v0, p0

    iget v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    if-nez v2, :cond_2e

    .line 66
    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mod:Lcom/censivn/C3DEngine/effects/core/MeshProxy;

    invoke-virtual {v2}, Lcom/censivn/C3DEngine/effects/core/MeshProxy;->getMinAxis()I

    move-result v2

    move-object/from16 v0, p0

    iput v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    .line 68
    :cond_2e
    move-object/from16 v0, p0

    iget-object v2, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mod:Lcom/censivn/C3DEngine/effects/core/MeshProxy;

    move-object/from16 v0, p0

    iget v3, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    invoke-virtual {v2, v3}, Lcom/censivn/C3DEngine/effects/core/MeshProxy;->getMin(I)F

    move-result v2

    .line 69
    move-object/from16 v0, p0

    iget-object v3, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mod:Lcom/censivn/C3DEngine/effects/core/MeshProxy;

    move-object/from16 v0, p0

    iget v4, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    invoke-virtual {v3, v4}, Lcom/censivn/C3DEngine/effects/core/MeshProxy;->getMax(I)F

    move-result v3

    sub-float/2addr v3, v2

    .line 71
    move-object/from16 v0, p0

    iget-object v4, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mod:Lcom/censivn/C3DEngine/effects/core/MeshProxy;

    invoke-virtual {v4}, Lcom/censivn/C3DEngine/effects/core/MeshProxy;->getVertices()Ljava/util/ArrayList;

    move-result-object v4

    .line 72
    invoke-virtual {v4}, Ljava/util/ArrayList;->size()I

    move-result v5

    .line 74
    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->offset()F

    move-result v6

    mul-float/2addr v6, v3

    add-float/2addr v6, v2

    .line 75
    float-to-double v8, v3

    const-wide v10, 0x400921fb54442d18L    # Math.PI

    div-double/2addr v8, v10

    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->force()F

    move-result v2

    float-to-double v10, v2

    div-double/2addr v8, v10

    double-to-float v7, v8

    .line 76
    const-wide v8, 0x401921fb54442d18L    # 6.283185307179586

    float-to-double v2, v3

    float-to-double v10, v7

    const-wide v12, 0x400921fb54442d18L    # Math.PI

    mul-double/2addr v10, v12

    const-wide/high16 v12, 0x4000000000000000L    # 2.0

    mul-double/2addr v10, v12

    div-double/2addr v2, v10

    mul-double/2addr v2, v8

    double-to-float v8, v2

    .line 78
    const/4 v2, 0x0

    move v3, v2

    :goto_7c
    if-ge v3, v5, :cond_9

    .line 79
    invoke-virtual {v4, v3}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lcom/censivn/C3DEngine/effects/core/VertexProxy;

    .line 80
    move-object/from16 v0, p0

    iget v9, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    invoke-virtual {v2, v9}, Lcom/censivn/C3DEngine/effects/core/VertexProxy;->getRatio(I)F

    move-result v9

    .line 81
    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->constraint()I

    move-result v10

    const/4 v11, -0x1

    if-ne v10, v11, :cond_9f

    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->offset()F

    move-result v10

    cmpg-float v10, v9, v10

    if-gtz v10, :cond_9f

    .line 78
    :cond_9b
    :goto_9b
    add-int/lit8 v2, v3, 0x1

    move v3, v2

    goto :goto_7c

    .line 83
    :cond_9f
    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->constraint()I

    move-result v10

    const/4 v11, 0x1

    if-ne v10, v11, :cond_ae

    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->offset()F

    move-result v10

    cmpl-float v10, v9, v10

    if-gez v10, :cond_9b

    .line 86
    :cond_ae
    const-wide v10, 0x3ff921fb54442d18L    # 1.5707963267948966

    invoke-virtual/range {p0 .. p0}, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->offset()F

    move-result v12

    mul-float/2addr v12, v8

    float-to-double v12, v12

    sub-double/2addr v10, v12

    mul-float/2addr v9, v8

    float-to-double v12, v9

    add-double/2addr v10, v12

    double-to-float v9, v10

    .line 87
    float-to-double v10, v9

    invoke-static {v10, v11}, Ljava/lang/Math;->sin(D)D

    move-result-wide v10

    move-object/from16 v0, p0

    iget v12, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    invoke-virtual {v2, v12}, Lcom/censivn/C3DEngine/effects/core/VertexProxy;->getValue(I)F

    move-result v12

    add-float/2addr v12, v7

    float-to-double v12, v12

    mul-double/2addr v10, v12

    float-to-double v12, v7

    sub-double/2addr v10, v12

    double-to-float v10, v10

    .line 88
    float-to-double v12, v6

    float-to-double v14, v9

    invoke-static {v14, v15}, Ljava/lang/Math;->cos(D)D

    move-result-wide v14

    move-object/from16 v0, p0

    iget v9, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    invoke-virtual {v2, v9}, Lcom/censivn/C3DEngine/effects/core/VertexProxy;->getValue(I)F

    move-result v9

    add-float/2addr v9, v7

    float-to-double v0, v9

    move-wide/from16 v16, v0

    mul-double v14, v14, v16

    sub-double/2addr v12, v14

    double-to-float v9, v12

    .line 89
    move-object/from16 v0, p0

    iget v11, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    invoke-virtual {v2, v11, v10}, Lcom/censivn/C3DEngine/effects/core/VertexProxy;->setValue(IF)V

    .line 90
    move-object/from16 v0, p0

    iget v10, v0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    invoke-virtual {v2, v10, v9}, Lcom/censivn/C3DEngine/effects/core/VertexProxy;->setValue(IF)V

    goto :goto_9b
.end method

.method public bendAxis(I)V
    .registers 2

    .prologue
    .line 52
    iput p1, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->maa:I

    .line 53
    return-void
.end method

.method public constraint()I
    .registers 2

    .prologue
    .line 48
    iget v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->cst:I

    return v0
.end method

.method public constraint(I)V
    .registers 2

    .prologue
    .line 44
    iput p1, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->cst:I

    .line 45
    return-void
.end method

.method public force()F
    .registers 2

    .prologue
    .line 30
    iget v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->frc:F

    return v0
.end method

.method public force(F)V
    .registers 2

    .prologue
    .line 26
    iput p1, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->frc:F

    .line 27
    return-void
.end method

.method public offset()F
    .registers 2

    .prologue
    .line 40
    iget v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->ofs:F

    return v0
.end method

.method public offset(F)V
    .registers 3

    .prologue
    .line 34
    iput p1, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->ofs:F

    .line 35
    const/4 v0, 0x0

    invoke-static {v0, p1}, Ljava/lang/Math;->max(FF)F

    move-result v0

    iput v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->ofs:F

    .line 36
    const/high16 v0, 0x3f800000    # 1.0f

    invoke-static {v0, p1}, Ljava/lang/Math;->min(FF)F

    move-result v0

    iput v0, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->ofs:F

    .line 37
    return-void
.end method

.method public pointAxis(I)V
    .registers 2

    .prologue
    .line 56
    iput p1, p0, Lcom/censivn/C3DEngine/effects/modifiers/Bend;->mia:I

    .line 57
    return-void
.end method