@@ -28,7 +28,7 @@ public Mob(LevelHandler level, String name, int x, int y, double speed) {
2828 this .speed = speed ;
2929 }
3030
31- public void move (int xa , int ya ) {
31+ public void move (double xa , double ya ) {
3232 if (xa != 0 && ya != 0 ) {
3333 move (xa , 0 );
3434 move (0 , ya );
@@ -55,46 +55,63 @@ public void move(int xa, int ya) {
5555 if (xa > 0 ) {
5656 movingDir = 3 ;
5757 }
58-
59- for (int x = 0 ; x < Math .abs (xa ); x ++) {
60- if (!hasCollided (abs (xa ), ya )) {
61- setX (getX () + abs (xa ) * (int ) speed );
58+
59+ while (xa != 0 ){
60+ if (Math .abs (xa ) > 1 ){
61+ if (!hasCollided (abs (xa ), ya )) {
62+ this .x += abs (xa );
63+ }
64+ xa -= abs (xa );
65+ } else {
66+ if (!hasCollided (abs (xa ), ya )) {
67+ this .x += xa ;
68+ }
69+ xa = 0 ;
6270 }
6371 }
6472
65- for (int y = 0 ; y < Math .abs (ya ); y ++) {
66- if (!hasCollided (xa , abs (ya ))) {
67- setY (getY () + abs (ya ) * (int ) speed );
73+ while (ya != 0 ){
74+ if (Math .abs (ya ) > 1 ){
75+ if (!hasCollided (xa , abs (ya ))) {
76+ this .y += abs (ya );
77+ }
78+ ya -= abs (ya );
79+ } else {
80+ if (!hasCollided (xa , abs (ya ))) {
81+ this .y += ya ;
82+ }
83+ ya = 0 ;
6884 }
6985 }
86+
7087 }
7188
72- public boolean hasCollided (int xa , int ya ){
89+ public boolean hasCollided (double xa , double ya ){
7390 int xMin = 0 ;
7491 int xMax = 7 ;
7592 int yMin = 3 ;
7693 int yMax = 7 ;
7794
7895 for (int x = xMin ; x < xMax ; x ++) {
79- if (isSolid (xa , ya , x , yMin )) {
96+ if (isSolid (( int ) xa , ( int ) ya , x , yMin )) {
8097 return true ;
8198 }
8299 }
83100
84101 for (int x = xMin ; x < xMax ; x ++) {
85- if (isSolid (xa , ya , x , yMax )) {
102+ if (isSolid (( int ) xa , ( int ) ya , x , yMax )) {
86103 return true ;
87104 }
88105 }
89106
90107 for (int y = yMin ; y < yMax ; y ++) {
91- if (isSolid (xa , ya , xMin , y )) {
108+ if (isSolid (( int ) xa , ( int ) ya , xMin , y )) {
92109 return true ;
93110 }
94111 }
95112
96113 for (int y = yMin ; y < yMax ; y ++) {
97- if (isSolid (xa , ya , xMax , y )) {
114+ if (isSolid (( int ) xa , ( int ) ya , xMax , y )) {
98115 return true ;
99116 }
100117 }
@@ -105,8 +122,8 @@ public boolean hasCollided(int xa, int ya){
105122 public boolean hasCollidedAlt (int xa , int ya ){
106123 boolean solid = false ;
107124 for (int c = 0 ; c < 4 ; c ++) {
108- int xt = ((x + xa ) - c % 2 * 8 ) / 8 ;
109- int yt = ((y + ya ) - c / 2 * 8 ) / 8 ;
125+ double xt = ((x + xa ) - c % 2 * 8 ) / 8 ;
126+ double yt = ((y + ya ) - c / 2 * 8 ) / 8 ;
110127 int ix = (int ) Math .ceil (xt );
111128 int iy = (int ) Math .ceil (yt );
112129 if (c % 2 == 0 ) ix = (int ) Math .floor (xt );
@@ -116,7 +133,7 @@ public boolean hasCollidedAlt(int xa, int ya){
116133 return solid ;
117134 }
118135
119- private int abs (int i ){
136+ private int abs (double i ){
120137 if (i < 0 ) return -1 ;
121138 return 1 ;
122139 }
@@ -127,9 +144,9 @@ protected boolean isSolid(int xa, int ya, int x, int y) {
127144 return false ;
128145 }
129146
130- Tile lastTile = level .getTile ((this .getX () + x ) >> 3 ,
131- (this .getY () + y ) >> 3 );
132- Tile newtTile = level .getTile ((this .getX () + x + xa ) >> 3 , (this .getY ()
147+ Tile lastTile = level .getTile ((( int ) this .getX () + x ) >> 3 ,
148+ (( int ) this .getY () + y ) >> 3 );
149+ Tile newtTile = level .getTile ((( int ) this .getX () + x + xa ) >> 3 , (( int ) this .getY ()
133150 + y + ya ) >> 3 );
134151
135152 if (!lastTile .equals (newtTile ) && newtTile .isSolid ()) {
@@ -139,22 +156,22 @@ protected boolean isSolid(int xa, int ya, int x, int y) {
139156 return false ;
140157 }
141158
142- protected void followMovementAI (int x , int y , int px , int py , int xa ,
143- int ya , Mob mob ) {
159+ protected void followMovementAI (int x , int y , int px , int py , double xa ,
160+ double ya , double speed , Mob mob ) {
144161 ya = 0 ;
145162 xa = 0 ;
146163 if (px > x )
147- xa ++ ;
164+ xa += speed ;
148165 if (px < x )
149- xa -- ;
166+ xa -= speed ;
150167 if (py > y )
151- ya ++ ;
168+ ya += speed ;
152169 if (py < y )
153- ya -- ;
170+ ya -= speed ;
154171 moveMob (xa , ya , mob );
155172 }
156173
157- protected void moveMob (int xa , int ya , Mob mob ) {
174+ protected void moveMob (double xa , double ya , Mob mob ) {
158175 if (xa != 0 || ya != 0 ) {
159176 mob .move (xa , ya );
160177 mob .isMoving = true ;
0 commit comments