ObjParser.smali

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

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


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/censivn/C3DEngine/parser/ObjParser$ObjFace;
    }
.end annotation


# instance fields
.field private final DIFFUSE_COLOR:Ljava/lang/String;

.field private final DIFFUSE_TEX_MAP:Ljava/lang/String;

.field private final FACE:Ljava/lang/String;

.field private final MATERIAL_LIB:Ljava/lang/String;

.field private final NEW_MATERIAL:Ljava/lang/String;

.field private final NORMAL:Ljava/lang/String;

.field private final OBJECT:Ljava/lang/String;

.field private final TEXCOORD:Ljava/lang/String;

.field private final USE_MATERIAL:Ljava/lang/String;

.field private final VERTEX:Ljava/lang/String;

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


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

    .prologue
    .line 42
    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 23
    const-string/jumbo v0, "v"

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

    .line 24
    const-string v0, "f"

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

    .line 25
    const-string/jumbo v0, "vt"

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

    .line 26
    const-string/jumbo v0, "vn"

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

    .line 27
    const-string v0, "o"

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

    .line 28
    const-string v0, "mtllib"

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

    .line 29
    const-string/jumbo v0, "usemtl"

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

    .line 30
    const-string v0, "newmtl"

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

    .line 31
    const-string v0, "Kd"

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

    .line 32
    const-string v0, "map_Kd"

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

    .line 43
    return-void
.end method

