From c0c4369c6eba1c1a8cc9ad70b0c828f581beabfe Mon Sep 17 00:00:00 2001 From: GammelJAN Date: Sat, 19 Dec 2020 21:59:10 +0100 Subject: [PATCH] movement and collissions added --- core/src/com/trs/main/Player.java | 94 ++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 20 deletions(-) diff --git a/core/src/com/trs/main/Player.java b/core/src/com/trs/main/Player.java index 19428aa..4682224 100644 --- a/core/src/com/trs/main/Player.java +++ b/core/src/com/trs/main/Player.java @@ -59,46 +59,100 @@ public class Player extends Actor{ if(Gdx.input.isKeyPressed(Input.Keys.S)){ movementY = -speed; } + /** + * return + * 0: only vertical movement available + * 1: only horizontal movement available + * 2: full movement available + * 3: no movement available + */ + int movementAvailable = getMovementAvailable(); + switch(movementAvailable){ + case 0: + setY(getY()+movementY); + break; + case 1: + setX(getX()+movementX); + break; + case 2: + setX(getX()+movementX); + setY(getY()+movementY); + break; + case 3: + break; + } + + movementX = 0; + movementY = 0; - boolean canMoveRight = true; - boolean canMoveLeft = true; + playerSprite.updateAnimation(delta); + super.act(delta); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void draw(Batch batch, float parentAlpha) { + playerSprite.draw(batch); + super.draw(batch, parentAlpha); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean remove() { + return super.remove(); //To change body of generated methods, choose Tools | Templates. + } + /** + * return + * 0: only vertical movement available + * 1: only horizontal movement available + * 2: full movement available + * 3: no movement available + */ + public int getMovementAvailable(){ + + boolean canMoveVer = true; + boolean canMoveHor = true; boolean canMoveBoth = true; + for(Actor a : getStage().getActors()){ + if(a.getName().equals("mapobject")){ + Rectangle p = new Rectangle(getX()+movementX, getY() + movementY, getWidth(), getHeight()); + Rectangle o = new Rectangle(a.getX(), a.getY(), a.getWidth(), a.getHeight()); + if(Intersector.overlaps(p, o)){ + canMoveBoth = false; + break; + } + } + } + if(canMoveBoth){ + return 2; + } + for(Actor a : getStage().getActors()){ if(a.getName().equals("mapobject")){ Rectangle p = new Rectangle(getX()+movementX, getY(), getWidth(), getHeight()); Rectangle o = new Rectangle(a.getX(), a.getY(), a.getWidth(), a.getHeight()); if(Intersector.overlaps(p, o)){ - canMoveRight = false; + canMoveHor = false; break; } } } + if(canMoveHor){ + return 1; + } for(Actor a : getStage().getActors()){ if(a.getName().equals("mapobject")){ Rectangle p = new Rectangle(getX(), getY()+movementY, getWidth(), getHeight()); Rectangle o = new Rectangle(a.getX(), a.getY(), a.getWidth(), a.getHeight()); if(Intersector.overlaps(p, o)){ - canMoveRight = false; + canMoveVer = false; break; } } } - - - - playerSprite.updateAnimation(delta); - super.act(delta); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void draw(Batch batch, float parentAlpha) { - playerSprite.draw(batch); - super.draw(batch, parentAlpha); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public boolean remove() { - return super.remove(); //To change body of generated methods, choose Tools | Templates. + if(canMoveVer){ + return 0; + } + + return 3; }