Tools are now moved to left if colliding with obstacle which is moving left

This commit is contained in:
julian 2018-07-06 16:27:14 +02:00
parent b49fa71d1f
commit 0ce9ca1c17
4 changed files with 25 additions and 8 deletions

View File

@ -2,6 +2,7 @@ package de.frajul.endlessroll.entities.collision;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.Entity;
import de.frajul.endlessroll.entities.Obstacle;
import de.frajul.endlessroll.entities.Player;
import de.frajul.endlessroll.entities.collision.collisionData.EntityCollisionData;
import de.frajul.endlessroll.entities.collision.geometry.Circle;
@ -201,7 +202,6 @@ public class CollisionDetector {
return new EntityCollisionData(null, null);
}
private Edge circleQuadCollisionEdge(Circle circle, Vector circleMovement, Quad quad, Vector quadMovement) {
boolean circleFullyInsideQuad = false;
if (circle.getPosition().getX() + circle.getRadius() <= quad.getRightEdge() && circle

View File

@ -19,7 +19,7 @@ public enum ToolType {
RAMP(R.string.tool_name_ramp, R.string.tool_description_ramp, R.drawable.tools_ramp,
R.drawable.tools_ramp_button, 0, 1, 5,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 3000, 1000)),
SPRING(R.string.tool_name_spring, R.string.tool_description_spring, R.drawable.tools_spring,
SPRING(R.string.tool_name_spring, R.string.tool_description_spring, R.drawable.tools_spring_2,
R.drawable.tools_spring_button, 5, 2, 5,
new ToolUpgrade(ToolUpgradeType.COOLDOWN, 4000, 2000)),
BOMB(R.string.tool_name_bomb, R.string.tool_description_bomb, R.drawable.tools_bomb,

View File

@ -83,7 +83,7 @@ public class GameScene extends Scene {
public Tool addTool(ToolType type, Vector position, Physics physics) throws Exception {
Tool tool = type.newInstance(position, particleSystem, gameActivity.getSoundManager());
physics.checkSingleToolCollision(tool, this);
physics.checkSingleToolCollision(tool, this, true);
if (tool == null)
throw new Exception(

View File

@ -30,6 +30,7 @@ import de.frajul.endlessroll.main.game.Timer;
public class Physics {
public final float GRAVITY_FORCE = .0000025f;
private final float MAX_TOOL_OBST_LEFT_EDGE_TOLERANCE = 0.05f;
private CollisionDetector detector;
public Physics() {
@ -53,12 +54,12 @@ public class Physics {
public synchronized void checkToolCollision(Scene scene) {
synchronized (scene.getTools()) {
for (Tool tool : scene.getTools()) {
checkSingleToolCollision(tool, scene);
checkSingleToolCollision(tool, scene, false);
}
}
}
public synchronized void checkSingleToolCollision(Tool tool, Scene scene) {
public synchronized void checkSingleToolCollision(Tool tool, Scene scene, boolean toolWasJustPlaced) {
if (tool.isFloating())
return;
@ -69,10 +70,16 @@ public class Physics {
}
Obstacle collidingObstacle = getHighestObstacleToolIsCollidingWith(tool, scene);
if (collidingObstacle != null && tool.getBottomEdge() <= collidingObstacle.getTopEdge()) {
tool.getMovement().y = 0;
tool.setToTerrain(collidingObstacle.getTopEdge());
if(collidingObstacle != null){
if(!toolWasJustPlaced && collidingObstacle.isMoving() && isToolCollidingWithMoveableObstacleOnLeftEdge(tool, collidingObstacle)){
tool.getPosition().x = collidingObstacle.getPosition().x - collidingObstacle.getWidth() / 2 - tool.getWidth() / 2;
}
else {
tool.getMovement().y = 0;
tool.setToTerrain(collidingObstacle.getTopEdge());
}
}
}
@Nullable
@ -178,4 +185,14 @@ public class Physics {
} else
return new EntityCollisionData(null, null);
}
private boolean isToolCollidingWithMoveableObstacleOnLeftEdge(Tool tool, Obstacle obstacle){
if(obstacle.getMovement().getX() < 0)
{
if(Math.abs(tool.getRightEdge() - obstacle.getLeftEdge()) <= MAX_TOOL_OBST_LEFT_EDGE_TOLERANCE)
return true;
}
return false;
}
}