Max3DSParser.smali

.class public Lcom/censivn/C3DEngine/parser/Max3DSParser;
.super Lcom/censivn/C3DEngine/parser/AParser;
.source "Max3DSParser.java"

# interfaces
.implements Lcom/censivn/C3DEngine/parser/IParser;


# instance fields
.field private final FACES:I

.field private final IDENTIFIER_3DS:I

.field private final MATERIAL:I

.field private final MESH_BLOCK:I

.field private final OBJECT_BLOCK:I

.field private final TEXCOORD:I

.field private final TEX_FILENAME:I

.field private final TEX_MAP:I

.field private final TEX_NAME:I

.field private final TRIMESH:I

.field private final TRI_MATERIAL:I

.field private final VERTICES:I

.field private chunkEndOffset:I

.field private chunkID:I

.field private context:Lcom/censivn/C3DEngine/Engine;

.field private currentObjName:Ljava/lang/String;

.field private endReached:Z


# direct methods
.method public constructor <init>(Landroid/content/res/Resources;Ljava/lang/String;Z)V
    .registers 5

    .prologue
    .line 39
    invoke-static {p3}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;

    move-result-object v0

    invoke-direct {p0, p1, p2, v0}, Lcom/censivn/C3DEngine/parser/AParser;-><init>(Landroid/content/res/Resources;Ljava/lang/String;Ljava/lang/Boolean;)V

    .line 18
    const/16 v0, 0x4d4d

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->IDENTIFIER_3DS:I

    .line 19
    const/16 v0, 0x3d3d

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->MESH_BLOCK:I

    .line 20
    const/16 v0, 0x4000

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->OBJECT_BLOCK:I

    .line 21
    const/16 v0, 0x4100

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->TRIMESH:I

    .line 22
    const/16 v0, 0x4130

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->TRI_MATERIAL:I

    .line 23
    const/16 v0, 0x4110

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->VERTICES:I

    .line 24
    const/16 v0, 0x4120

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->FACES:I

    .line 25
    const/16 v0, 0x4140

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->TEXCOORD:I

    .line 26
    const v0, 0xa200

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->TEX_MAP:I

    .line 27
    const v0, 0xa000

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->TEX_NAME:I

    .line 28
    const v0, 0xa300

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->TEX_FILENAME:I

    .line 29
    const v0, 0xafff

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->MATERIAL:I

    .line 40
    return-void
.end method

