You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.3 KiB

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package model;
import com.badlogic.gdx.math.Vector2;
import com.throwgame.main.ThrowMath;
import java.util.ArrayList;
/**
*
* @author Jan
*/
public class Level {
private final double G = 0.05;
private final int RADIUS = 150;
private Goal goal;
private Projectile projectile;
private ThrowMath math;
private double angle;
private int xPosPivot;
private int yPosPivot;
private double angleSpeed;
private boolean isReleased;
private int traceIndex;
public Vector2[] traces;
public Level(Goal goal, Projectile projectile, int xPosPivot, int yPosPivot){
this.goal = goal;
this.projectile = projectile;
this.projectile.setxPos(xPosPivot + RADIUS);
this.projectile.setyPos(yPosPivot);
this.math = new ThrowMath();
this.isReleased = false;
this.xPosPivot = xPosPivot;
this.yPosPivot = yPosPivot;
this.angle = 0;
this.angleSpeed = 0;
traceIndex = 0;
traces = new Vector2[50];
for(int i = 0; i < traces.length; i++){
traces[i] = new Vector2(-10, -10);
}
}
public void projectileReleased(){
this.isReleased = true;
double v0 = angleSpeed * RADIUS;
double tempAngle = angle - Math.PI / 2;
double vX = v0 * Math.sin(tempAngle);
//this.math.initThrow(/*Math.PI / 2 + angle*/tempAngle, G, v0, projectile.getyPos(), projectile.getxPos(), vX);
projectile.setvX(v0 * Math.sin(tempAngle));
projectile.setvY(v0 * Math.cos(tempAngle));
}
public void step(){
if(this.isReleased){
stepAir();
}
else{
stepPivot();
}
}
private void stepPivot(){
angleSpeed += 0.0001;
angle -= angleSpeed;
System.out.println(Math.toDegrees(angle));
Vector2 newPosVector = math.pivotGetNewPos(this.angle, this.xPosPivot, this.yPosPivot, RADIUS);
this.projectile.setxPos(xPosPivot + (int) newPosVector.x);
this.projectile.setyPos(yPosPivot + (int) newPosVector.y);
}
private void stepAir(){
/*Vector2 newPos = math.calculateY(projectile.getxPos());
projectile.setxPos(newPos.x);
projectile.setyPos(newPos.y);
*/
Vector2 lol = math.test(projectile, G);
projectile.setxPos(lol.x);
projectile.setyPos(lol.y);
changeTracePos(lol);
}
public void changeTracePos(Vector2 newPos){
if(traceIndex >= traces.length){
traceIndex = 0;
}
traces[traceIndex] = newPos;
traceIndex++;
}
public void reset(){
isReleased = false;
projectile.setxPos(xPosPivot + RADIUS);
projectile.setyPos(yPosPivot);
angle = 0;
angleSpeed = 0;
}
public Goal getGoal() {
return goal;
}
public Projectile getProjectile() {
return projectile;
}
public int getPivotX(){
return xPosPivot;
}
public int getPivotY(){
return yPosPivot;
}
public boolean released(){
return isReleased;
}
}