= 66b3b1d55e Fixed Obstacle-Move-Component bug, when offsets were set
Countdown now played as three seperate sounds, though not perfect yet (neither timing, nor high pitches)
Added lv 12
2018-04-30 19:04:01 +02:00

88 lines
2.2 KiB
Java

package de.frajul.endlessroll.levels;
import org.simpleframework.xml.Attribute;
import de.frajul.endlessroll.data.Vector;
public class MoveComponent {
@Attribute
private float length;
@Attribute
private float rotation;
@Attribute
private float startOffset;
@Attribute
private float direction;
@Attribute
private float speed;
@Attribute
private boolean hasPlayerXSpeed;
@Attribute
private float triggerDistance;
public final float TRANSITION_VALUE = 0.001f;
private Vector position;
private float triangleWidth;
private float triangleHeight;
public void init(Vector obstaclePosition) {
double rotationRadians = Math.toRadians(getRotation());
double invertRotationRadians = Math.toRadians(90 - getRotation());
this.triangleWidth = (float) (length * Math.sin(rotationRadians));
this.triangleHeight = (float) (length * Math.sin(invertRotationRadians));
float x = obstaclePosition.getX();
float y = obstaclePosition.getY();
x -= startOffset * triangleWidth;
y -= startOffset * triangleHeight;
this.position = new Vector(x, y);
}
public float getLength() {
return length;
}
public float getRotation() {
return rotation;
}
public float getStartOffset() {
return startOffset;
}
public float getDirection() {
return direction;
}
public float getSpeed() {
return speed;
}
public boolean isHasPlayerXSpeed() {
return hasPlayerXSpeed;
}
public float getTriggerDistance() {
return triggerDistance;
}
public void calcSpeedForPlayerSpeed(float playerSpeed) {
float xSpeed = playerSpeed;
speed = xSpeed / new Vector(triangleWidth, triangleHeight).normalize().getX();
speed /= TRANSITION_VALUE;
}
public Vector getMovementVector(float moveDirection) {
return new Vector(triangleWidth, triangleHeight).normalize()
.mul(moveDirection * getSpeed() * TRANSITION_VALUE);
}
public Vector getPositionForProgress(float progress) {
return new Vector(position.x + triangleWidth * progress,
position.y + triangleHeight * progress);
}
}