Advertisement
dermetfan

How to use the Accessor

Feb 9th, 2014
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.08 KB | None | 0 0
  1. /* The UserData#set(Body, Object) method is not necessary. It's just meant to make it a bit easier because you don't have to check if a UserData instance already exists in the Body/Fixture/Joint's user data. The method sure needs some improvements, but I guess it's enough for you to get the idea. */
  2.  
  3. /** holds a {@link Box2DSprite} and {@link Breakable} for use with the according {@link Accessor Accessors}
  4.  *  @author dermetfan */
  5. public class UserData {
  6.  
  7.         public Box2DSprite sprite;
  8.         public Breakable breakable;
  9.  
  10.         public UserData() {
  11.         }
  12.  
  13.         public UserData(Box2DSprite sprite, Breakable breakable) {
  14.             this.sprite = sprite;
  15.             this.breakable = breakable;
  16.         }
  17.  
  18.         /** creates a new {@link UserData} instance if the body's {@link Body#getUserData() user data} does not already hold one and puts the given object in (if it's a {@link Breakable} or {@link Box2DSprite})
  19.          *  @param data the {@link Box2DSprite} or {@link Breakable} to put in the body's user data */
  20.         public static void set(Body body, Object data) {
  21.             UserData userData = body.getUserData() instanceof UserData ? (UserData) body.getUserData() : new UserData();
  22.             if(data instanceof Box2DSprite)
  23.                 userData.sprite = (Box2DSprite) data;
  24.             else if(data instanceof Breakable)
  25.                 userData.breakable = (Breakable) data;
  26.         }
  27.  
  28.     }
  29.  
  30. ///////////////////////////////////////////////////////////////////////////////////////////
  31.  
  32. Box2DSprite.setUserDataAccessor(new Accessor<Box2DSprite, Object>() {
  33.  
  34.     @Override
  35.     public Box2DSprite access(Object object) {
  36.         if(object instanceof Box2DSprite)
  37.             return (Box2DSprite) object;
  38.         if(object instanceof UserData)
  39.             return ((UserData) object).sprite;
  40.         return null;
  41.     }
  42.  
  43. });
  44.  
  45. Breakable.Manager manager = new Breakable.Manager();
  46. manager.setUserDataAccessor(new Accessor<Breakable, Object>() {
  47.  
  48.     @Override
  49.     public Breakable access(Object object) {
  50.         if(object instanceof Breakable)
  51.             return (Breakable) object;
  52.         if(object instanceof UserData)
  53.             return ((UserData) object).breakable;
  54.         return null;
  55.     }
  56.  
  57. });
  58.  
  59. UserData.set(body, sprite);
  60. UserData.set(body, breakable);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement