added Box2DCloneTest, upgraded to libGDX 1.6.4, upgraded gradle wrapper to 2.4
M android/build.gradle +2 -2
@@ 1,6 1,6 @@ 
 android {
-    buildToolsVersion "19.0.3"
-    compileSdkVersion 19
+    buildToolsVersion "22.0.1"
+    compileSdkVersion 22
     sourceSets {
         main {
             manifest.srcFile 'AndroidManifest.xml'

          
M build.gradle +11 -10
@@ 6,8 6,8 @@ buildscript {
 	}
 	dependencies {
 		classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6'
-		classpath 'com.android.tools.build:gradle:1.0.0'
-		classpath 'org.robovm:robovm-gradle-plugin:1.0.0'
+		classpath 'com.android.tools.build:gradle:1.2.3'
+		classpath 'org.robovm:robovm-gradle-plugin:1.5.0'
 	}
 }
 

          
@@ 18,9 18,9 @@ allprojects {
 	version = '1.0'
 	ext {
 		appName = 'SomeLibgdxTests'
-		gdxVersion = '1.5.6'
-		gdxUtilsVersion = '0.11.1-SNAPSHOT'
-		roboVMVersion = '1.0.0'
+		gdxVersion = '1.6.4'
+		gdxUtilsVersion = '0.13.1-SNAPSHOT'
+		roboVMVersion = '1.5.0'
 		box2DLightsVersion = '1.3'
 		ashleyVersion = '1.3.1'
 		aiVersion = '1.5.0'

          
@@ 32,6 32,8 @@ allprojects {
 		maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
 		maven { url "https://oss.sonatype.org/content/repositories/releases/" }
 	}
+
+	configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' }
 }
 
 project(":core") {

          
@@ 44,6 46,7 @@ project(":core") {
 		compile "net.dermetfan.libgdx-utils:libgdx-utils-box2d:$gdxUtilsVersion"
 		compile "com.esotericsoftware:kryonet:$kryoNetVersion"
 		compile "com.badlogicgames.box2dlights:box2dlights:$box2DLightsVersion"
+		compile 'com.github.trixt0r:Spriter:1.1'
 		compile fileTree(dir: 'libs', include: '*.jar')
 	}
 }

          
@@ 87,16 90,14 @@ project(":ios") {
 	apply plugin: "java"
 	apply plugin: "robovm"
 
-	configurations { natives }
-
 	dependencies {
 		compile project(":core")
 		compile "org.robovm:robovm-rt:${roboVMVersion}"
 		compile "org.robovm:robovm-cocoatouch:${roboVMVersion}"
 		compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
-		natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
-		natives "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-ios"
-		natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
+		compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
+		compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-ios"
+		compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-ios"
 	}
 }
 

          
M core/src/net/dermetfan/someLibgdxTests/other/EllipticalGroup.java +1 -1
@@ 79,7 79,7 @@ public class EllipticalGroup extends Wid
 		}
 
 		private float angle(float x, float y) {
-			float ang = vec2_0.set(x, y).sub(getWidth() / 2, getHeight() / 2).angle() - normalize(angle, 0, 360);
+			float ang = vec2_0.set(x, y).sub(getWidth() / 2, getHeight() / 2).angle() - normalize(angle, 0, 360, false, false);
 			System.out.println("diff: " + ang);
 			return ang;
 		}

          
A => core/src/net/dermetfan/someLibgdxTests/screens/Box2DCloneTest.java +84 -0
@@ 0,0 1,84 @@ 
+package net.dermetfan.someLibgdxTests.screens;
+
+import com.badlogic.gdx.physics.box2d.Body;
+import com.badlogic.gdx.physics.box2d.BodyDef;
+import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
+import com.badlogic.gdx.physics.box2d.ChainShape;
+import com.badlogic.gdx.physics.box2d.CircleShape;
+import com.badlogic.gdx.physics.box2d.EdgeShape;
+import com.badlogic.gdx.physics.box2d.PolygonShape;
+import net.dermetfan.gdx.math.GeometryUtils;
+import net.dermetfan.gdx.physics.box2d.Box2DUtils;
+
+public class Box2DCloneTest extends Box2DScreen {
+
+	private Body[] bodies;
+
+	private static final float STEP = 1;
+	private float countdown = STEP;
+
+	public Box2DCloneTest() {
+		bodies = new Body[4];
+		BodyDef bodyDef = new BodyDef();
+		bodyDef.type = BodyType.DynamicBody;
+		bodyDef.position.x = -bodies.length;
+		int i = 0;
+
+		{ // polygon
+			PolygonShape shape = new PolygonShape();
+			float[] vertices = new float[] {-1, -2, 1, -2, 2, -1, 2, 1, 1, 2, -1, 2, -2, 1, -2, -1};
+			GeometryUtils.scale(vertices, -.5f, -.5f, .5f, .5f);
+			shape.set(vertices);
+			bodies[i] = world.createBody(bodyDef);
+			bodies[i].createFixture(shape, 1);
+			shape.dispose();
+		}
+
+		i++;
+		bodyDef.position.x += 2;
+		{ // circle
+			CircleShape shape = new CircleShape();
+			shape.setRadius(.5f);
+			bodies[i] = world.createBody(bodyDef);
+			bodies[i].createFixture(shape, 1);
+			shape.dispose();
+		}
+
+		i++;
+		bodyDef.position.x += 2;
+		{ // chain
+			ChainShape shape = new ChainShape();
+			shape.createChain(new float[] {-.5f, .5f, 0, -.5f, .5f, .5f});
+			bodies[i] = world.createBody(bodyDef);
+			bodies[i].createFixture(shape, 1);
+			shape.dispose();
+		}
+
+		i++;
+		bodyDef.position.x += 2;
+		{ // edge
+			EdgeShape shape = new EdgeShape();
+			shape.set(-.5f, 0, .5f, 0);
+			bodies[i] = world.createBody(bodyDef);
+			bodies[i].createFixture(shape, 1);
+			shape.dispose();
+		}
+	}
+
+	@Override
+	public void render(float delta) {
+		super.render(delta);
+		countdown -= delta;
+		if(countdown <= 0) {
+			countdown = STEP;
+			for(int i = 0; i < bodies.length; i++) {
+				Body clone = Box2DUtils.clone(bodies[i], true);
+				clone.setTransform(clone.getPosition().x, 0, 0);
+				clone.setLinearVelocity(0, 0);
+				world.destroyBody(bodies[i]);
+				bodies[i] = clone;
+			}
+		}
+	}
+
+}

          
M core/src/net/dermetfan/someLibgdxTests/screens/Box2DPolygonSpriteTest.java +3 -4
@@ 8,7 8,6 @@ import com.badlogic.gdx.graphics.g2d.Tex
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
 import com.badlogic.gdx.math.EarClippingTriangulator;
-import com.badlogic.gdx.math.Polygon;
 import com.badlogic.gdx.physics.box2d.Body;
 import com.badlogic.gdx.physics.box2d.BodyDef;
 import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;

          
@@ 56,10 55,10 @@ public class Box2DPolygonSpriteTest exte
 		System.arraycopy(vertices.toArray(), 0, shapeVertices, 0, shapeVertices.length);
 		MathUtils.scale(shapeVertices, 0, 10);
 
-		Polygon[] gons = GeometryUtils.decompose(new Polygon(shapeVertices));
+		float[][] gons = GeometryUtils.decompose(shapeVertices);
 		PolygonShape shape = new PolygonShape();
-		for(Polygon gon : gons) {
-			shape.set(gon.getVertices());
+		for(float[] verts : gons) {
+			shape.set(verts);
 			rock.createFixture(shape, 1);
 		}
 		shape.dispose();

          
M core/src/net/dermetfan/someLibgdxTests/screens/CircularGroupTest.java +1 -1
@@ 104,7 104,7 @@ public class CircularGroupTest extends S
 	@Override
 	public void render(float delta) {
 		t += delta;
-		outer.setWidth(MathUtils.normalize(t, 0, 2.5f) / 2.5f * outer.getPrefWidth());
+		outer.setWidth(MathUtils.normalize(t, 0, 2.5f, false, false) / 2.5f * outer.getPrefWidth());
 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
 		stage.act(delta);
 		stage.draw();

          
M core/src/net/dermetfan/someLibgdxTests/screens/Menu.java +1 -0
@@ 156,6 156,7 @@ public class Menu extends ScreenAdapter 
 		names.add("MinimumTranslationVectorTest");
 		names.add("SutherlandHodgmanTest");
 		names.add("Box2DAsTest");
+		names.add("Box2DCloneTest");
 		names.sort();
 
 		final List<String> tests = new List<>(skin);

          
M core/src/net/dermetfan/someLibgdxTests/screens/RepeatingBackgroundTest.java +0 -1
@@ 10,7 10,6 @@ import com.badlogic.gdx.graphics.g2d.Spr
 import com.badlogic.gdx.utils.viewport.ScreenViewport;
 import com.badlogic.gdx.utils.viewport.Viewport;
 import net.dermetfan.someLibgdxTests.Assets;
-import net.dermetfan.someLibgdxTests.SomeLibgdxTests;
 
 public class RepeatingBackgroundTest extends ScreenAdapter {
 

          
M gradle/wrapper/gradle-wrapper.jar +0 -0

        
M gradle/wrapper/gradle-wrapper.properties +2 -2
@@ 1,6 1,6 @@ 
-#Sat Sep 21 13:08:26 CEST 2013
+#Wed Aug 05 06:36:09 CEST 2015
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-bin.zip

          
M ios/build.gradle +0 -47
@@ 7,58 7,11 @@ ext {
 	mainClassName = "net.dermetfan.someLibgdxTests.IOSLauncher"
 }
 
-// Extracts native libs (*.a) from the native-ios.jar and places them
-// under build/libs/ios/.
-task copyNatives << {
-  file("build/libs/ios/").mkdirs();
-  configurations.natives.files.each { jar ->
-    def outputDir = null
-    if (jar.name.endsWith("natives-ios.jar")) outputDir = file("build/libs/ios")
-    if (outputDir != null) {
-      copy {
-        from zipTree(jar)
-        into outputDir
-        include "*.a"
-      }
-    }
-  }
-}
-
-// Updates a robovm.xml file.
-task updateRoboVMXML << {
-  def xml = file('robovm.xml')
-
-  if (!xml.exists()) {
-    return
-  }
-  
-  // Find all native (*.a) libraries beneath libs
-  def libtree = fileTree(dir: 'build/libs', include: '**/*.a')
-  
-  def config = new groovy.util.XmlParser().parse(xml)
-  config.libs.each {libs ->
-      libs.children().clear()
-      libtree.each { File file ->
-          libs.appendNode('lib', 'build/libs/ios/' + file.getName())
-      }
-  }
-  
-  def writer = new FileWriter(xml)
-  def printer = new XmlNodePrinter(new PrintWriter(writer))
-  printer.setPreserveWhitespace true
-  printer.print(config)
-}
-
-updateRoboVMXML.dependsOn copyNatives
-build.dependsOn updateRoboVMXML
-tasks.eclipse.dependsOn updateRoboVMXML
-
 launchIPhoneSimulator.dependsOn build
 launchIPadSimulator.dependsOn build
 launchIOSDevice.dependsOn build
 createIPA.dependsOn build
 
-
 eclipse.project {
     name = appName + "-ios"
     natures 'org.robovm.eclipse.RoboVMNature'