diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java b/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java
index bcab5867bc4e8ee9186543eebd206e4733437b86..698ebef8c847ba3f5c2a802d0ba1c045cfacd6a4 100644 (file)
package ru.deadsoftware.cavedroid.game.mobs;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
package ru.deadsoftware.cavedroid.game.mobs;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import java.io.Serializable;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import java.io.Serializable;
+import static ru.deadsoftware.cavedroid.GameScreen.GP;
+
/**
* Mob class.
*/
/**
* Mob class.
*/
-public abstract class Mob implements Serializable {
-
- public static final int LEFT = 0;
- public static final int RIGHT = 1;
-
- private float width, height;
- private int dir;
-
- public boolean flyMode;
- public Vector2 pos;
- public Vector2 mov;
-
- private boolean dead;
+public abstract class Mob extends Rectangle implements Serializable {
+ protected Vector2 move;
+ protected Type type;
protected int animDelta = 6;
protected int animDelta = 6;
- public boolean canJump;
- int anim;
+ protected int anim;
+ private Direction dir;
+ private boolean dead;
+ private boolean canJump, flyMode;
/**
/**
- *
- * @param x in pixels
- * @param y in pixels
- * @param width in pixels
+ * @param x in pixels
+ * @param y in pixels
+ * @param width in pixels
* @param height in pixels
* @param height in pixels
- * @param dir integer representing a direction where 0 is left and 1 is right.
- * You should use {@link #LEFT} and {@link #RIGHT} constants
+ * @param dir Direction in which mob is looking
*/
*/
- public Mob(float x, float y, float width, float height, int dir) {
- pos = new Vector2(x, y);
- mov = new Vector2(0, 0);
- this.width = width;
- this.height = height;
+ protected Mob(float x, float y, float width, float height, Direction dir, Type type) {
+ super(x, y, width, height);
+ move = new Vector2(0, 0);
canJump = false;
canJump = false;
- flyMode = false;
dead = false;
this.dir = dir;
dead = false;
this.dir = dir;
+ this.type = type;
+ }
+
+ protected static Direction randomDir() {
+ return MathUtils.randomBoolean(.5f) ? Direction.LEFT : Direction.RIGHT;
}
/**
}
/**
- *
* @return The X coordinate of a mob in blocks
*/
* @return The X coordinate of a mob in blocks
*/
- public int getMapX() {
- return (int) (pos.x + (getWidth() / 2)) / 16;
+ public final int getMapX() {
+ return (int) (x + (getWidth() / 2)) / 16;
}
/**
}
/**
- *
* @return The Y coordinate of mob's upper edge in blocks
*/
* @return The Y coordinate of mob's upper edge in blocks
*/
- public int getUpperMapY() {
- return (int) (pos.y / 16);
+ public final int getUpperMapY() {
+ return (int) (y / 16);
}
/**
}
/**
- *
* @return The Y coordinate if mob's vertical center in blocks
*/
* @return The Y coordinate if mob's vertical center in blocks
*/
- public int getMiddleMapY() {
- return (int) (pos.y + (getHeight() / 2)) / 16;
+ public final int getMiddleMapY() {
+ return (int) (y + (getHeight() / 2)) / 16;
}
/**
}
/**
- *
* @return The Y coordinate of mob's legs in blocks
*/
* @return The Y coordinate of mob's legs in blocks
*/
- public int getLowerMapY() {
- return (int) (pos.y + getHeight()) / 16;
+ public final int getLowerMapY() {
+ return (int) (y + getHeight()) / 16;
}
}
- public float getWidth() {
+ public final float getWidth() {
return width;
}
return width;
}
- public float getHeight() {
+ public final float getHeight() {
return height;
}
/**
return height;
}
/**
- *
* @return Integer representing a direction in which mob is looking, where 0 is left and 1 is right
*/
* @return Integer representing a direction in which mob is looking, where 0 is left and 1 is right
*/
- public int getDirection() {
+ public final Direction getDirection() {
return dir;
}
return dir;
}
- public boolean looksLeft() {
- return getDirection() == LEFT;
+ public final boolean looksLeft() {
+ return dir == Direction.LEFT;
}
}
- public boolean looksRight() {
- return getDirection() == RIGHT;
+ public final boolean looksRight() {
+ return dir == Direction.RIGHT;
}
/**
* Switches direction in which mob is looking
*/
}
/**
* Switches direction in which mob is looking
*/
- protected void switchDir() {
- dir = looksLeft() ? RIGHT : LEFT;
+ protected final void switchDir() {
+ dir = looksLeft() ? Direction.RIGHT : Direction.LEFT;
}
}
- public boolean isDead() {
+ protected final int dirMultiplier() {
+ return looksLeft() ? 0 : 1;
+ }
+
+ public final boolean isDead() {
return dead;
}
return dead;
}
+ public final int getAnim() {
+ return anim;
+ }
+
/**
/**
- * Set's mob's dead variable to true and nothing else. It doesn't delete the mob.
+ * Set's mob's dead variable to true and nothing else. It doesn't delete the
*/
*/
- public void kill() {
+ public final void kill() {
dead = true;
}
dead = true;
}
- /**
- *
- * @return A {@link Rectangle} with mob's coordinates and size
- */
- public Rectangle getRect() {
- return new Rectangle(pos.x, pos.y, getWidth(), getHeight());
+ public final void move() {
+ x += move.x;
+ y += move.y;
+ }
+
+ public final Vector2 getMove() {
+ return move;
+ }
+
+ public final boolean canJump() {
+ return canJump;
+ }
+
+ public final void setCanJump(boolean canJump) {
+ this.canJump = canJump;
+ }
+
+ public final boolean isFlyMode() {
+ return flyMode;
+ }
+
+ public final void setFlyMode(boolean flyMode) {
+ this.flyMode = flyMode;
+ }
+
+ public final Type getType() {
+ return type;
}
}
+ public void checkWorldBounds() {
+ if (x + width / 2 < 0) {
+ x += GP.world.getWidthPx();
+ }
+ if (x + width / 2 > GP.world.getWidthPx()) {
+ x -= GP.world.getWidthPx();
+ }
+ }
+
+ public abstract void draw(SpriteBatch spriteBatch, float x, float y);
+
public abstract void ai();
public abstract void changeDir();
public abstract void ai();
public abstract void changeDir();
- public abstract void draw(SpriteBatch spriteBatch, float x, float y);
+ public enum Type {
+ MOB,
+ SAND,
+ GRAVEL
+ }
- /**
- *
- * @return 0 - if regular mob. <br>
- * 10 - if instance of {@link FallingSand} <br> 11 - if instance of {@link FallingGravel}
- */
- public abstract int getType(); //0 - mob, 10 - sand, 11 - gravel
+ public enum Direction {
+ LEFT,
+ RIGHT
+ }
}
}