Advertisement
dermetfan

Ropes try

Dec 12th, 2013
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.28 KB | None | 0 0
  1. package net.dermetfan.utils.libgdx.box2d;
  2.  
  3. import com.badlogic.gdx.physics.box2d.Body;
  4. import com.badlogic.gdx.utils.SnapshotArray;
  5.  
  6. /** holds {@link Rope ropes} with the same segment bodies
  7.  *  @author dermetfan */
  8. public class Ropes extends Rope {
  9.  
  10.     private final SnapshotArray<Rope> ropes = new SnapshotArray<Rope>(2);
  11.  
  12.     public Ropes(Rope main) {
  13.         super(main);
  14.     }
  15.  
  16.     public Ropes(Rope... ropes) {
  17.         this(ropes[0]);
  18.         for(int i = 1; i < ropes.length; i++)
  19.             addRope(ropes[i]);
  20.     }
  21.  
  22.     public Rope createRope() {
  23.         return createRope(getBuilder());
  24.     }
  25.  
  26.     public Rope createRope(Builder builder) {
  27.         return new Rope(builder, getSegments());
  28.     }
  29.  
  30.     /** syncs this Rope's segments with the ones of the {@link #ropes} */
  31.     public void sync() {
  32.         Body[] segments = getSegments();
  33.         for(Rope rope : ropes) {
  34.             Body[] ropeSegments = rope.getSegments();
  35.             if(ropeSegments.length < segments.length)
  36.                 for(int i = ropeSegments.length - 1; i < segments.length; i++)
  37.                     rope.add(segments[i]);
  38.             else if(ropeSegments.length > segments.length)
  39.                 for(int i = segments.length - 1; i < ropeSegments.length; i++)
  40.                     rope.remove(i);
  41.         }
  42.     }
  43.  
  44.     public void addRope(Rope rope) {
  45.         if(ropes.contains(rope, true))
  46.             return;
  47.         Body[] segments = getSegments(), ropeSegments = rope.getSegments();
  48.         for(int i = 0; i < segments.length; i++)
  49.             if(ropeSegments[i] != ropeSegments[i])
  50.                 throw new IllegalArgumentException("the given " + Rope.class.getSimpleName() + " does not hold the same segments as this " + Ropes.class.getSimpleName());
  51.         ropes.add(rope);
  52.     }
  53.  
  54.     public void addRopes(Rope... ropes) {
  55.         for(Rope rope : ropes)
  56.             addRope(rope);
  57.     }
  58.  
  59.     public boolean removeRope(Rope rope) {
  60.         return ropes.removeValue(rope, true);
  61.     }
  62.  
  63.     public Rope removeRope(int index) {
  64.         return ropes.removeIndex(index);
  65.     }
  66.  
  67.     public Rope getRope(int index) {
  68.         return ropes.get(index);
  69.     }
  70.  
  71.     @Override
  72.     public Rope build(int length, Builder builder) {
  73.         Rope rope = super.build(length, builder);
  74.         sync();
  75.         return rope;
  76.     }
  77.  
  78.     @Override
  79.     public Body extend() {
  80.         Body segment = super.extend();
  81.         for(Rope rope : ropes)
  82.             rope.add(segment);
  83.         return segment;
  84.     }
  85.  
  86.     @Override
  87.     public void add(Body segment) {
  88.         super.add(segment);
  89.         for(Rope rope : ropes)
  90.             rope.add(segment);
  91.     }
  92.  
  93.     @Override
  94.     public Body insert(int index) {
  95.         Body segment = super.insert(index);
  96.         for(Rope rope : ropes)
  97.             rope.insert(index, segment);
  98.         return segment;
  99.     }
  100.  
  101.     @Override
  102.     public void insert(int index, Body segment) {
  103.         super.insert(index, segment);
  104.         for(Rope rope : ropes)
  105.             rope.insert(index, segment);
  106.     }
  107.  
  108.     @Override
  109.     public Body replace(int index, Body segment) {
  110.         for(Rope rope : ropes)
  111.             rope.replace(index, segment);
  112.         return super.replace(index, segment);
  113.     }
  114.  
  115.     @Override
  116.     public Body remove(int index) {
  117.         for(Rope rope : ropes)
  118.             rope.remove(index);
  119.         return super.remove(index);
  120.     }
  121.  
  122.     @Override
  123.     public void destroy(int index) {
  124.         for(Rope rope : ropes)
  125.             rope.remove(index);
  126.         super.destroy(index);
  127.     }
  128.  
  129.     @Override
  130.     public Rope split(int jointIndex) {
  131.         Ropes split = new Ropes(super.split(jointIndex));
  132.         for(Rope rope : ropes)
  133.             split.addRope(rope.split(jointIndex));
  134.         return split;
  135.     }
  136.  
  137.     public Rope[] getRopes() {
  138.         ropes.end();
  139.         return ropes.begin();
  140.     }
  141.  
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement