/**
* Copyright (c) 2012, Hadyn Richard
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is furnished to do
* so, subject to the following conditions:
*
* The above copyright notice and permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package net.scapeemulator.cache.def;
import java.nio.ByteBuffer;
import net.scapeemulator.cache.util.ByteBufferUtils;
/**
* Created by Hadyn Richard
*/
public final class WidgetDefinition {
private int hash;
public static WidgetDefinition decode(ByteBuffer buffer, int hash) {
WidgetDefinition definition = new WidgetDefinition();
definition.hash = hash;
if (buffer.get() == -1) {
decodeNewFormat(definition, buffer);
} else {
decodeOldFormat(definition, buffer);
}
return definition;
}
private static void decodeOldFormat(WidgetDefinition definition, ByteBuffer buffer) {
}
private static void decodeNewFormat(WidgetDefinition def, ByteBuffer buffer) {
int type = buffer.get() & 0xff;
if (0 != (128 & type)) {
type &= 127;
ByteBufferUtils.getString(buffer);
}
int contentType = buffer.getShort() & 0xffff;
int x = buffer.getShort();
int y = buffer.getShort();
int width = buffer.getShort() & 0xffff;
int height = buffer.getShort() & 0xffff;
int widthOffset2 = buffer.get();
int aByte241 = buffer.get();
int aByte273 = buffer.get();
int aByte162 = buffer.get();
int parentId = buffer.getShort() & 0xffff;
if (65535 == parentId) {
parentId = -1;
} else {
parentId = (def.hash & -65536) + parentId;
}
boolean isHidden = buffer.get() == 1;
if (type == 0) {
int anInt240 = buffer.getShort() & 0xffff;
int scrollMaxV = buffer.getShort() & 0xffff;
boolean aBoolean219 = buffer.get() == 1;
}
int optionMask;
if (type == 5) {
int disabledImage = buffer.getInt();
int anInt301 = buffer.getShort() & 0xffff;
optionMask = buffer.get() & 0xff;
boolean aBoolean157 = -1 != ~(2 & optionMask);
boolean aBoolean186 = ~(1 & optionMask) != -1;
int anInt223 = buffer.get() & 0xff;
int anInt288 = buffer.get() & 0xff;
int anInt287 = buffer.getInt();
boolean aBoolean178 = buffer.get() == 1;
boolean aBoolean199 = buffer.get() == 1;
}
if (type == 6) {
int anInt202 = 1;
int anInt201 = buffer.getShort() & 0xffff;
if (anInt201 == 65535){
anInt201 = -1;
}
int anInt259 = buffer.getShort();
int anInt230 = buffer.getShort();
int anInt182 = buffer.getShort() & 0xffff;
int anInt308 = buffer.getShort() & 0xffff;
int anInt280 = buffer.getShort() & 0xffff;
int anInt164 = buffer.getShort() & 0xffff;
int anInt305 = buffer.getShort() & 0xffff;
if ('\uffff' == anInt305){
anInt305 = -1;
}
boolean aBoolean181 = buffer.get() == 1;
short aShort293 = (short) (buffer.getShort() & 0xffff);
short aShort169 = (short) (buffer.getShort() & 0xffff);
boolean aBoolean309 = buffer.get() == 1;
if (widthOffset2 != 0) {
int anInt184 = buffer.getShort() & 0xffff;
}
if (aByte241 != 0) {
int anInt312 = buffer.getShort() & 0xffff;
}
}
if (~type == -5) {
int font = buffer.getShort() & 0xffff;
if (~font == -65536) {
font = -1;
}
String disabledText = ByteBufferUtils.getString(buffer);
int anInt205 = buffer.get() & 0xff;
int textAlignment = buffer.get() & 0xff;
int anInt225 = buffer.get() & 0xff;
boolean shaded = buffer.get() == 1;
int disabledColor = buffer.getInt();
}
if (type == 3) {
int disabledColor = buffer.getInt();
boolean filled = 1 == buffer.get();
int anInt223 = buffer.get() & 0xff;
}
if (-10 == ~type) {
int anInt250 = buffer.get() & 0xff;
int disabledColor = buffer.getInt();
boolean aBoolean167 = 1 == buffer.get();
}
optionMask = ByteBufferUtils.getTriByte(buffer);
int var4 = buffer.get() & 0xff;
int var5;
if (var4 != 0) {
int[] anIntArray299 = new int[10];
byte[] aByteArray263 = new byte[10];
for (byte[] aByteArray231 = new byte[10]; var4 != 0; var4 = buffer.get() & 0xff) {
var5 = (var4 >> 4) - 1;
var4 = buffer.get() & 0xff | var4 << 8;
var4 &= 4095;
if (4095 == var4) {
anIntArray299[var5] = -1;
} else {
anIntArray299[var5] = var4;
}
aByteArray263[var5] = buffer.get();
aByteArray231[var5] = buffer.get();
}
}
String aClass94_277 = ByteBufferUtils.getString(buffer);
var5 = buffer.get() & 0xff;
int var6 = var5 & 15;
if (0 < var6) {
String[] itemOptions = new String[var6];
for (int var8 = 0; var6 > var8; ++var8) {
itemOptions[var8] = ByteBufferUtils.getJagexString(buffer);
}
}
int[] anIntArray249 = null;
int var7 = var5 >> 4;
if (var7 > 0) {
int var8 = buffer.get() & 0xff;
anIntArray249 = new int[var8 + 1];
for (int var9 = 0; var9 < anIntArray249.length; ++var9) {
anIntArray249[var9] = -1;
}
anIntArray249[var8] = buffer.getShort() & 0xffff;
}
if (var7 > 1) {
int var8 = buffer.get() & 0xff;
anIntArray249[var8] = buffer.getShort() & 0xffff;
}
int anInt214 = buffer.get() & 0xff;
int anInt179 = buffer.get() & 0xff;
boolean aBoolean200 = buffer.get() == 1;
String selectedActionName = ByteBufferUtils.getString(buffer);
if (0 != (127 & optionMask >> 11)) {
int var8 = buffer.getShort() & 0xffff;
int anInt266 = buffer.getShort() & 0xffff;
if (-65536 == ~var8) {
var8 = -1;
}
if ('\uffff' == anInt266) {
anInt266 = -1;
}
int anInt238 = buffer.getShort() & 0xffff;
if (anInt238 == '\uffff') {
anInt238 = -1;
}
}
/* Decode the script params */
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
decodeScriptParams(buffer);
}
private static Object[] decodeScriptParams(ByteBuffer buffer) {
int amountParams = buffer.get() & 0xff;
if (amountParams != 0) {
Object[] params = new Object[amountParams];
for (int var5 = 0; var5 < amountParams; ++var5) {
int type = buffer.get() & 0xff;
if (type != 0) {
if (type == 1) {
params[var5] = ByteBufferUtils.getString(buffer);
}
} else {
params[var5] = buffer.getInt();
}
}
return params;
}
return null;
}
}