From ec764c56fb2aa13c02cbf2bd80366800f786b9ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laure=CE=B7t?= Date: Tue, 13 Apr 2021 19:12:18 +0200 Subject: [PATCH] fix: separated angle and rotation in Player --- core/src/sagittarius/model/BaseActor.java | 16 +++++++++- core/src/sagittarius/model/Player.java | 36 +++++++++-------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/core/src/sagittarius/model/BaseActor.java b/core/src/sagittarius/model/BaseActor.java index bbca534..31fde84 100644 --- a/core/src/sagittarius/model/BaseActor.java +++ b/core/src/sagittarius/model/BaseActor.java @@ -2,6 +2,8 @@ package sagittarius.model; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; import com.badlogic.gdx.scenes.scene2d.Actor; public abstract class BaseActor extends Actor { @@ -10,7 +12,7 @@ public abstract class BaseActor extends Actor { protected abstract String getInfo(); - protected float angle; + protected float angle; // encapsulate ? @Override public void draw(Batch batch, float parentAlpha) { @@ -18,4 +20,16 @@ public abstract class BaseActor extends Actor { fontDebug.draw(batch, getInfo(), getX(), getY()); } + @Override + protected void drawDebugBounds(ShapeRenderer shapes) { + if (!getDebug()) return; + shapes.set(ShapeType.Line); + if (getStage() != null) shapes.setColor(getStage().getDebugColor()); + shapes.rect(getX() - getOriginX(), getY() - getOriginY(), + getOriginX(), getOriginY(), + getWidth(), getHeight(), + getScaleX(), getScaleY(), + getRotation()); + } + } diff --git a/core/src/sagittarius/model/Player.java b/core/src/sagittarius/model/Player.java index ad73cf1..c99aa9d 100644 --- a/core/src/sagittarius/model/Player.java +++ b/core/src/sagittarius/model/Player.java @@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; import com.badlogic.gdx.math.MathUtils; public class Player extends BaseActor { @@ -18,10 +17,14 @@ public class Player extends BaseActor { public Player(Planet home, Color color) { super(); - this.setSize(100, 50); // TODO: fix this ? (width & height inverted) => use BaseActor.angle - this.setRotation(MathUtils.random(360)); + + this.setSize(50, 100); + this.setOrigin(getWidth()/2, getHeight()/2); this.setColor(color); - this.setOrigin(0, getHeight()/2); + + this.angle = MathUtils.random(360); + this.setRotation(angle-90); + this.home = home; this.bow = new Bow(this, true); } @@ -31,36 +34,25 @@ public class Player extends BaseActor { @Override public void drawDebug(ShapeRenderer shapes) { super.drawDebug(shapes); + shapes.line(home.getX(), home.getY(), getX(), getY()); bow.drawDebug(shapes); } - @Override - protected void drawDebugBounds(ShapeRenderer shapes) { - if (!getDebug()) return; - shapes.set(ShapeType.Line); - if (getStage() != null) shapes.setColor(getStage().getDebugColor()); - - shapes.rect(getX(), getY() - getOriginY(), - getOriginX(), getOriginY(), - getWidth(), getHeight(), - getScaleX(), getScaleY(), - getRotation()); - shapes.line(home.getX(), home.getY(), getX(), getY()); - } - @Override public void act(float dt) { super.act(dt); if (Gdx.input.isKeyPressed(Keys.LEFT)) { - rotateBy( 100.0f / home.getRadius()); + this.angle += 100.0f / home.getRadius(); } if (Gdx.input.isKeyPressed(Keys.RIGHT)) { - rotateBy(- 100.0f / home.getRadius()); + this.angle -= 100.0f / home.getRadius(); } - setX(home.getX() + home.getRadius()*MathUtils.cosDeg(getRotation())); - setY(home.getY() + home.getRadius()*MathUtils.sinDeg(getRotation())); + setX(home.getX() + (home.getRadius() + getHeight()/2)*MathUtils.cosDeg(angle)); + setY(home.getY() + (home.getRadius() + getHeight()/2)*MathUtils.sinDeg(angle)); + + this.setRotation(angle-90); bow.act(dt); }