117 lines
2.7 KiB
Java
117 lines
2.7 KiB
Java
package globalgamejam.game;
|
|
|
|
import globalgamejam.Main;
|
|
import globalgamejam.math.Vector2f;
|
|
import globalgamejam.physics.PhysicalEntity;
|
|
import globalgamejam.render.Texture;
|
|
import globalgamejam.tiles.PlayerTile;
|
|
import globalgamejam.tiles.Tile;
|
|
|
|
/**
|
|
*
|
|
* @author Jean-Baptiste
|
|
*
|
|
*/
|
|
public class Player extends PhysicalEntity {
|
|
|
|
private final Tile tile;
|
|
private float angle;
|
|
|
|
private float speed = 15;
|
|
|
|
private final PhysicalEntity brosse;
|
|
private final float longueurBalai;
|
|
|
|
public Player(String path, float x, float y){
|
|
super(x, y, 100, 0, 3, 0, 0, 10);
|
|
this.tile = new PlayerTile(path, x, y);
|
|
|
|
this.setSizeXY(this.tile.getTexture().width, this.tile.getTexture().width);
|
|
|
|
this.longueurBalai = 82;
|
|
|
|
this.brosse = new PhysicalEntity(x, y + this.longueurBalai, 18f, 12f, 15, 0, 0, 0){
|
|
@Override
|
|
public float getSpeed(){
|
|
return getSpeedFactor();
|
|
}
|
|
};
|
|
}
|
|
|
|
public Tile getTile(){
|
|
return this.tile;
|
|
}
|
|
|
|
public void move(float x, float y){
|
|
float oldX = this.x;
|
|
float deltaX = 0;
|
|
float oldY = this.y;
|
|
float deltaY = 0;
|
|
this.addPosition(x, y);
|
|
|
|
if(this.x - this.tile.getTexture().width / 2 < 30){
|
|
this.x = this.tile.getTexture().width / 2 + 30;
|
|
}
|
|
else if(this.x + this.tile.getTexture().width / 2 > Main.WIDTH - 30){
|
|
this.x = Main.WIDTH - this.tile.getTexture().width / 2 - 30;
|
|
}
|
|
|
|
if(this.y - this.tile.getTexture().height / 2 < 34){
|
|
this.y = this.tile.getTexture().height / 2 + 34;
|
|
}
|
|
else if(this.y + this.tile.getTexture().height / 2 > Main.HEIGHT + 18){
|
|
this.y = Main.HEIGHT - this.tile.getTexture().height / 2 + 18;
|
|
}
|
|
|
|
this.tile.setPosition(new Vector2f(this.x, this.y));
|
|
this.tile.applyTransform();
|
|
|
|
deltaX = this.x - oldX;
|
|
deltaY = this.y - oldY;
|
|
this.brosse.addPosition(deltaX, deltaY);
|
|
}
|
|
|
|
public void rotate(float angleRotation){
|
|
this.angle += angleRotation;
|
|
this.angle %= 360;
|
|
if(this.angle < 0){
|
|
this.angle += 360;
|
|
}
|
|
|
|
this.tile.setRotation(this.angle);
|
|
this.tile.applyTransform();
|
|
|
|
float angleRad = (float)(this.angle * (Math.PI / 180));
|
|
|
|
float xBrosse = this.x + this.longueurBalai * -(float)Math.sin(angleRad);
|
|
float yBrosse = this.y + this.longueurBalai * (float)Math.cos(angleRad);
|
|
|
|
this.brosse.setPosition(xBrosse, yBrosse);
|
|
}
|
|
|
|
public boolean brosseCollideWith(PhysicalEntity entity){
|
|
return this.brosse.collideWithSquareHitBox(entity);
|
|
}
|
|
|
|
/**
|
|
* @return the velocity
|
|
*/
|
|
public float getSpeed() {
|
|
return this.speed;
|
|
}
|
|
|
|
public PhysicalEntity getBrosse(){
|
|
return this.brosse;
|
|
}
|
|
|
|
@Override
|
|
public String toString(){
|
|
return this.brosse.toString();
|
|
}
|
|
|
|
public float getAngle() {
|
|
return angle;
|
|
}
|
|
|
|
|
|
}
|