Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.dermetfan.utils.libgdx.box2d;
- import com.badlogic.gdx.physics.box2d.Body;
- import com.badlogic.gdx.utils.SnapshotArray;
- /** holds {@link Rope ropes} with the same segment bodies
- * @author dermetfan */
- public class Ropes extends Rope {
- private final SnapshotArray<Rope> ropes = new SnapshotArray<Rope>(2);
- public Ropes(Rope main) {
- super(main);
- }
- public Ropes(Rope... ropes) {
- this(ropes[0]);
- for(int i = 1; i < ropes.length; i++)
- addRope(ropes[i]);
- }
- public Rope createRope() {
- return createRope(getBuilder());
- }
- public Rope createRope(Builder builder) {
- return new Rope(builder, getSegments());
- }
- /** syncs this Rope's segments with the ones of the {@link #ropes} */
- public void sync() {
- Body[] segments = getSegments();
- for(Rope rope : ropes) {
- Body[] ropeSegments = rope.getSegments();
- if(ropeSegments.length < segments.length)
- for(int i = ropeSegments.length - 1; i < segments.length; i++)
- rope.add(segments[i]);
- else if(ropeSegments.length > segments.length)
- for(int i = segments.length - 1; i < ropeSegments.length; i++)
- rope.remove(i);
- }
- }
- public void addRope(Rope rope) {
- if(ropes.contains(rope, true))
- return;
- Body[] segments = getSegments(), ropeSegments = rope.getSegments();
- for(int i = 0; i < segments.length; i++)
- if(ropeSegments[i] != ropeSegments[i])
- throw new IllegalArgumentException("the given " + Rope.class.getSimpleName() + " does not hold the same segments as this " + Ropes.class.getSimpleName());
- ropes.add(rope);
- }
- public void addRopes(Rope... ropes) {
- for(Rope rope : ropes)
- addRope(rope);
- }
- public boolean removeRope(Rope rope) {
- return ropes.removeValue(rope, true);
- }
- public Rope removeRope(int index) {
- return ropes.removeIndex(index);
- }
- public Rope getRope(int index) {
- return ropes.get(index);
- }
- @Override
- public Rope build(int length, Builder builder) {
- Rope rope = super.build(length, builder);
- sync();
- return rope;
- }
- @Override
- public Body extend() {
- Body segment = super.extend();
- for(Rope rope : ropes)
- rope.add(segment);
- return segment;
- }
- @Override
- public void add(Body segment) {
- super.add(segment);
- for(Rope rope : ropes)
- rope.add(segment);
- }
- @Override
- public Body insert(int index) {
- Body segment = super.insert(index);
- for(Rope rope : ropes)
- rope.insert(index, segment);
- return segment;
- }
- @Override
- public void insert(int index, Body segment) {
- super.insert(index, segment);
- for(Rope rope : ropes)
- rope.insert(index, segment);
- }
- @Override
- public Body replace(int index, Body segment) {
- for(Rope rope : ropes)
- rope.replace(index, segment);
- return super.replace(index, segment);
- }
- @Override
- public Body remove(int index) {
- for(Rope rope : ropes)
- rope.remove(index);
- return super.remove(index);
- }
- @Override
- public void destroy(int index) {
- for(Rope rope : ropes)
- rope.remove(index);
- super.destroy(index);
- }
- @Override
- public Rope split(int jointIndex) {
- Ropes split = new Ropes(super.split(jointIndex));
- for(Rope rope : ropes)
- split.addRope(rope.split(jointIndex));
- return split;
- }
- public Rope[] getRopes() {
- ropes.end();
- return ropes.begin();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement