Skip to content

Commit

Permalink
Add animation offset
Browse files Browse the repository at this point in the history
  • Loading branch information
bitbrain committed Apr 17, 2020
1 parent 0de77de commit 7ccc8c0
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,21 @@ public enum Direction {
private int frames;
private float duration;
private int resetIndex;
private float offset;

private AnimationFrames(int originX, int originY, Direction direction, Animation.PlayMode playMode, int frames, float duration, int resetIndex) {
private AnimationFrames(int originX, int originY, Direction direction, Animation.PlayMode playMode, int frames, float duration, int resetIndex, float offset) {
this.originX = originX;
this.originY = originY;
this.direction = direction;
this.playMode = playMode;
this.frames = frames;
this.duration = duration;
this.resetIndex = resetIndex;
this.offset = offset;
}

public float getOffset() {
return offset;
}

public void setOriginX(int originX) {
Expand Down Expand Up @@ -94,6 +100,7 @@ public static class AnimationFramesBuilder {
private int frames = 1;
private float duration = 1f;
private int resetIndex = 0;
private float offset = 0;

private AnimationFramesBuilder() {

Expand Down Expand Up @@ -130,6 +137,19 @@ public AnimationFramesBuilder resetIndex(int resetIndex) {
return this;
}

public AnimationFramesBuilder offset(float offsetInMilliseconds) {
this.offset = offsetInMilliseconds;
return this;
}

public AnimationFramesBuilder randomOffset() {
if (frames > 0) {
return this.offset((float) (Math.random() * (this.duration * this.frames)));
} else {
return this.offset((float) (Math.random() * (this.duration * 8f)));
}
}

public AnimationFrames build() {
return new AnimationFrames(
originX,
Expand All @@ -138,7 +158,8 @@ public AnimationFrames build() {
playMode,
frames,
duration,
resetIndex
resetIndex,
offset
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,16 @@ public AnimationRenderer enabled(boolean enabled) {
private TextureRegion retrieveRegionFor(GameObject object, float delta) {
Object currentAnimationType = animationTypeResolver.getAnimationType(object);
AnimationState state = object.getOrSetAttribute(AnimationState.class, animationStateFactory);
state.stateTime += delta;
Animation<TextureRegion> animation = animationCache.getAnimation(currentAnimationType);
boolean animationEnabled = animationEnabler.isEnabledFor(object);
AnimationFrames frames = config.getFrames(currentAnimationType);
if (state.stateTime == 0f) {
state.stateTime = frames.getOffset();
}
state.stateTime += delta;
boolean animationEnabled = animationEnabler.isEnabledFor(object);
if (!animationEnabled) {
state.stateTime = frames.getOffset();
}
return animation.getKeyFrame(animationEnabled ? state.stateTime : frames.getDuration() * frames.getResetIndex());
}

Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# Version 0.6.27

* improve animation rendering and add offset option

# Version 0.6.26

* add fps and particle count metrics
Expand Down

0 comments on commit 7ccc8c0

Please sign in to comment.