From 60a1acae72f0d317fd852036b666750abf782f0d Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Mon, 30 May 2022 17:30:50 -0500 Subject: [PATCH] Implement drag and friction for ground movement Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 --- 1x.png | Bin 8667 -> 0 bytes src/sig/engine/Panel.java | 3 -- src/sig/objects/LevelRenderer.java | 5 ++-- src/sig/objects/Player.java | 45 ++++++++++++++++++++++++++--- tiles.png | Bin 5877 -> 0 bytes 5 files changed, 44 insertions(+), 9 deletions(-) delete mode 100644 1x.png delete mode 100644 tiles.png diff --git a/1x.png b/1x.png deleted file mode 100644 index 7bd2a0747d9c6a81d34983712206897437fa81c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8667 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 diff --git a/src/sig/engine/Panel.java b/src/sig/engine/Panel.java index bb34b0c..b026861 100644 --- a/src/sig/engine/Panel.java +++ b/src/sig/engine/Panel.java @@ -1,13 +1,10 @@ package sig.engine; import java.awt.Graphics; -import java.awt.GraphicsConfiguration; -import java.awt.GraphicsEnvironment; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.ColorModel; import java.awt.image.MemoryImageSource; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.awt.event.KeyEvent; diff --git a/src/sig/objects/LevelRenderer.java b/src/sig/objects/LevelRenderer.java index d4958c2..3eaaee5 100644 --- a/src/sig/objects/LevelRenderer.java +++ b/src/sig/objects/LevelRenderer.java @@ -28,12 +28,12 @@ public class LevelRenderer extends Object{ int left = KeyHeld(KeyEvent.VK_LEFT)||KeyHeld(KeyEvent.VK_A)?1:0; int up = KeyHeld(KeyEvent.VK_UP)||KeyHeld(KeyEvent.VK_W)?1:0; int down = KeyHeld(KeyEvent.VK_DOWN)||KeyHeld(KeyEvent.VK_S)?1:0; - if (right-left!=0) { + /*if (right-left!=0) { setX(getX()+(right-left)*512*updateMult); } if (up-down!=0) { setY(getY()+(down-up)*512*updateMult); - } + }*/ boolean left_mb = MouseHeld(MouseEvent.BUTTON1); boolean middle_mb = MouseHeld(MouseEvent.BUTTON2); boolean right_mb = MouseHeld(MouseEvent.BUTTON3); @@ -46,6 +46,7 @@ public class LevelRenderer extends Object{ Map.SaveMap(RabiClone.CURRENT_MAP); System.out.println("Map saved"); } + setX(RabiClone.player.getX()-RabiClone.BASE_WIDTH/2); setY(RabiClone.player.getY()-RabiClone.BASE_HEIGHT*(2/3d)); } diff --git a/src/sig/objects/Player.java b/src/sig/objects/Player.java index 17e438b..b526230 100644 --- a/src/sig/objects/Player.java +++ b/src/sig/objects/Player.java @@ -7,11 +7,20 @@ import sig.engine.Sprite; import sig.map.CollisionType; import sig.map.Tile; +import java.awt.event.KeyEvent; + public class Player extends Object{ - double y_acceleration = 9000; + double y_acceleration = 90; + double y_acceleration_limit = 100; double x_acceleration = 0; + double x_acceleration_limit = 100; double x_velocity = 0; + double x_velocity_limit = 128; double y_velocity = 5; + double y_velocity_limit = 192; + + double horizontal_drag = 2000; + double horizontal_friction = 500; public Player(Panel panel) { super(panel); @@ -23,15 +32,27 @@ public class Player extends Object{ @Override public void update(double updateMult) { - y_velocity += y_acceleration*updateMult; + int right = KeyHeld(KeyEvent.VK_RIGHT)?1:0; + int left = KeyHeld(KeyEvent.VK_LEFT)?1:0; + + + x_velocity = + Math.abs(x_velocity+x_acceleration*updateMult)>x_velocity_limit + ?Math.signum(x_velocity+x_acceleration*updateMult)*x_velocity_limit + :x_velocity+x_acceleration*updateMult; + y_velocity = + Math.abs(y_velocity+y_acceleration*updateMult)>y_velocity_limit + ?Math.signum(y_velocity+y_acceleration*updateMult)*y_velocity_limit + :y_velocity+y_acceleration*updateMult; double displacement = y_velocity*updateMult; boolean is_collision = false; for(int i=0;i<4;i++){ double check_distance = (displacement/4)*(i+1); Tile checked_tile_top = RabiClone.CURRENT_MAP.getTile((int)getX()/Tile.TILE_WIDTH, (int)(getY()+check_distance)/Tile.TILE_HEIGHT); - Tile checked_tile_bottom = RabiClone.CURRENT_MAP.getTile((int)(getX()+getSprite().getWidth())/Tile.TILE_WIDTH, (int)(getY()+getSprite().getHeight()/2+check_distance)/Tile.TILE_HEIGHT); + Tile checked_tile_bottom_right = RabiClone.CURRENT_MAP.getTile((int)(getX()+getSprite().getWidth()/2)/Tile.TILE_WIDTH, (int)(getY()+getSprite().getHeight()/2+check_distance)/Tile.TILE_HEIGHT); + Tile checked_tile_bottom_left = RabiClone.CURRENT_MAP.getTile((int)(getX()-getSprite().getWidth()/2)/Tile.TILE_WIDTH, (int)(getY()+getSprite().getHeight()/2+check_distance)/Tile.TILE_HEIGHT); //System.out.println((int)getX()/Tile.TILE_WIDTH); - if(checked_tile_bottom.getCollision()==CollisionType.BLOCK){ + if(checked_tile_bottom_right.getCollision()==CollisionType.BLOCK||checked_tile_bottom_left.getCollision()==CollisionType.BLOCK){ setY((getY()+check_distance)); y_acceleration = 0; y_velocity = 0; @@ -41,7 +62,23 @@ public class Player extends Object{ } if (!is_collision){ this.setY(this.getY()+displacement); + } else { + if (right-left!=0) { + x_acceleration=horizontal_drag*updateMult*(right-left); + } else { + if (x_velocity!=0) { + x_velocity=x_velocity>0 + ?x_velocity-horizontal_friction*updateMult>0 + ?x_velocity-horizontal_friction*updateMult + :0 + :x_velocity+horizontal_friction*updateMult<0 + ?x_velocity+horizontal_friction*updateMult + :0; + } + x_acceleration=0; + } } + this.setX(this.getX()+x_velocity*updateMult); } @Override diff --git a/tiles.png b/tiles.png deleted file mode 100644 index c2dc26b08dd4dc812596f230590dcd3cb6275031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5877 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