Advertisement
Chiddix

Widget

Feb 1st, 2013
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.57 KB | None | 0 0
  1. public class Widget {
  2.  
  3.     public ImageRGB disabledSprite;
  4.     public int animationDuration;
  5.     public ImageRGB[] sprites;
  6.     public static Widget[] interfaces;
  7.     public int interfaceUnusedOne;
  8.     public int[] interfaceConditionValues;
  9.     public int interfaceContentType;
  10.     public int[] spritesX;
  11.     public int disabledHoveredColor;
  12.     public int interfaceActionType;
  13.     public String spellName;
  14.     public int enabledColor;
  15.     public int interfaceWidth;
  16.     public String tooltip;
  17.     public String selectedActionName;
  18.     public boolean fontCentered;
  19.     public int interfaceScrollPosition;
  20.     public String[] actions;
  21.     public int[][] interfaceFormulaes;
  22.     public boolean filled;
  23.     public String enabledText;
  24.     public int interfaceHoveredPopup;
  25.     public int inventorySpritePadsX;
  26.     public int disabledColor;
  27.     public int mediaType;
  28.     public int mediaId;
  29.     public boolean inventoryDeletesDraged;
  30.     public int interfaceParentId;
  31.     public int spellUsableOn;
  32.     private static Cache spriteCache;
  33.     public int enabledHoveredColor;
  34.     public int[] interfaceChildren;
  35.     public int[] interfaceChildrenX;
  36.     public boolean inventoryUsable;
  37.     public TypeFace fonts;
  38.     public int inventorySpritePadsY;
  39.     public int[] interfaceConditionTypes;
  40.     public int animationFrame;
  41.     public int[] spritesY;
  42.     public String disabledText;
  43.     public boolean inventoryInterface;
  44.     public int interfaceId;
  45.     public boolean interfaceUnusedTwo;
  46.     public int[] inventoryAmount;
  47.     public int[] inventory;
  48.     public byte interfaceAlpha;
  49.     public int enabledMediaType;
  50.     public int enabledMediaId;
  51.     public int disabledAnimation;
  52.     public int enabledAnimation;
  53.     public boolean inventorySwapable;
  54.     public ImageRGB enabledSprite;
  55.     public int interfaceScrollLimit;
  56.     public int interfaceType;
  57.     public int interfacePositionX;
  58.     static Cache modelCache = new Cache(30);
  59.     public int interfacePositionY;
  60.     public boolean hiddenUntilHovered;
  61.     public int interfaceHeight;
  62.     public boolean fontShadowed;
  63.     public int zoom;
  64.     public int rotationX;
  65.     public int rotationY;
  66.     public int[] interfaceChildrenY;
  67.  
  68.     public void swapInventoryItems(int originalSlot, int newSlot) {
  69.         int originalItem = inventory[originalSlot];
  70.         inventory[originalSlot] = inventory[newSlot];
  71.         inventory[newSlot] = originalItem;
  72.         originalItem = inventoryAmount[originalSlot];
  73.         inventoryAmount[originalSlot] = inventoryAmount[newSlot];
  74.         inventoryAmount[newSlot] = originalItem;
  75.     }
  76.  
  77.     public static void load(Archive interfaceArchive, TypeFace[] typeFaces, Archive mediaArchive) {
  78.         Widget.spriteCache = new Cache(50000);
  79.         Buffer buffer = new Buffer(interfaceArchive.getFile("data"));
  80.         int parentId = -1;
  81.         int interfaceCount = buffer.getUnsignedLEShort();
  82.         Widget.interfaces = new Widget[interfaceCount];
  83.         while (buffer.offset < buffer.payload.length) {
  84.             int interfaceId = buffer.getUnsignedLEShort();
  85.             if (interfaceId == 65535) {
  86.                 parentId = buffer.getUnsignedLEShort();
  87.                 interfaceId = buffer.getUnsignedLEShort();
  88.             }
  89.             Widget widget = Widget.interfaces[interfaceId] = new Widget();
  90.             widget.interfaceId = interfaceId;
  91.             widget.interfaceParentId = parentId;
  92.             widget.interfaceType = buffer.getUnsignedByte();
  93.             widget.interfaceActionType = buffer.getUnsignedByte();
  94.             widget.interfaceContentType = buffer.getUnsignedLEShort();
  95.             widget.interfaceWidth = buffer.getUnsignedLEShort();
  96.             widget.interfaceHeight = buffer.getUnsignedLEShort();
  97.             widget.interfaceAlpha = (byte) buffer.getUnsignedByte();
  98.             widget.interfaceHoveredPopup = buffer.getUnsignedByte();
  99.             if (widget.interfaceHoveredPopup != 0) {
  100.                 widget.interfaceHoveredPopup = (widget.interfaceHoveredPopup - 1 << 8) + buffer.getUnsignedByte();
  101.             } else {
  102.                 widget.interfaceHoveredPopup = -1;
  103.             }
  104.             int conditionCount = buffer.getUnsignedByte();
  105.             if (conditionCount > 0) {
  106.                 widget.interfaceConditionTypes = new int[conditionCount];
  107.                 widget.interfaceConditionValues = new int[conditionCount];
  108.                 for (int interfaceCondition = 0; interfaceCondition < conditionCount; interfaceCondition++) {
  109.                     widget.interfaceConditionTypes[interfaceCondition] = buffer.getUnsignedByte();
  110.                     widget.interfaceConditionValues[interfaceCondition] = buffer.getUnsignedLEShort();
  111.                 }
  112.             }
  113.             int formulaCount = buffer.getUnsignedByte();
  114.             if (formulaCount > 0) {
  115.                 widget.interfaceFormulaes = new int[formulaCount][];
  116.                 for (int interfaceFormula = 0; interfaceFormula < formulaCount; interfaceFormula++) {
  117.                     int interfaceSubFormulaCount = buffer.getUnsignedLEShort();
  118.                     widget.interfaceFormulaes[interfaceFormula] = new int[interfaceSubFormulaCount];
  119.                     for (int interfaceSubFormula = 0; interfaceSubFormula < interfaceSubFormulaCount; interfaceSubFormula++) {
  120.                         widget.interfaceFormulaes[interfaceFormula][interfaceSubFormula] = buffer.getUnsignedLEShort();
  121.                     }
  122.                 }
  123.             }
  124.             if (widget.interfaceType == 0) {
  125.                 widget.interfaceScrollLimit = buffer.getUnsignedLEShort();
  126.                 widget.hiddenUntilHovered = buffer.getUnsignedByte() == 1;
  127.                 int childrenCount = buffer.getUnsignedLEShort();
  128.                 widget.interfaceChildren = new int[childrenCount];
  129.                 widget.interfaceChildrenX = new int[childrenCount];
  130.                 widget.interfaceChildrenY = new int[childrenCount];
  131.                 for (int interfaceChild = 0; interfaceChild < childrenCount; interfaceChild++) {
  132.                     widget.interfaceChildren[interfaceChild] = buffer.getUnsignedLEShort();
  133.                     widget.interfaceChildrenX[interfaceChild] = buffer.getShort();
  134.                     widget.interfaceChildrenY[interfaceChild] = buffer.getShort();
  135.                 }
  136.             }
  137.             if (widget.interfaceType == 1) {
  138.                 widget.interfaceUnusedOne = buffer.getUnsignedLEShort();
  139.                 widget.interfaceUnusedTwo = buffer.getUnsignedByte() == 1;
  140.             }
  141.             if (widget.interfaceType == 2) {
  142.                 widget.inventory = new int[widget.interfaceWidth * widget.interfaceHeight];
  143.                 widget.inventoryAmount = new int[widget.interfaceWidth * widget.interfaceHeight];
  144.                 widget.inventorySwapable = buffer.getUnsignedByte() == 1;
  145.                 widget.inventoryInterface = buffer.getUnsignedByte() == 1;
  146.                 widget.inventoryUsable = buffer.getUnsignedByte() == 1;
  147.                 widget.inventoryDeletesDraged = buffer.getUnsignedByte() == 1;
  148.                 widget.inventorySpritePadsX = buffer.getUnsignedByte();
  149.                 widget.inventorySpritePadsY = buffer.getUnsignedByte();
  150.                 widget.spritesX = new int[20];
  151.                 widget.spritesY = new int[20];
  152.                 widget.sprites = new ImageRGB[20];
  153.                 for (int sprite = 0; sprite < 20; sprite++) {
  154.                     int hasSprite = buffer.getUnsignedByte();
  155.                     if (hasSprite == 1) {
  156.                         widget.spritesX[sprite] = buffer.getShort();
  157.                         widget.spritesY[sprite] = buffer.getShort();
  158.                         String spriteName = buffer.getString();
  159.                         if (mediaArchive != null && spriteName.length() > 0) {
  160.                             int spriteId = spriteName.lastIndexOf(",");
  161.                             widget.sprites[sprite] = Widget.getSprite(
  162.                                     Integer.parseInt(spriteName.substring(spriteId + 1)), mediaArchive,
  163.                                     spriteName.substring(0, spriteId));
  164.                         }
  165.                     }
  166.                 }
  167.                 widget.actions = new String[5];
  168.                 for (int action = 0; action < 5; action++) {
  169.                     widget.actions[action] = buffer.getString();
  170.                     if (widget.actions[action].length() == 0) {
  171.                         widget.actions[action] = null;
  172.                     }
  173.                 }
  174.             }
  175.             if (widget.interfaceType == 3) {
  176.                 widget.filled = buffer.getUnsignedByte() == 1;
  177.             }
  178.             if (widget.interfaceType == 4 || widget.interfaceType == 1) {
  179.                 widget.fontCentered = buffer.getUnsignedByte() == 1;
  180.                 int font = buffer.getUnsignedByte();
  181.                 if (typeFaces != null) {
  182.                     widget.fonts = typeFaces[font];
  183.                 }
  184.                 widget.fontShadowed = buffer.getUnsignedByte() == 1;
  185.             }
  186.             if (widget.interfaceType == 4) {
  187.                 widget.disabledText = buffer.getString();
  188.                 widget.enabledText = buffer.getString();
  189.             }
  190.             if (widget.interfaceType == 1 || widget.interfaceType == 3 || widget.interfaceType == 4) {
  191.                 widget.disabledColor = buffer.getInt();
  192.             }
  193.             if (widget.interfaceType == 3 || widget.interfaceType == 4) {
  194.                 widget.enabledColor = buffer.getInt();
  195.                 widget.disabledHoveredColor = buffer.getInt();
  196.                 widget.enabledHoveredColor = buffer.getInt();
  197.             }
  198.             if (widget.interfaceType == 5) {
  199.                 String spriteName = buffer.getString();
  200.                 if (mediaArchive != null && spriteName.length() > 0) {
  201.                     int spriteId = spriteName.lastIndexOf(",");
  202.                     widget.disabledSprite = Widget.getSprite(Integer.parseInt(spriteName.substring(spriteId + 1)),
  203.                             mediaArchive, spriteName.substring(0, spriteId));
  204.                 }
  205.                 spriteName = buffer.getString();
  206.                 if (mediaArchive != null && spriteName.length() > 0) {
  207.                     int spriteId = spriteName.lastIndexOf(",");
  208.                     widget.enabledSprite = Widget.getSprite(Integer.parseInt(spriteName.substring(spriteId + 1)),
  209.                             mediaArchive, spriteName.substring(0, spriteId));
  210.                 }
  211.             }
  212.             if (widget.interfaceType == 6) {
  213.                 interfaceId = buffer.getUnsignedByte();
  214.                 if (interfaceId != 0) {
  215.                     widget.mediaType = 1;
  216.                     widget.mediaId = (interfaceId - 1 << 8) + buffer.getUnsignedByte();
  217.                 }
  218.                 interfaceId = buffer.getUnsignedByte();
  219.                 if (interfaceId != 0) {
  220.                     widget.enabledMediaType = 1;
  221.                     widget.enabledMediaId = (interfaceId - 1 << 8) + buffer.getUnsignedByte();
  222.                 }
  223.                 interfaceId = buffer.getUnsignedByte();
  224.                 if (interfaceId != 0) {
  225.                     widget.disabledAnimation = (interfaceId - 1 << 8) + buffer.getUnsignedByte();
  226.                 } else {
  227.                     widget.disabledAnimation = -1;
  228.                 }
  229.                 interfaceId = buffer.getUnsignedByte();
  230.                 if (interfaceId != 0) {
  231.                     widget.enabledAnimation = (interfaceId - 1 << 8) + buffer.getUnsignedByte();
  232.                 } else {
  233.                     widget.enabledAnimation = -1;
  234.                 }
  235.                 widget.zoom = buffer.getUnsignedLEShort();
  236.                 widget.rotationX = buffer.getUnsignedLEShort();
  237.                 widget.rotationY = buffer.getUnsignedLEShort();
  238.             }
  239.             if (widget.interfaceType == 7) {
  240.                 widget.inventory = new int[widget.interfaceWidth * widget.interfaceHeight];
  241.                 widget.inventoryAmount = new int[widget.interfaceWidth * widget.interfaceHeight];
  242.                 widget.fontCentered = buffer.getUnsignedByte() == 1;
  243.                 int fontCount = buffer.getUnsignedByte();
  244.                 if (typeFaces != null) {
  245.                     widget.fonts = typeFaces[fontCount];
  246.                 }
  247.                 widget.fontShadowed = buffer.getUnsignedByte() == 1;
  248.                 widget.disabledColor = buffer.getInt();
  249.                 widget.inventorySpritePadsX = buffer.getShort();
  250.                 widget.inventorySpritePadsY = buffer.getShort();
  251.                 widget.inventoryInterface = buffer.getUnsignedByte() == 1;
  252.                 widget.actions = new String[5];
  253.                 for (int action = 0; action < 5; action++) {
  254.                     widget.actions[action] = buffer.getString();
  255.                     if (widget.actions[action].length() == 0) {
  256.                         widget.actions[action] = null;
  257.                     }
  258.                 }
  259.             }
  260.             if (widget.interfaceActionType == 2 || widget.interfaceType == 2) {
  261.                 widget.selectedActionName = buffer.getString();
  262.                 widget.spellName = buffer.getString();
  263.                 widget.spellUsableOn = buffer.getUnsignedLEShort();
  264.             }
  265.             if (widget.interfaceType == 8) {
  266.                 widget.disabledText = buffer.getString();
  267.             }
  268.             if (widget.interfaceActionType == 1 || widget.interfaceActionType == 4 || widget.interfaceActionType == 5
  269.                     || widget.interfaceActionType == 6) {
  270.                 widget.tooltip = buffer.getString();
  271.                 if (widget.tooltip.length() == 0) {
  272.                     if (widget.interfaceActionType == 1) {
  273.                         widget.tooltip = "Ok";
  274.                     }
  275.                     if (widget.interfaceActionType == 4) {
  276.                         widget.tooltip = "Select";
  277.                     }
  278.                     if (widget.interfaceActionType == 5) {
  279.                         widget.tooltip = "Select";
  280.                     }
  281.                     if (widget.interfaceActionType == 6) {
  282.                         widget.tooltip = "Continue";
  283.                     }
  284.                 }
  285.             }
  286.         }
  287.         Widget.spriteCache = null;
  288.     }
  289.  
  290.     private Model getModel(int modelType, int modelId) {
  291.         Model model = (Model) Widget.modelCache.get((modelType << 16) + modelId);
  292.         if (model != null) {
  293.             return model;
  294.         }
  295.         if (modelType == 1) {
  296.             model = Model.getModel(modelId);
  297.         }
  298.         if (modelType == 2) {
  299.             model = NpcDefinition.getDefinition(modelId).getModel(true);
  300.         }
  301.         if (modelType == 3) {
  302.             model = Client.clientsPlayer.getModel();
  303.         }
  304.         if (modelType == 4) {
  305.             model = ItemDefinition.getDefinition(modelId).getModel(50, true);
  306.         }
  307.         if (modelType == 5) {
  308.             model = null;
  309.         }
  310.         if (model != null) {
  311.             Widget.modelCache.put(model, (modelType << 16) + modelId);
  312.         }
  313.         return model;
  314.     }
  315.  
  316.     private static ImageRGB getSprite(int spriteId, Archive mediaArchive, String spriteName) {
  317.         long spriteHash = (TextUtils.spriteToHash(spriteName) << 8) + spriteId;
  318.         ImageRGB sprite = (ImageRGB) Widget.spriteCache.get(spriteHash);
  319.         if (sprite != null) {
  320.             return sprite;
  321.         }
  322.         try {
  323.             sprite = new ImageRGB(mediaArchive, spriteName, spriteId);
  324.             Widget.spriteCache.put(sprite, spriteHash);
  325.         } catch (Exception exception) {
  326.             return null;
  327.         }
  328.         return sprite;
  329.     }
  330.  
  331.     public static void setModel(int modelId, int modelType, Model model) {
  332.         Widget.modelCache.removeAll();
  333.         Widget.modelCache.put(model, (modelType << 16) + modelId);
  334.     }
  335.  
  336.     public Model getAnimatedModel(int frame1Id, int fram2Id, boolean mediaEnabled) {
  337.         Model model;
  338.         if (mediaEnabled) {
  339.             model = getModel(enabledMediaType, enabledMediaId);
  340.         } else {
  341.             model = getModel(mediaType, mediaId);
  342.         }
  343.         if (model == null) {
  344.             return null;
  345.         }
  346.         if (fram2Id == -1 && frame1Id == -1 && model.triangleColorValues == null) {
  347.             return model;
  348.         }
  349.         Model animatedModel = new Model(9, true, Animation.exists(fram2Id) & Animation.exists(frame1Id), false, model);
  350.         if (fram2Id != -1 || frame1Id != -1) {
  351.             animatedModel.createBones((byte) -71);
  352.         }
  353.         if (fram2Id != -1) {
  354.             animatedModel.applyTransform(fram2Id, 40542);
  355.         }
  356.         if (frame1Id != -1) {
  357.             animatedModel.applyTransform(frame1Id, 40542);
  358.         }
  359.         animatedModel.applyLighting(64, 768, -50, -10, -50, true);
  360.         return animatedModel;
  361.     }
  362. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement