diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java b/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java
index 91dfae55e90823ce7fdc91aa6f919835edc6e58c..b7a975caf3b4217032573afdfc200760515f78f3 100644 (file)
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
-import ru.deadsoftware.cavedroid.game.GameWorld;
+import ru.deadsoftware.cavedroid.game.world.GameWorld;
import java.io.Serializable;
*/
public abstract class Mob extends Rectangle implements Serializable {
+ protected static int ANIMATION_SPEED = 360;
+
public enum Type {
MOB,
SAND,
RIGHT
}
- protected Vector2 mMove;
+ protected Vector2 mVelocity;
protected Type mType;
- protected int mAnimDelta = 6;
- protected int mAnim;
+ protected int mAnimDelta = ANIMATION_SPEED;
+ protected float mAnim;
private Direction mDirection;
- private boolean mDead;
+ protected boolean mDead;
private boolean mCanJump;
private boolean mFlyMode;
/**
- * @param x in pixels
- * @param y in pixels
- * @param width in pixels
- * @param height in pixels
- * @param mDirection Direction in which mob is looking
+ * @param x in pixels
+ * @param y in pixels
+ * @param width in pixels
+ * @param height in pixels
+ * @param mDirection Direction in which mob is looking
*/
protected Mob(float x, float y, float width, float height, Direction mDirection, Type type) {
super(x, y, width, height);
- mMove = new Vector2(0, 0);
+ mVelocity = new Vector2(0, 0);
mCanJump = false;
mDead = false;
this.mDirection = mDirection;
return MathUtils.randomBoolean(.5f) ? Direction.LEFT : Direction.RIGHT;
}
+ private boolean isAnimationIncreasing() {
+ return mAnim > 0 && mAnimDelta > 0 || mAnim < 0 && mAnimDelta < 0;
+ }
+
+ protected final void updateAnimation(float delta) {
+ if (mVelocity.x != 0f || Math.abs(mAnim) > mAnimDelta * delta) {
+ mAnim += mAnimDelta * delta;
+ } else {
+ mAnim = 0;
+ }
+
+ if (mAnim > 60f) {
+ mAnim = 60f;
+ mAnimDelta = -ANIMATION_SPEED;
+ } else if (mAnim < -60f) {
+ mAnim = -60f;
+ mAnimDelta = ANIMATION_SPEED;
+ }
+
+ if (mVelocity.x == 0f && isAnimationIncreasing()) {
+ mAnimDelta = -mAnimDelta;
+ }
+ }
+
/**
* @return The X coordinate of a mob in blocks
*/
return mDead;
}
- public final int getAnim() {
+ public final float getAnim() {
return mAnim;
}
mDead = true;
}
- public final void move() {
- x += mMove.x;
- y += mMove.y;
+ public final void move(float delta) {
+ x += mVelocity.x * delta;
+ y += mVelocity.y * delta;
}
- public final Vector2 getMove() {
- return mMove;
+ public final Vector2 getVelocity() {
+ return mVelocity;
}
public final boolean canJump() {
}
}
- public abstract void draw(SpriteBatch spriteBatch, float x, float y);
+ public abstract void draw(SpriteBatch spriteBatch, float x, float y, float delta);
- public abstract void ai(GameWorld gameWorld);
+ public abstract void ai(GameWorld gameWorld, float delta);
public abstract void changeDir();
}