// Near Infinity - An Infinity Engine Browser and Editor
// Copyright (C) 2001 - 2005 Jon Olav Hauglid
// See LICENSE.txt for license information
package org.infinity.resource.are;
import java.nio.ByteBuffer;
import org.infinity.datatype.DecNumber;
import org.infinity.datatype.Flag;
import org.infinity.datatype.TextString;
import org.infinity.datatype.Unknown;
import org.infinity.resource.AbstractStruct;
import org.infinity.resource.AddRemovable;
import org.infinity.util.io.StreamUtils;
public final class TiledObject extends AbstractStruct implements AddRemovable
{
// ARE/Tiled Object-specific field labels
public static final String ARE_TILED = "Tiled object";
public static final String ARE_TILED_NAME = "Name";
public static final String ARE_TILED_ID = "Tile ID";
public static final String ARE_TILED_FLAGS = "Tile flags";
public static final String ARE_TILED_FIRST_VERTEX_INDEX_PRI = "First vertex index (primary)";
public static final String ARE_TILED_FIRST_VERTEX_INDEX_SEC = "First vertex index (secondary)";
public static final String ARE_TILED_NUM_VERTICES_PRI = "# vertices (primary)";
public static final String ARE_TILED_NUM_VERTICES_SEC = "# vertices (secondary)";
public static final String[] s_flag = { "No flags set", "Secondary tile", "Can be looked through" };
TiledObject() throws Exception
{
super(null, ARE_TILED, StreamUtils.getByteBuffer(108), 0);
}
TiledObject(AbstractStruct superStruct, ByteBuffer buffer, int offset, int number) throws Exception
{
super(superStruct, ARE_TILED + " " + number, buffer, offset);
}
//--------------------- Begin Interface AddRemovable ---------------------
@Override
public boolean canRemove()
{
return true;
}
//--------------------- End Interface AddRemovable ---------------------
@Override
public int read(ByteBuffer buffer, int offset) throws Exception
{
addField(new TextString(buffer, offset, 32, ARE_TILED_NAME));
addField(new TextString(buffer, offset + 32, 8, ARE_TILED_ID));
addField(new Flag(buffer, offset + 40, 4, ARE_TILED_FLAGS, s_flag));
addField(new DecNumber(buffer, offset + 44, 4, ARE_TILED_FIRST_VERTEX_INDEX_PRI));
addField(new DecNumber(buffer, offset + 48, 2, ARE_TILED_NUM_VERTICES_PRI));
addField(new DecNumber(buffer, offset + 50, 2, ARE_TILED_NUM_VERTICES_SEC));
addField(new DecNumber(buffer, offset + 52, 4, ARE_TILED_FIRST_VERTEX_INDEX_SEC));
addField(new Unknown(buffer, offset + 60, 48));
return offset + 108;
}
}