X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2Fmobs%2FMob.java;h=b7a975caf3b4217032573afdfc200760515f78f3;hb=855c0d5893371fa9ee164bd69a782a8071933578;hp=3bc3b5b413dc620cb353ff7c351c7ea0a010d270;hpb=3992892d92be0c4ea654de3b4e10c32bf4552d9c;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java b/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java index 3bc3b5b..b7a975c 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java +++ b/core/src/ru/deadsoftware/cavedroid/game/mobs/Mob.java @@ -4,7 +4,7 @@ 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 ru.deadsoftware.cavedroid.game.GameWorld; +import ru.deadsoftware.cavedroid.game.world.GameWorld; import java.io.Serializable; @@ -13,6 +13,8 @@ import java.io.Serializable; */ public abstract class Mob extends Rectangle implements Serializable { + protected static int ANIMATION_SPEED = 360; + public enum Type { MOB, SAND, @@ -26,11 +28,11 @@ public abstract class Mob extends Rectangle implements Serializable { 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; @@ -54,6 +56,30 @@ public abstract class Mob extends Rectangle implements Serializable { 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 */ @@ -120,7 +146,7 @@ public abstract class Mob extends Rectangle implements Serializable { return mDead; } - public final int getAnim() { + public final float getAnim() { return mAnim; } @@ -169,9 +195,9 @@ public abstract class Mob extends Rectangle implements Serializable { } } - 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(); }