.method private readChunk(Lcom/censivn/C3DEngine/Engine;Ljava/io/InputStream;)V
    .registers 8
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    const/4 v0, 0x0

    .line 78
    invoke-direct {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readHeader(Ljava/io/InputStream;)V

    .line 80
    iget v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->chunkID:I

    sparse-switch v1, :sswitch_data_c2

    .line 137
    invoke-direct {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->skipRead(Ljava/io/InputStream;)V

    .line 139
    :cond_c
    :goto_c
    :sswitch_c
    return-void

    .line 84
    :sswitch_d
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readString(Ljava/io/InputStream;)Ljava/lang/String;

    move-result-object v0

    iput-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->currentObjName:Ljava/lang/String;

    .line 85
    const-string v0, "Censivn3D"

    new-instance v1, Ljava/lang/StringBuilder;

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

    const-string v2, "Parsing object "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    iget-object v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->currentObjName:Ljava/lang/String;

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    goto :goto_c

    .line 88
    :sswitch_2e
    iget-boolean v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->firstObject:Z

    if-eqz v1, :cond_3b

    .line 89
    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget-object v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->currentObjName:Ljava/lang/String;

    iput-object v2, v1, Lcom/censivn/C3DEngine/parser/ParseObjectData;->name:Ljava/lang/String;

    .line 90
    iput-boolean v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->firstObject:Z

    goto :goto_c

    .line 92
    :cond_3b
    new-instance v0, Lcom/censivn/C3DEngine/parser/ParseObjectData;

    invoke-direct {v0}, Lcom/censivn/C3DEngine/parser/ParseObjectData;-><init>()V

    iput-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    .line 93
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->currentObjName:Ljava/lang/String;

    iput-object v1, v0, Lcom/censivn/C3DEngine/parser/ParseObjectData;->name:Ljava/lang/String;

    .line 94
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->parseObjects:Ljava/util/ArrayList;

    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    invoke-virtual {v0, v1}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    goto :goto_c

    .line 98
    :sswitch_50
    invoke-direct {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readVertices(Ljava/io/InputStream;)V

    goto :goto_c

    .line 101
    :sswitch_54
    invoke-direct {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readFaces(Ljava/io/InputStream;)V

    goto :goto_c

    .line 104
    :sswitch_58
    invoke-direct {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readTexCoords(Ljava/io/InputStream;)V

    goto :goto_c

    .line 107
    :sswitch_5c
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readString(Ljava/io/InputStream;)Ljava/lang/String;

    move-result-object v0

    iput-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->currentMaterialKey:Ljava/lang/String;

    goto :goto_c

    .line 110
    :sswitch_63
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readString(Ljava/io/InputStream;)Ljava/lang/String;

    move-result-object v1

    .line 111
    new-instance v2, Ljava/lang/StringBuffer;

    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->packageID:Ljava/lang/String;

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

    .line 112
    const-string v3, ":drawable/"

    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    .line 114
    new-instance v3, Ljava/lang/StringBuffer;

    invoke-virtual {v1}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v3, v1}, Ljava/lang/StringBuffer;-><init>(Ljava/lang/String;)V

    .line 115
    const-string v1, "."

    invoke-virtual {v3, v1}, Ljava/lang/StringBuffer;->lastIndexOf(Ljava/lang/String;)I

    move-result v1

    .line 116
    const/4 v4, -0x1

    if-le v1, v4, :cond_9e

    .line 117
    invoke-virtual {v3, v0, v1}, Ljava/lang/StringBuffer;->substring(II)Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;

    .line 121
    :goto_8c
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    new-instance v1, Lcom/censivn/C3DEngine/parser/AParser$BitmapAsset;

    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->currentMaterialKey:Ljava/lang/String;

    invoke-virtual {v2}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-direct {v1, p0, v3, v2}, Lcom/censivn/C3DEngine/parser/AParser$BitmapAsset;-><init>(Lcom/censivn/C3DEngine/parser/AParser;Ljava/lang/String;Ljava/lang/String;)V

    invoke-virtual {v0, p1, v1}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->addBitmapAsset(Lcom/censivn/C3DEngine/Engine;Lcom/censivn/C3DEngine/parser/AParser$BitmapAsset;)V

    goto/16 :goto_c

    .line 119
    :cond_9e
    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;

    goto :goto_8c

    .line 124
    :sswitch_a2
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readString(Ljava/io/InputStream;)Ljava/lang/String;

    move-result-object v2

    .line 125
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v3

    move v1, v0

    .line 127
    :goto_ab
    if-ge v1, v3, :cond_c

    .line 128
    invoke-virtual {p0, p2}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v0

    .line 129
    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget-object v4, v4, Lcom/censivn/C3DEngine/parser/ParseObjectData;->faces:Ljava/util/ArrayList;

    invoke-virtual {v4, v0}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/censivn/C3DEngine/parser/ParseObjectFace;

    iput-object v2, v0, Lcom/censivn/C3DEngine/parser/ParseObjectFace;->materialKey:Ljava/lang/String;

    .line 127
    add-int/lit8 v0, v1, 0x1

    move v1, v0

    goto :goto_ab

    .line 80
    nop

    :sswitch_data_c2
    .sparse-switch
        0x3d3d -> :sswitch_c
        0x4000 -> :sswitch_d
        0x4100 -> :sswitch_2e
        0x4110 -> :sswitch_50
        0x4120 -> :sswitch_54
        0x4130 -> :sswitch_a2
        0x4140 -> :sswitch_58
        0xa000 -> :sswitch_5c
        0xa200 -> :sswitch_c
        0xa300 -> :sswitch_63
        0xafff -> :sswitch_c
    .end sparse-switch
.end method

.method private readFaces(Ljava/io/InputStream;)V
    .registers 10
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    const/4 v7, 0x3

    const/4 v6, 0x1

    const/4 v1, 0x0

    .line 164
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v2

    move v0, v1

    .line 165
    :goto_8
    if-ge v0, v2, :cond_46

    .line 166
    new-array v3, v7, [I

    .line 167
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v4

    aput v4, v3, v1

    .line 168
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v4

    aput v4, v3, v6

    .line 169
    const/4 v4, 0x2

    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v5

    aput v5, v3, v4

    .line 170
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    .line 171
    new-instance v4, Lcom/censivn/C3DEngine/parser/ParseObjectFace;

    invoke-direct {v4}, Lcom/censivn/C3DEngine/parser/ParseObjectFace;-><init>()V

    .line 172
    iput-object v3, v4, Lcom/censivn/C3DEngine/parser/ParseObjectFace;->v:[I

    .line 173
    iput-object v3, v4, Lcom/censivn/C3DEngine/parser/ParseObjectFace;->uv:[I

    .line 174
    iput v7, v4, Lcom/censivn/C3DEngine/parser/ParseObjectFace;->faceLength:I

    .line 175
    iput-boolean v6, v4, Lcom/censivn/C3DEngine/parser/ParseObjectFace;->hasuv:Z

    .line 176
    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget v5, v3, Lcom/censivn/C3DEngine/parser/ParseObjectData;->numFaces:I

    add-int/lit8 v5, v5, 0x1

    iput v5, v3, Lcom/censivn/C3DEngine/parser/ParseObjectData;->numFaces:I

    .line 177
    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget-object v3, v3, Lcom/censivn/C3DEngine/parser/ParseObjectData;->faces:Ljava/util/ArrayList;

    invoke-virtual {v3, v4}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 179
    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    invoke-virtual {v3, v4}, Lcom/censivn/C3DEngine/parser/ParseObjectData;->calculateFaceNormal(Lcom/censivn/C3DEngine/parser/ParseObjectFace;)V

    .line 165
    add-int/lit8 v0, v0, 0x1

    goto :goto_8

    .line 181
    :cond_46
    return-void
.end method

.method private readHeader(Ljava/io/InputStream;)V
    .registers 3
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    .line 72
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v0

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->chunkID:I

    .line 73
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readInt(Ljava/io/InputStream;)I

    move-result v0

    iput v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->chunkEndOffset:I

    .line 74
    iget v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->chunkID:I

    if-gez v0, :cond_14

    const/4 v0, 0x1

    :goto_11
    iput-boolean v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->endReached:Z

    .line 75
    return-void

    .line 74
    :cond_14
    const/4 v0, 0x0

    goto :goto_11
.end method

.method private readTexCoords(Ljava/io/InputStream;)V
    .registers 7
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    .line 184
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v1

    .line 186
    const/4 v0, 0x0

    :goto_5
    if-ge v0, v1, :cond_25

    .line 187
    new-instance v2, Lcom/censivn/C3DEngine/api/element/Uv;

    invoke-direct {v2}, Lcom/censivn/C3DEngine/api/element/Uv;-><init>()V

    .line 188
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readFloat(Ljava/io/InputStream;)F

    move-result v3

    iput v3, v2, Lcom/censivn/C3DEngine/api/element/Uv;->u:F

    .line 189
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readFloat(Ljava/io/InputStream;)F

    move-result v3

    const/high16 v4, -0x40800000    # -1.0f

    mul-float/2addr v3, v4

    iput v3, v2, Lcom/censivn/C3DEngine/api/element/Uv;->v:F

    .line 190
    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget-object v3, v3, Lcom/censivn/C3DEngine/parser/ParseObjectData;->texCoords:Ljava/util/ArrayList;

    invoke-virtual {v3, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 186
    add-int/lit8 v0, v0, 0x1

    goto :goto_5

    .line 192
    :cond_25
    return-void
.end method

.method private readVertices(Ljava/io/InputStream;)V
    .registers 9
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    .line 149
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readShort(Ljava/io/InputStream;)I

    move-result v1

    .line 151
    const/4 v0, 0x0

    :goto_5
    if-ge v0, v1, :cond_23

    .line 152
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readFloat(Ljava/io/InputStream;)F

    move-result v2

    .line 153
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readFloat(Ljava/io/InputStream;)F

    move-result v3

    .line 154
    invoke-virtual {p0, p1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readFloat(Ljava/io/InputStream;)F

    move-result v4

    .line 157
    neg-float v3, v3

    .line 159
    iget-object v5, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    iget-object v5, v5, Lcom/censivn/C3DEngine/parser/ParseObjectData;->vertices:Ljava/util/ArrayList;

    new-instance v6, Lcom/censivn/C3DEngine/api/element/Number3d;

    invoke-direct {v6, v2, v4, v3}, Lcom/censivn/C3DEngine/api/element/Number3d;-><init>(FFF)V

    invoke-virtual {v5, v6}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 151
    add-int/lit8 v0, v0, 0x1

    goto :goto_5

    .line 161
    :cond_23
    return-void
.end method

.method private skipRead(Ljava/io/InputStream;)V
    .registers 5
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    const/4 v1, 0x0

    .line 142
    move v0, v1

    :goto_2
    iget v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->chunkEndOffset:I

    add-int/lit8 v2, v2, -0x6

    if-ge v0, v2, :cond_1a

    iget-boolean v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->endReached:Z

    if-nez v2, :cond_1a

    .line 143
    invoke-virtual {p1}, Ljava/io/InputStream;->read()I

    move-result v2

    if-gez v2, :cond_18

    const/4 v2, 0x1

    :goto_13
    iput-boolean v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->endReached:Z

    .line 142
    add-int/lit8 v0, v0, 0x1

    goto :goto_2

    :cond_18
    move v2, v1

    .line 143
    goto :goto_13

    .line 145
    :cond_1a
    return-void
.end method


# virtual methods
.method public getParsedObject()Lcom/censivn/C3DEngine/coreapi/primitives/Object3dContainer;
    .registers 9

    .prologue
    const/4 v2, 0x0

    .line 195
    const-string v0, "Censivn3D"

    const-string v1, "Start object creation"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 196
    new-instance v3, Lcom/censivn/C3DEngine/coreapi/primitives/Object3dContainer;

    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->context:Lcom/censivn/C3DEngine/Engine;

    invoke-direct {v3, v0, v2, v2}, Lcom/censivn/C3DEngine/coreapi/primitives/Object3dContainer;-><init>(Lcom/censivn/C3DEngine/Engine;II)V

    .line 197
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->parseObjects:Ljava/util/ArrayList;

    invoke-virtual {v0}, Ljava/util/ArrayList;->size()I

    move-result v4

    .line 198
    const/4 v0, 0x0

    .line 200
    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    invoke-virtual {v1}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->hasBitmaps()Z

    move-result v1

    if-eqz v1, :cond_88

    .line 201
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    invoke-virtual {v0}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->generate()V

    .line 202
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    invoke-virtual {v0}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->getBitmap()Landroid/graphics/Bitmap;

    move-result-object v0

    .line 203
    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->context:Lcom/censivn/C3DEngine/Engine;

    invoke-virtual {v1}, Lcom/censivn/C3DEngine/Engine;->getTextureManager()Lcom/censivn/C3DEngine/coreapi/manager/TextureManager;

    move-result-object v1

    iget-boolean v5, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->generateMipMap:Z

    invoke-virtual {v1, v0, v5}, Lcom/censivn/C3DEngine/coreapi/manager/TextureManager;->createTexture(Landroid/graphics/Bitmap;Z)Lcom/censivn/C3DEngine/api/element/TextureElement;

    move-result-object v1

    .line 204
    iget-object v5, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    invoke-virtual {v5, v1}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->setTextureElement(Lcom/censivn/C3DEngine/api/element/TextureElement;)V

    move-object v1, v0

    .line 207
    :goto_3b
    if-ge v2, v4, :cond_70

    .line 208
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->parseObjects:Ljava/util/ArrayList;

    invoke-virtual {v0, v2}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/censivn/C3DEngine/parser/ParseObjectData;

    .line 209
    const-string v5, "Censivn3D"

    new-instance v6, Ljava/lang/StringBuilder;

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

    const-string v7, "Creating object "

    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v6

    iget-object v7, v0, Lcom/censivn/C3DEngine/parser/ParseObjectData;->name:Ljava/lang/String;

    invoke-virtual {v6, v7}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v6

    invoke-virtual {v6}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v6

    invoke-static {v5, v6}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 210
    iget-object v5, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->context:Lcom/censivn/C3DEngine/Engine;

    iget-object v6, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->materialMap:Ljava/util/HashMap;

    iget-object v7, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    invoke-virtual {v0, v5, v6, v7}, Lcom/censivn/C3DEngine/parser/ParseObjectData;->getParsedObject(Lcom/censivn/C3DEngine/Engine;Ljava/util/HashMap;Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;)Lcom/censivn/C3DEngine/coreapi/primitives/Object3d;

    move-result-object v0

    invoke-virtual {v3, v0}, Lcom/censivn/C3DEngine/coreapi/primitives/Object3dContainer;->addChild(Lcom/censivn/C3DEngine/coreapi/primitives/Object3d;)V

    .line 207
    add-int/lit8 v0, v2, 0x1

    move v2, v0

    goto :goto_3b

    .line 213
    :cond_70
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    invoke-virtual {v0}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->hasBitmaps()Z

    move-result v0

    if-eqz v0, :cond_7d

    .line 214
    if-eqz v1, :cond_7d

    .line 215
    invoke-virtual {v1}, Landroid/graphics/Bitmap;->recycle()V

    .line 217
    :cond_7d
    const-string v0, "Censivn3D"

    const-string v1, "Object creation finished"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 219
    invoke-super {p0}, Lcom/censivn/C3DEngine/parser/AParser;->cleanup()V

    .line 221
    return-object v3

    :cond_88
    move-object v1, v0

    goto :goto_3b
.end method

.method public parse(Lcom/censivn/C3DEngine/Engine;)V
    .registers 6

    .prologue
    const/4 v3, 0x0

    .line 44
    iput-object p1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->context:Lcom/censivn/C3DEngine/Engine;

    .line 45
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->resources:Landroid/content/res/Resources;

    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->resources:Landroid/content/res/Resources;

    iget-object v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->resourceID:Ljava/lang/String;

    invoke-virtual {v1, v2, v3, v3}, Landroid/content/res/Resources;->getIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I

    move-result v1

    invoke-virtual {v0, v1}, Landroid/content/res/Resources;->openRawResource(I)Ljava/io/InputStream;

    move-result-object v0

    .line 46
    new-instance v1, Ljava/io/BufferedInputStream;

    invoke-direct {v1, v0}, Ljava/io/BufferedInputStream;-><init>(Ljava/io/InputStream;)V

    .line 48
    const-string v0, "Censivn3D"

    const-string v2, "Start parsing object"

    invoke-static {v0, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 50
    new-instance v0, Lcom/censivn/C3DEngine/parser/ParseObjectData;

    invoke-direct {v0}, Lcom/censivn/C3DEngine/parser/ParseObjectData;-><init>()V

    iput-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    .line 51
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->parseObjects:Ljava/util/ArrayList;

    iget-object v2, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    invoke-virtual {v0, v2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z

    .line 54
    :try_start_2b
    invoke-direct {p0, v1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readHeader(Ljava/io/InputStream;)V

    .line 55
    iget v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->chunkID:I

    const/16 v2, 0x4d4d

    if-eq v0, v2, :cond_3c

    .line 56
    const-string v0, "Censivn3D"

    const-string v1, "Not a valid .3DS file!"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 69
    :goto_3b
    return-void

    .line 59
    :cond_3c
    const-string v0, "Censivn3D"

    const-string v2, "Found a valid .3DS file"

    invoke-static {v0, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    .line 61
    :goto_43
    iget-boolean v0, p0, Lcom/censivn/C3DEngine/parser/Max3DSParser;->endReached:Z

    if-nez v0, :cond_4f

    .line 62
    invoke-direct {p0, p1, v1}, Lcom/censivn/C3DEngine/parser/Max3DSParser;->readChunk(Lcom/censivn/C3DEngine/Engine;Ljava/io/InputStream;)V
    :try_end_4a
    .catch Ljava/io/IOException; {:try_start_2b .. :try_end_4a} :catch_4b

    goto :goto_43

    .line 64
    :catch_4b
    move-exception v0

    .line 65
    invoke-virtual {v0}, Ljava/io/IOException;->printStackTrace()V

    .line 68
    :cond_4f
    const-string v0, "Censivn3D"

    const-string v1, "End parsing object"

    invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I

    goto :goto_3b
.end method