diff --git a/app/src/main/assets/levelpacks/Icy Mountains.xml b/app/src/main/assets/levelpacks/Icy Mountains.xml
index e481e59..019adea 100644
--- a/app/src/main/assets/levelpacks/Icy Mountains.xml
+++ b/app/src/main/assets/levelpacks/Icy Mountains.xml
@@ -43,7 +43,7 @@
-
+
@@ -272,5 +272,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java b/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java
index 7bdfb77..304870d 100644
--- a/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java
+++ b/app/src/main/java/de/frajul/endlessroll/entities/Obstacle.java
@@ -4,6 +4,7 @@ import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.levels.MoveComponent;
import de.frajul.endlessroll.levels.ObstacleData;
import de.frajul.endlessroll.levels.worlds.World;
+import de.frajul.endlessroll.main.GameLog;
import de.frajul.endlessroll.main.game.Camera;
/**
@@ -28,14 +29,13 @@ public class Obstacle extends Entity {
this.floating = data.isFloating();
this.moving = data.isMoving();
this.moveComponent = data.getMoveComponent();
+ if (!floating)
+ super.setToTerrain(terrainEdge);
if (moveComponent != null && moving) {
moveComponent.init(super.getPosition());
moveProgress = moveComponent.getStartOffset();
moveDirection = moveComponent.getDirection();
}
-
- if (!floating)
- super.setToTerrain(terrainEdge);
gridSize = calcGridSize();
}
@@ -54,10 +54,10 @@ public class Obstacle extends Entity {
}
public void moveWithMoveComponent(float frameTime, Player player) {
- if(moveComponent.isHasPlayerXSpeed()){
+ if (moveComponent.isHasPlayerXSpeed()) {
moveComponent.calcSpeedForPlayerSpeed(player);
}
- float distance = frameTime * moveComponent.getSpeed();
+ float distance = frameTime * moveComponent.getSpeed() * moveComponent.TRANSITION_VALUE;
moveProgress += moveDirection * distance / moveComponent.getLength();
if (moveProgress < 0) {
moveProgress *= -1;
diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java
index 17458e6..a5131a4 100644
--- a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java
+++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionDetector.java
@@ -7,6 +7,7 @@ import de.frajul.endlessroll.entities.collision.collisionData.EntityCollisionDat
import de.frajul.endlessroll.entities.collision.geometry.Circle;
import de.frajul.endlessroll.entities.collision.geometry.Quad;
import de.frajul.endlessroll.entities.collision.geometry.Triangle;
+import de.frajul.endlessroll.main.GameLog;
/**
* Created by Julian on 01.12.2015.
@@ -139,6 +140,7 @@ public class CollisionDetector {
if (isCircleQuadCollision(circle, quad)) {
Edge edge = circleQuadCollisionEdge(circle, player.getMovement(), quad,
entity.getMovement());
+ //Obstacles with MoveComponent do not have entity.getMovement() --> if player not moving, relativeMovement.x = 0
return new EntityCollisionData(entity, edge);
}
return new EntityCollisionData(null, null);
@@ -151,9 +153,9 @@ public class CollisionDetector {
if (relativeMovement.x > 0) {
//LEFT || BOTTOM
if (relativeMovement.y > 0) {
- float toLeftDistance = quad.getLeftEdge() - circle.getCenter().x;
+ float toLeftDistance = quad.getLeftEdge() - circle.getCenter().x - circle.getRadius();
float actualY = toLeftDistance * (relativeMovement.y / relativeMovement.x) + circle
- .getCenter().y;
+ .getCenter().y + circle.getRadius();
if (actualY < quad.getBottomEdge())
return Edge.BOTTOM;
else
@@ -161,23 +163,24 @@ public class CollisionDetector {
}
//LEFT || TOP
else if (relativeMovement.y < 0) {
- float toLeftDistance = quad.getLeftEdge() - circle.getCenter().x;
+ float toLeftDistance = quad.getLeftEdge() - circle.getCenter().x - circle.getRadius();
float actualY = toLeftDistance * (relativeMovement.y / relativeMovement.x) + circle
- .getCenter().y;
+ .getCenter().y - circle.getRadius();
if (actualY < quad.getTopEdge())
return Edge.LEFT;
else
return Edge.TOP;
- } else
+ } else {
return Edge.LEFT;
+ }
}
//RIGHT || TOP || BOTTOM
else if (relativeMovement.x < 0) {
//RIGHT || BOTTOM
if (relativeMovement.y > 0) {
- float toRightDistance = quad.getRightEdge() - circle.getCenter().x;
+ float toRightDistance = quad.getRightEdge() - circle.getCenter().x + circle.getRadius();
float actualY = toRightDistance * (relativeMovement.y / relativeMovement.x) + circle
- .getCenter().y;
+ .getCenter().y + circle.getRadius();
if (actualY < quad.getBottomEdge())
return Edge.BOTTOM;
else
@@ -185,15 +188,16 @@ public class CollisionDetector {
}
//RIGHT || TOP
else if (relativeMovement.y < 0) {
- float toRightDistance = quad.getRightEdge() - circle.getCenter().x;
+ float toRightDistance = quad.getRightEdge() - circle.getCenter().x + circle.getRadius();
float actualY = toRightDistance * (relativeMovement.y / relativeMovement.x) + circle
- .getCenter().y;
+ .getCenter().y - circle.getRadius();
if (actualY < quad.getTopEdge())
return Edge.RIGHT;
else
return Edge.TOP;
- } else
+ } else {
return Edge.RIGHT;
+ }
} else {
if (relativeMovement.y > 0)
return Edge.BOTTOM;
diff --git a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java
index 25839a7..5c89bc6 100644
--- a/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java
+++ b/app/src/main/java/de/frajul/endlessroll/entities/collision/CollisionManager.java
@@ -10,6 +10,7 @@ import de.frajul.endlessroll.entities.collision.collisionData.ObstacleCollisionD
import de.frajul.endlessroll.entities.collision.collisionData.PlayerCollisionData;
import de.frajul.endlessroll.entities.collision.collisionData.ToolCollisionData;
import de.frajul.endlessroll.entities.tools.Tool;
+import de.frajul.endlessroll.main.GameLog;
import de.frajul.endlessroll.main.game.Game;
import de.frajul.endlessroll.main.game.GameScene;
import de.frajul.endlessroll.main.game.Timer;
@@ -50,13 +51,13 @@ public class CollisionManager {
}
private void checkTerrainCollision(EntityCollisionData data) {
- checkEntityCollision(data, -0.01f);
+ checkEntityCollision(data);
if (data.getEdge() != Edge.TOP)
game.onGameOver(true);
}
private void checkCeilingCollision(EntityCollisionData data) {
- checkEntityCollision(data, -0.01f);
+ checkEntityCollision(data);
if (data.getEdge() == Edge.RIGHT || data.getEdge() == Edge.LEFT)
game.onGameOver(true);
}
@@ -75,12 +76,12 @@ public class CollisionManager {
.isDeadly())
game.onGameOver(true);
else
- checkEntityCollision(entityData, 0);
+ checkEntityCollision(entityData);
}
}
}
- private void checkEntityCollision(EntityCollisionData data, float xBounceFactor) {
+ private void checkEntityCollision(EntityCollisionData data) {
switch (data.getEdge()) {
case TOP:
player.getMovement().y = 0;
@@ -91,11 +92,9 @@ public class CollisionManager {
player.setTopEdge(data.getEntity().getBottomEdge());
break;
case LEFT:
- player.getMovement().x *= xBounceFactor;
player.getPosition().x = data.getEntity().getLeftEdge() - player.RADIUS;
break;
case RIGHT:
- player.getMovement().x *= xBounceFactor;
player.getPosition().x = data.getEntity().getRightEdge() + player.RADIUS;
break;
}
diff --git a/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java b/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java
index 7a45e3f..e4cfda0 100644
--- a/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java
+++ b/app/src/main/java/de/frajul/endlessroll/levels/MoveComponent.java
@@ -20,7 +20,7 @@ public class MoveComponent {
@Attribute
private boolean hasPlayerXSpeed;
- private final float TRANSITION_VALUE = 0.001f;
+ public final float TRANSITION_VALUE = 0.001f;
private Vector position;
private float triangleWidth;
private float triangleHeight;
@@ -37,8 +37,6 @@ public class MoveComponent {
x -= startOffset * triangleWidth;
y -= startOffset * triangleHeight;
this.position = new Vector(x, y);
-
- speed *= TRANSITION_VALUE;
}
public float getLength() {
@@ -70,6 +68,7 @@ public class MoveComponent {
double invertRotationRadians = Math.toRadians(90 - getRotation());
float ySpeed = (float) (xSpeed * Math.sin(invertRotationRadians));
speed = (float) Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed);
+ speed /= TRANSITION_VALUE;
}
public float getLeftmostPosition() {