.method private readMaterialLib(Ljava/lang/String;)V
    .registers 12

    .prologue
    const/4 v9, -0x1

    const/4 v5, 0x0

    const/high16 v8, 0x437f0000    # 255.0f

    const/4 v7, 0x1

    .line 155
    new-instance v1, Ljava/lang/StringBuffer;

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

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

    .line 156
    new-instance v0, Ljava/lang/StringBuffer;

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

    .line 157
    const-string v2, "."

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

    move-result v2

    .line 158
    if-le v2, v9, :cond_21

    .line 159
    add-int/lit8 v3, v2, 0x1

    const-string v4, "_"

    invoke-virtual {v0, v2, v3, v4}, Ljava/lang/StringBuffer;->replace(IILjava/lang/String;)Ljava/lang/StringBuffer;

    move-result-object v0

    .line 161
    :cond_21
    const-string v2, ":raw/"

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

    .line 162
    invoke-virtual {v0}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v0

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

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

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

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

    move-result-object v1

    invoke-virtual {v2, v1, v5, v5}, 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 165
    new-instance v2, Ljava/io/BufferedReader;

    new-instance v1, Ljava/io/InputStreamReader;

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

    invoke-direct {v2, v1}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V

    .line 167
    const-string v1, ""

    .line 170
    :cond_49
    :goto_49
    :try_start_49
    invoke-virtual {v2}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;

    move-result-object v0

    if-eqz v0, :cond_118

    .line 171
    const-string v3, " "

    invoke-virtual {v0, v3}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;

    move-result-object v3

    .line 172
    array-length v0, v3

    if-eqz v0, :cond_49

    .line 174
    const/4 v0, 0x0

    aget-object v0, v3, v0

    .line 176
    const-string v4, "newmtl"

    invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v4

    if-eqz v4, :cond_75

    .line 177
    array-length v0, v3

    if-le v0, v7, :cond_10d

    .line 178
    const/4 v0, 0x1

    aget-object v0, v3, v0

    .line 179
    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->materialMap:Ljava/util/HashMap;

    new-instance v3, Lcom/censivn/C3DEngine/parser/AParser$Material;

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

    invoke-virtual {v1, v0, v3}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    :goto_73
    move-object v1, v0

    .line 202
    goto :goto_49

    .line 181
    :cond_75
    const-string v4, "Kd"

    invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v4

    if-eqz v4, :cond_b0

    const-string v4, "map_Kd"

    invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v4

    if-nez v4, :cond_b0

    .line 182
    new-instance v4, Lcom/censivn/C3DEngine/api/element/Color4;

    const/4 v0, 0x1

    aget-object v0, v3, v0

    invoke-static {v0}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v0

    mul-float/2addr v0, v8

    const/4 v5, 0x2

    aget-object v5, v3, v5

    invoke-static {v5}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v5

    mul-float/2addr v5, v8

    const/4 v6, 0x3

    aget-object v3, v3, v6

    invoke-static {v3}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v3

    mul-float/2addr v3, v8

    const/high16 v6, 0x437f0000    # 255.0f

    invoke-direct {v4, v0, v5, v3, v6}, Lcom/censivn/C3DEngine/api/element/Color4;-><init>(FFFF)V

    .line 183
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->materialMap:Ljava/util/HashMap;

    invoke-virtual {v0, v1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/censivn/C3DEngine/parser/AParser$Material;

    iput-object v4, v0, Lcom/censivn/C3DEngine/parser/AParser$Material;->diffuseColor:Lcom/censivn/C3DEngine/api/element/Color4;

    move-object v0, v1

    .line 184
    goto :goto_73

    :cond_b0
    const-string v4, "map_Kd"

    invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_10d

    .line 185
    array-length v0, v3

    if-le v0, v7, :cond_10d

    .line 186
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->materialMap:Ljava/util/HashMap;

    invoke-virtual {v0, v1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/censivn/C3DEngine/parser/AParser$Material;

    const/4 v4, 0x1

    aget-object v4, v3, v4

    iput-object v4, v0, Lcom/censivn/C3DEngine/parser/AParser$Material;->diffuseTextureMap:Ljava/lang/String;

    .line 187
    new-instance v0, Ljava/lang/StringBuffer;

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

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

    .line 188
    const-string v4, ":drawable/"

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

    .line 190
    new-instance v4, Ljava/lang/StringBuffer;

    const/4 v5, 0x1

    aget-object v3, v3, v5

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

    .line 191
    const-string v3, "."

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

    move-result v3

    .line 192
    if-le v3, v9, :cond_110

    .line 193
    const/4 v5, 0x0

    invoke-virtual {v4, v5, v3}, Ljava/lang/StringBuffer;->substring(II)Ljava/lang/String;

    move-result-object v3

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

    .line 197
    :goto_ec
    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->resources:Landroid/content/res/Resources;

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

    move-result-object v4

    const/4 v5, 0x0

    const/4 v6, 0x0

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

    move-result v3

    .line 198
    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->context:Lcom/censivn/C3DEngine/Engine;

    invoke-static {v4, v3}, Lcom/censivn/C3DEngine/utils/Utils;->makeBitmapFromResourceId(Lcom/censivn/C3DEngine/Engine;I)Landroid/graphics/Bitmap;

    .line 199
    iget-object v3, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->textureAtlas:Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;

    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->context:Lcom/censivn/C3DEngine/Engine;

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

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

    move-result-object v0

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

    invoke-virtual {v3, v4, v5}, Lcom/censivn/C3DEngine/parser/AParser$TextureAtlas;->addBitmapAsset(Lcom/censivn/C3DEngine/Engine;Lcom/censivn/C3DEngine/parser/AParser$BitmapAsset;)V

    :cond_10d
    move-object v0, v1

    goto/16 :goto_73

    .line 195
    :cond_110
    invoke-virtual {v0, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/StringBuffer;)Ljava/lang/StringBuffer;
    :try_end_113
    .catch Ljava/io/IOException; {:try_start_49 .. :try_end_113} :catch_114

    goto :goto_ec

    .line 203
    :catch_114
    move-exception v0

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

    .line 206
    :cond_118
    return-void
.end method


# virtual methods
.method protected cleanup()V
    .registers 2

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

    .line 211
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->materialMap:Ljava/util/HashMap;

    invoke-virtual {v0}, Ljava/util/HashMap;->clear()V

    .line 212
    return-void
.end method

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

    .prologue
    const/4 v2, 0x0

    .line 122
    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 123
    new-instance v3, Lcom/censivn/C3DEngine/coreapi/primitives/Object3dContainer;

    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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 124
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->parseObjects:Ljava/util/ArrayList;

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

    move-result v4

    .line 125
    const/4 v0, 0x0

    .line 127
    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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_8d

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

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

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

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

    .line 131
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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 132
    iget-object v1, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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/ObjParser;->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 133
    iget-object v5, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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 137
    :goto_40
    if-ge v2, v4, :cond_75

    .line 138
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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 139
    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 140
    iget-object v5, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->context:Lcom/censivn/C3DEngine/Engine;

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

    iget-object v7, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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 137
    add-int/lit8 v0, v2, 0x1

    move v2, v0

    goto :goto_40

    .line 143
    :cond_75
    iget-object v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->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_82

    .line 144
    if-eqz v1, :cond_82

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

    .line 147
    :cond_82
    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 149
    invoke-virtual {p0}, Lcom/censivn/C3DEngine/parser/ObjParser;->cleanup()V

    .line 151
    return-object v3

    :cond_8d
    move-object v1, v0

    goto :goto_40
.end method

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

    .prologue
    const/4 v5, 0x0

    const/4 v8, 0x4

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

    .line 48
    invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;

    move-result-object v0

    invoke-virtual {v0}, Ljava/util/Calendar;->getTimeInMillis()J

    move-result-wide v2

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

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

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

    invoke-virtual {v1, v4, v5, v5}, 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 51
    new-instance v1, Ljava/io/BufferedReader;

    new-instance v4, Ljava/io/InputStreamReader;

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

    invoke-direct {v1, v4}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V

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

    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->vertices:Ljava/util/ArrayList;

    iget-object v5, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->texCoords:Ljava/util/ArrayList;

    iget-object v6, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->normals:Ljava/util/ArrayList;

    invoke-direct {v0, v4, v5, v6}, Lcom/censivn/C3DEngine/parser/ParseObjectData;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V

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

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

    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

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

    .line 56
    const-string v0, "Censivn3D"

    new-instance v4, Ljava/lang/StringBuilder;

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

    const-string v5, "Start parsing object "

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

    move-result-object v4

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

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

    move-result-object v4

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

    move-result-object v4

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

    .line 57
    const-string v0, "Censivn3D"

    new-instance v4, Ljava/lang/StringBuilder;

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

    const-string v5, "Start time "

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

    move-result-object v4

    invoke-virtual {v4, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    move-result-object v4

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

    move-result-object v4

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

    .line 60
    :cond_6a
    :goto_6a
    :try_start_6a
    invoke-virtual {v1}, Ljava/io/BufferedReader;->readLine()Ljava/lang/String;

    move-result-object v0

    if-eqz v0, :cond_b7

    .line 64
    new-instance v4, Ljava/util/StringTokenizer;

    const-string v5, " "

    invoke-direct {v4, v0, v5}, Ljava/util/StringTokenizer;-><init>(Ljava/lang/String;Ljava/lang/String;)V

    .line 65
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->countTokens()I

    move-result v5

    .line 66
    if-eqz v5, :cond_6a

    .line 68
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v6

    .line 70
    const-string/jumbo v7, "v"

    invoke-virtual {v6, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v7

    if-eqz v7, :cond_d9

    .line 71
    new-instance v0, Lcom/censivn/C3DEngine/api/element/Number3d;

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

    .line 72
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v5

    invoke-static {v5}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v5

    iput v5, v0, Lcom/censivn/C3DEngine/api/element/Number3d;->x:F

    .line 73
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v5

    invoke-static {v5}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v5

    iput v5, v0, Lcom/censivn/C3DEngine/api/element/Number3d;->y:F

    .line 74
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v4

    invoke-static {v4}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v4

    iput v4, v0, Lcom/censivn/C3DEngine/api/element/Number3d;->z:F

    .line 75
    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->vertices:Ljava/util/ArrayList;

    invoke-virtual {v4, v0}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    :try_end_b2
    .catch Ljava/io/IOException; {:try_start_6a .. :try_end_b2} :catch_b3

    goto :goto_6a

    .line 113
    :catch_b3
    move-exception v0

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

    .line 117
    :cond_b7
    invoke-static {}, Ljava/util/Calendar;->getInstance()Ljava/util/Calendar;

    move-result-object v0

    invoke-virtual {v0}, Ljava/util/Calendar;->getTimeInMillis()J

    move-result-wide v0

    .line 118
    const-string v4, "Censivn3D"

    new-instance v5, Ljava/lang/StringBuilder;

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

    const-string v6, "End time "

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

    move-result-object v5

    sub-long/2addr v0, v2

    invoke-virtual {v5, v0, v1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder;

    move-result-object v0

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

    move-result-object v0

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

    .line 119
    return-void

    .line 76
    :cond_d9
    :try_start_d9
    const-string v7, "f"

    invoke-virtual {v6, v7}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v7

    if-eqz v7, :cond_118

    .line 77
    if-ne v5, v8, :cond_fc

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

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

    add-int/lit8 v5, v5, 0x1

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

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

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

    new-instance v5, Lcom/censivn/C3DEngine/parser/ObjParser$ObjFace;

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

    const/4 v7, 0x3

    invoke-direct {v5, p0, v0, v6, v7}, Lcom/censivn/C3DEngine/parser/ObjParser$ObjFace;-><init>(Lcom/censivn/C3DEngine/parser/ObjParser;Ljava/lang/String;Ljava/lang/String;I)V

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

    goto/16 :goto_6a

    .line 80
    :cond_fc
    const/4 v4, 0x5

    if-ne v5, v4, :cond_6a

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

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

    add-int/lit8 v5, v5, 0x2

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

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

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

    new-instance v5, Lcom/censivn/C3DEngine/parser/ObjParser$ObjFace;

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

    const/4 v7, 0x4

    invoke-direct {v5, p0, v0, v6, v7}, Lcom/censivn/C3DEngine/parser/ObjParser$ObjFace;-><init>(Lcom/censivn/C3DEngine/parser/ObjParser;Ljava/lang/String;Ljava/lang/String;I)V

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

    goto/16 :goto_6a

    .line 84
    :cond_118
    const-string/jumbo v0, "vt"

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_144

    .line 85
    new-instance v0, Lcom/censivn/C3DEngine/api/element/Uv;

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

    .line 86
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v5

    invoke-static {v5}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v5

    iput v5, v0, Lcom/censivn/C3DEngine/api/element/Uv;->u:F

    .line 87
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v4

    invoke-static {v4}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v4

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

    mul-float/2addr v4, v5

    iput v4, v0, Lcom/censivn/C3DEngine/api/element/Uv;->v:F

    .line 88
    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->texCoords:Ljava/util/ArrayList;

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

    goto/16 :goto_6a

    .line 89
    :cond_144
    const-string/jumbo v0, "vn"

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_177

    .line 90
    new-instance v0, Lcom/censivn/C3DEngine/api/element/Number3d;

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

    .line 91
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v5

    invoke-static {v5}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v5

    iput v5, v0, Lcom/censivn/C3DEngine/api/element/Number3d;->x:F

    .line 92
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v5

    invoke-static {v5}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v5

    iput v5, v0, Lcom/censivn/C3DEngine/api/element/Number3d;->y:F

    .line 93
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v4

    invoke-static {v4}, Ljava/lang/Float;->parseFloat(Ljava/lang/String;)F

    move-result v4

    iput v4, v0, Lcom/censivn/C3DEngine/api/element/Number3d;->z:F

    .line 94
    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->normals:Ljava/util/ArrayList;

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

    goto/16 :goto_6a

    .line 95
    :cond_177
    const-string v0, "mtllib"

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_188

    .line 96
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v0

    invoke-direct {p0, v0}, Lcom/censivn/C3DEngine/parser/ObjParser;->readMaterialLib(Ljava/lang/String;)V

    goto/16 :goto_6a

    .line 97
    :cond_188
    const-string/jumbo v0, "usemtl"

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_199

    .line 98
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v0

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

    goto/16 :goto_6a

    .line 99
    :cond_199
    const-string v0, "o"

    invoke-virtual {v6, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_6a

    .line 100
    invoke-virtual {v4}, Ljava/util/StringTokenizer;->hasMoreTokens()Z

    move-result v0

    if-eqz v0, :cond_1d0

    invoke-virtual {v4}, Ljava/util/StringTokenizer;->nextToken()Ljava/lang/String;

    move-result-object v0

    .line 101
    :goto_1ab
    iget-boolean v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->firstObject:Z

    if-eqz v4, :cond_1d3

    .line 102
    const-string v4, "Censivn3D"

    new-instance v5, Ljava/lang/StringBuilder;

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

    const-string v6, "Create object "

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

    move-result-object v5

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

    move-result-object v5

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

    move-result-object v5

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

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

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

    .line 104
    const/4 v0, 0x0

    iput-boolean v0, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->firstObject:Z

    goto/16 :goto_6a

    .line 100
    :cond_1d0
    const-string v0, ""

    goto :goto_1ab

    .line 106
    :cond_1d3
    const-string v4, "Censivn3D"

    new-instance v5, Ljava/lang/StringBuilder;

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

    const-string v6, "Create object "

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

    move-result-object v5

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

    move-result-object v5

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

    move-result-object v5

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

    .line 107
    new-instance v4, Lcom/censivn/C3DEngine/parser/ParseObjectData;

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

    iget-object v6, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->texCoords:Ljava/util/ArrayList;

    iget-object v7, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->normals:Ljava/util/ArrayList;

    invoke-direct {v4, v5, v6, v7}, Lcom/censivn/C3DEngine/parser/ParseObjectData;-><init>(Ljava/util/ArrayList;Ljava/util/ArrayList;Ljava/util/ArrayList;)V

    iput-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

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

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

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

    iget-object v4, p0, Lcom/censivn/C3DEngine/parser/ObjParser;->co:Lcom/censivn/C3DEngine/parser/ParseObjectData;

    invoke-virtual {v0, v4}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z
    :try_end_203
    .catch Ljava/io/IOException; {:try_start_d9 .. :try_end_203} :catch_b3

    goto/16 :goto_6a
.end method