Implement drag and friction for ground movement
Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
bf52570b25
commit
60a1acae72
@ -1,13 +1,10 @@
|
|||||||
package sig.engine;
|
package sig.engine;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.GraphicsConfiguration;
|
|
||||||
import java.awt.GraphicsEnvironment;
|
|
||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.image.ColorModel;
|
import java.awt.image.ColorModel;
|
||||||
import java.awt.image.MemoryImageSource;
|
import java.awt.image.MemoryImageSource;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
@ -28,12 +28,12 @@ public class LevelRenderer extends Object{
|
|||||||
int left = KeyHeld(KeyEvent.VK_LEFT)||KeyHeld(KeyEvent.VK_A)?1:0;
|
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 up = KeyHeld(KeyEvent.VK_UP)||KeyHeld(KeyEvent.VK_W)?1:0;
|
||||||
int down = KeyHeld(KeyEvent.VK_DOWN)||KeyHeld(KeyEvent.VK_S)?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);
|
setX(getX()+(right-left)*512*updateMult);
|
||||||
}
|
}
|
||||||
if (up-down!=0) {
|
if (up-down!=0) {
|
||||||
setY(getY()+(down-up)*512*updateMult);
|
setY(getY()+(down-up)*512*updateMult);
|
||||||
}
|
}*/
|
||||||
boolean left_mb = MouseHeld(MouseEvent.BUTTON1);
|
boolean left_mb = MouseHeld(MouseEvent.BUTTON1);
|
||||||
boolean middle_mb = MouseHeld(MouseEvent.BUTTON2);
|
boolean middle_mb = MouseHeld(MouseEvent.BUTTON2);
|
||||||
boolean right_mb = MouseHeld(MouseEvent.BUTTON3);
|
boolean right_mb = MouseHeld(MouseEvent.BUTTON3);
|
||||||
@ -46,6 +46,7 @@ public class LevelRenderer extends Object{
|
|||||||
Map.SaveMap(RabiClone.CURRENT_MAP);
|
Map.SaveMap(RabiClone.CURRENT_MAP);
|
||||||
System.out.println("Map saved");
|
System.out.println("Map saved");
|
||||||
}
|
}
|
||||||
|
setX(RabiClone.player.getX()-RabiClone.BASE_WIDTH/2);
|
||||||
setY(RabiClone.player.getY()-RabiClone.BASE_HEIGHT*(2/3d));
|
setY(RabiClone.player.getY()-RabiClone.BASE_HEIGHT*(2/3d));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,11 +7,20 @@ import sig.engine.Sprite;
|
|||||||
import sig.map.CollisionType;
|
import sig.map.CollisionType;
|
||||||
import sig.map.Tile;
|
import sig.map.Tile;
|
||||||
|
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
|
||||||
public class Player extends Object{
|
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 = 0;
|
||||||
|
double x_acceleration_limit = 100;
|
||||||
double x_velocity = 0;
|
double x_velocity = 0;
|
||||||
|
double x_velocity_limit = 128;
|
||||||
double y_velocity = 5;
|
double y_velocity = 5;
|
||||||
|
double y_velocity_limit = 192;
|
||||||
|
|
||||||
|
double horizontal_drag = 2000;
|
||||||
|
double horizontal_friction = 500;
|
||||||
|
|
||||||
public Player(Panel panel) {
|
public Player(Panel panel) {
|
||||||
super(panel);
|
super(panel);
|
||||||
@ -23,15 +32,27 @@ public class Player extends Object{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(double updateMult) {
|
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;
|
double displacement = y_velocity*updateMult;
|
||||||
boolean is_collision = false;
|
boolean is_collision = false;
|
||||||
for(int i=0;i<4;i++){
|
for(int i=0;i<4;i++){
|
||||||
double check_distance = (displacement/4)*(i+1);
|
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_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);
|
//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));
|
setY((getY()+check_distance));
|
||||||
y_acceleration = 0;
|
y_acceleration = 0;
|
||||||
y_velocity = 0;
|
y_velocity = 0;
|
||||||
@ -41,7 +62,23 @@ public class Player extends Object{
|
|||||||
}
|
}
|
||||||
if (!is_collision){
|
if (!is_collision){
|
||||||
this.setY(this.getY()+displacement);
|
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
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user