From 2f1d51460e67fea9ab21e296018471582ac26a4f Mon Sep 17 00:00:00 2001 From: Simone Arpe Date: Thu, 14 Jul 2016 17:54:26 +0200 Subject: [PATCH 1/4] Edge class with better equals and hashcode implementation --- .../editor/renderer/utils/PolygonUtils.java | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/src/com/uwsoft/editor/renderer/utils/PolygonUtils.java b/src/com/uwsoft/editor/renderer/utils/PolygonUtils.java index f181bc05..54f27717 100644 --- a/src/com/uwsoft/editor/renderer/utils/PolygonUtils.java +++ b/src/com/uwsoft/editor/renderer/utils/PolygonUtils.java @@ -177,6 +177,9 @@ public Edge(float startX, float startY, float endX, float endY) { } public Edge(Vector2 start, Vector2 end) { + if (start == null || end == null) { + throw new AssertionError("start and end must not be null"); + } this.start = start; this.end = end; } @@ -198,18 +201,42 @@ public void reverse() { } @Override - public boolean equals(Object obj) { - if (this == obj) return true; - if (obj == null) return false; - if (getClass() != obj.getClass()) return false; - Edge other = (Edge)obj; - if(hashCode() == other.hashCode()) return true; - return false; + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + Edge edge = (Edge) o; + + boolean result1; + boolean result2; + + if (!start.equals(edge.start)) {result1 = false;} + else { + result1 = end.equals(edge.end); + } + + if (!start.equals(edge.end)) {result2 = false;} + else { + result2 = end.equals(edge.start); + } + + return result1 || result2; + + } + + @Override + public int hashCode() { + int result = start.hashCode(); + result = result + end.hashCode(); + return result; } @Override - public int hashCode () { - return start.hashCode() + end.hashCode(); + public String toString() { + return "Edge{" + + "start=" + start + + ", end=" + end + + '}'; } } From 9108544f104feb710fd8f3becf7d34931d919dca Mon Sep 17 00:00:00 2001 From: Simone Arpe Date: Fri, 15 Jul 2016 16:31:43 +0200 Subject: [PATCH 2/4] set default friction and restitution to 0 --- .../renderer/components/physics/PhysicsBodyComponent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/uwsoft/editor/renderer/components/physics/PhysicsBodyComponent.java b/src/com/uwsoft/editor/renderer/components/physics/PhysicsBodyComponent.java index f3a3a1a5..b44d3407 100644 --- a/src/com/uwsoft/editor/renderer/components/physics/PhysicsBodyComponent.java +++ b/src/com/uwsoft/editor/renderer/components/physics/PhysicsBodyComponent.java @@ -42,8 +42,8 @@ public PhysicsBodyComponent() { awake = true; bullet = false; density = 1; - friction = 1; - restitution = 1; + friction = 0; + restitution = 0; filter = new Filter(); } } From aa13a9eb6974736d3fe82e01815729d7f1567f95 Mon Sep 17 00:00:00 2001 From: Simone Arpe Date: Mon, 18 Jul 2016 17:34:39 +0200 Subject: [PATCH 3/4] fixed bug: composite light does not follow the composite item --- src/com/uwsoft/editor/renderer/systems/LightSystem.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/com/uwsoft/editor/renderer/systems/LightSystem.java b/src/com/uwsoft/editor/renderer/systems/LightSystem.java index cecde1fb..e7dee72f 100644 --- a/src/com/uwsoft/editor/renderer/systems/LightSystem.java +++ b/src/com/uwsoft/editor/renderer/systems/LightSystem.java @@ -42,10 +42,12 @@ protected void processEntity(Entity entity, float deltaTime) { float relativeRotation = 0; Entity parentEntity = parentNodeComponent.parentEntity; - TransformComponent parentTransformComponent = transformComponentMapper.get(parentEntity); + TransformComponent parentTransformComponent; + while (parentEntity != null) { - relativeX+=parentTransformComponent.x; - relativeY+=parentTransformComponent.y; + parentTransformComponent = transformComponentMapper.get(parentEntity); + relativeX+=parentTransformComponent.x; + relativeY+=parentTransformComponent.y; relativeRotation+=parentTransformComponent.rotation; parentNodeComponent = parentNodeComponentMapper.get(parentEntity); if(parentNodeComponent == null){ From 86457502a16c28453a43dcffc0690dfd9b71a158 Mon Sep 17 00:00:00 2001 From: Simone Arpe Date: Sun, 31 Jul 2016 19:02:56 +0200 Subject: [PATCH 4/4] fixed physics rotations (again) --- .../editor/renderer/physics/PhysicsBodyLoader.java | 7 ++----- .../uwsoft/editor/renderer/systems/PhysicsSystem.java | 11 +++-------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/com/uwsoft/editor/renderer/physics/PhysicsBodyLoader.java b/src/com/uwsoft/editor/renderer/physics/PhysicsBodyLoader.java index 45c02fcb..8f4d7c59 100644 --- a/src/com/uwsoft/editor/renderer/physics/PhysicsBodyLoader.java +++ b/src/com/uwsoft/editor/renderer/physics/PhysicsBodyLoader.java @@ -1,12 +1,10 @@ package com.uwsoft.editor.renderer.physics; -import com.badlogic.ashley.core.Entity; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.physics.box2d.*; import com.uwsoft.editor.renderer.components.TransformComponent; import com.uwsoft.editor.renderer.components.physics.PhysicsBodyComponent; -import com.uwsoft.editor.renderer.utils.TransformMathUtils; /** * Created by azakhary on 9/28/2014. @@ -39,7 +37,7 @@ public static float getScale() { return getInstance().scale; } - public Body createBody(World world, Entity entity, PhysicsBodyComponent physicsComponent, Vector2[][] minPolygonData, TransformComponent transformComponent) { + public Body createBody(World world, PhysicsBodyComponent physicsComponent, Vector2[][] minPolygonData, TransformComponent transformComponent) { FixtureDef fixtureDef = new FixtureDef(); @@ -56,8 +54,7 @@ public Body createBody(World world, Entity entity, PhysicsBodyComponent physicsC } BodyDef bodyDef = new BodyDef(); - Vector2 sceneCoords = TransformMathUtils.localToSceneCoordinates(entity, new Vector2(0, 0)); - bodyDef.position.set((sceneCoords.x + transformComponent.originX) * PhysicsBodyLoader.getScale() , (sceneCoords.y + transformComponent.originY)* PhysicsBodyLoader.getScale() ); + bodyDef.position.set((transformComponent.x + transformComponent.originX) * PhysicsBodyLoader.getScale(), (transformComponent.y + transformComponent.originY) * PhysicsBodyLoader.getScale()); bodyDef.angle = transformComponent.rotation * MathUtils.degreesToRadians; bodyDef.awake = physicsComponent.awake; diff --git a/src/com/uwsoft/editor/renderer/systems/PhysicsSystem.java b/src/com/uwsoft/editor/renderer/systems/PhysicsSystem.java index 22080266..3a152fdb 100644 --- a/src/com/uwsoft/editor/renderer/systems/PhysicsSystem.java +++ b/src/com/uwsoft/editor/renderer/systems/PhysicsSystem.java @@ -15,7 +15,6 @@ import com.uwsoft.editor.renderer.components.physics.PhysicsBodyComponent; import com.uwsoft.editor.renderer.physics.PhysicsBodyLoader; import com.uwsoft.editor.renderer.utils.ComponentRetriever; -import com.uwsoft.editor.renderer.utils.TransformMathUtils; public class PhysicsSystem extends IteratingSystem { @@ -50,12 +49,8 @@ protected void processEntity(Entity entity, float deltaTime) { PhysicsBodyComponent physicsBodyComponent = ComponentRetriever.get(entity, PhysicsBodyComponent.class); Body body = physicsBodyComponent.body; - transformComponent.x = 0; - transformComponent.y = 0; - transformComponent.rotation = 0; - Vector2 localCoords = TransformMathUtils.sceneToLocalCoordinates(entity, body.getPosition().cpy().scl(1 / PhysicsBodyLoader.getScale())); - transformComponent.x = localCoords.x - transformComponent.originX; - transformComponent.y = localCoords.y - transformComponent.originY; + transformComponent.x = body.getPosition().x / PhysicsBodyLoader.getScale() - transformComponent.originX; + transformComponent.y = body.getPosition().y / PhysicsBodyLoader.getScale() - transformComponent.originY; transformComponent.rotation = body.getAngle() * MathUtils.radiansToDegrees; } @@ -78,7 +73,7 @@ protected void processBody(Entity entity) { physicsBodyComponent.centerY = dimensionsComponent.height/2; PhysicsBodyComponent bodyPropertiesComponent = ComponentRetriever.get(entity, PhysicsBodyComponent.class); - physicsBodyComponent.body = PhysicsBodyLoader.getInstance().createBody(world, entity, bodyPropertiesComponent, polygonComponent.vertices, transformComponent); + physicsBodyComponent.body = PhysicsBodyLoader.getInstance().createBody(world, bodyPropertiesComponent, polygonComponent.vertices, transformComponent); physicsBodyComponent.body.setUserData(entity); }