Skip to content

Commit 7ccc8c0

Browse files
committed
Add animation offset
1 parent 0de77de commit 7ccc8c0

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

Diff for: 2d/src/main/java/de/bitbrain/braingdx/graphics/animation/AnimationFrames.java

+23-2
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,21 @@ public enum Direction {
1515
private int frames;
1616
private float duration;
1717
private int resetIndex;
18+
private float offset;
1819

19-
private AnimationFrames(int originX, int originY, Direction direction, Animation.PlayMode playMode, int frames, float duration, int resetIndex) {
20+
private AnimationFrames(int originX, int originY, Direction direction, Animation.PlayMode playMode, int frames, float duration, int resetIndex, float offset) {
2021
this.originX = originX;
2122
this.originY = originY;
2223
this.direction = direction;
2324
this.playMode = playMode;
2425
this.frames = frames;
2526
this.duration = duration;
2627
this.resetIndex = resetIndex;
28+
this.offset = offset;
29+
}
30+
31+
public float getOffset() {
32+
return offset;
2733
}
2834

2935
public void setOriginX(int originX) {
@@ -94,6 +100,7 @@ public static class AnimationFramesBuilder {
94100
private int frames = 1;
95101
private float duration = 1f;
96102
private int resetIndex = 0;
103+
private float offset = 0;
97104

98105
private AnimationFramesBuilder() {
99106

@@ -130,6 +137,19 @@ public AnimationFramesBuilder resetIndex(int resetIndex) {
130137
return this;
131138
}
132139

140+
public AnimationFramesBuilder offset(float offsetInMilliseconds) {
141+
this.offset = offsetInMilliseconds;
142+
return this;
143+
}
144+
145+
public AnimationFramesBuilder randomOffset() {
146+
if (frames > 0) {
147+
return this.offset((float) (Math.random() * (this.duration * this.frames)));
148+
} else {
149+
return this.offset((float) (Math.random() * (this.duration * 8f)));
150+
}
151+
}
152+
133153
public AnimationFrames build() {
134154
return new AnimationFrames(
135155
originX,
@@ -138,7 +158,8 @@ public AnimationFrames build() {
138158
playMode,
139159
frames,
140160
duration,
141-
resetIndex
161+
resetIndex,
162+
offset
142163
);
143164
}
144165

Diff for: 2d/src/main/java/de/bitbrain/braingdx/graphics/animation/AnimationRenderer.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,16 @@ public AnimationRenderer enabled(boolean enabled) {
112112
private TextureRegion retrieveRegionFor(GameObject object, float delta) {
113113
Object currentAnimationType = animationTypeResolver.getAnimationType(object);
114114
AnimationState state = object.getOrSetAttribute(AnimationState.class, animationStateFactory);
115-
state.stateTime += delta;
116115
Animation<TextureRegion> animation = animationCache.getAnimation(currentAnimationType);
117-
boolean animationEnabled = animationEnabler.isEnabledFor(object);
118116
AnimationFrames frames = config.getFrames(currentAnimationType);
117+
if (state.stateTime == 0f) {
118+
state.stateTime = frames.getOffset();
119+
}
120+
state.stateTime += delta;
121+
boolean animationEnabled = animationEnabler.isEnabledFor(object);
122+
if (!animationEnabled) {
123+
state.stateTime = frames.getOffset();
124+
}
119125
return animation.getKeyFrame(animationEnabled ? state.stateTime : frames.getDuration() * frames.getResetIndex());
120126
}
121127

Diff for: CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# Version 0.6.27
2+
3+
* improve animation rendering and add offset option
4+
15
# Version 0.6.26
26

37
* add fps and particle count metrics

0 commit comments

Comments
 (0)