// 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; import java.nio.ByteBuffer; import org.infinity.datatype.Bitmap; import org.infinity.datatype.DecNumber; import org.infinity.datatype.FloatNumber; import org.infinity.datatype.TextString; import org.infinity.util.io.StreamUtils; public class AbstractVariable extends AbstractStruct implements AddRemovable { // Variable-specific field labels public static final String VAR = "Variable"; public static final String VAR_NAME = "Name"; public static final String VAR_TYPE = "Type"; public static final String VAR_REFERENCE = "Reference value (unused)"; public static final String VAR_DWORD = "Dword value (unused)"; public static final String VAR_INT = "Integer value"; public static final String VAR_DOUBLE = "Double value (unused)"; public static final String VAR_SCRIPT_NAME = "Script name (unused)"; public static final String s_type[] = {"Integer", "Float", "Script name", "Resource reference", "String reference", "Double word"}; protected AbstractVariable() throws Exception { super(null, VAR, StreamUtils.getByteBuffer(84), 0); } protected AbstractVariable(AbstractStruct superStruct, ByteBuffer buffer, int offset, int nr) throws Exception { super(superStruct, VAR + " " + nr, buffer, offset); } protected AbstractVariable(AbstractStruct superStruct, String name, ByteBuffer buffer, int offset) throws Exception { super(superStruct, name, 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, VAR_NAME)); addField(new Bitmap(buffer, offset + 32, 2, VAR_TYPE, s_type)); addField(new DecNumber(buffer, offset + 34, 2, VAR_REFERENCE)); addField(new DecNumber(buffer, offset + 36, 4, VAR_DWORD)); addField(new DecNumber(buffer, offset + 40, 4, VAR_INT)); addField(new FloatNumber(buffer, offset + 44, 8, VAR_DOUBLE)); addField(new TextString(buffer, offset + 52, 32, VAR_SCRIPT_NAME)); return offset + 84; } }