Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 0 additions & 171 deletions api/src/main/java/oxy/bascenario/api/animation/Animation.java

This file was deleted.

This file was deleted.

This file was deleted.

18 changes: 18 additions & 0 deletions api/src/main/java/oxy/bascenario/api/animation/api/Animation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package oxy.bascenario.api.animation.api;

import java.util.List;

public interface Animation {
void render();
long duration();
String type();

default List<AnimationOption<?>> options() {
return List.of();
}
default <T> T get(int index) {
return null;
}
default void set(int index, Object value) {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package oxy.bascenario.api.animation.api;

public enum AnimationMode {

/**
* The animation will play once and then stop.<br>
* The last animation value will be returned.
*/
DEFAULT,
/**
* Loop the animation from the beginning after it has finished.
*/
LOOP,
/**
* Loop the animation in a ping-pong way (forward-backward-forward-backward...).
*/
PING_PONG,

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package oxy.bascenario.api.animation.api;

public record AnimationOption<T>(String name, T value) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package oxy.bascenario.api.animation.frame;

import oxy.bascenario.api.animation.api.Animation;
import oxy.bascenario.api.animation.api.AnimationMode;
import oxy.bascenario.api.animation.api.AnimationOption;
import oxy.bascenario.api.effects.Easing;

import java.util.Comparator;
import java.util.List;

public class FrameAnimation<T> implements Animation {
private final List<Frame<T>> frames;
private final long duration;
private final T start;

private boolean reversed;

@SuppressWarnings("ALL")
@SafeVarargs
public FrameAnimation(T start, Frame<T>... frames) {
this.start = start;

this.frames = List.of(frames);
this.frames.sort(Comparator.comparingLong(f -> f.timestamp()));
if (this.frames.isEmpty()) {
this.duration = 0;
return;
}

this.duration = this.frames.get(this.frames.size() - 1).timestamp();
}

private Frame<T> currentFrame(long timestamp) {
Frame<T> frame = null;
for (Frame<T> other : this.reversed ? this.frames.reversed() : this.frames) {
if (this.reversed ? other.timestamp > timestamp : other.timestamp < timestamp) {
continue;
}

frame = other;
break;
}

return frame;
}

@Override
public void render() {
}

@Override
public long duration() {
return this.duration;
}

@Override
public String type() {
return "frame";
}

public record Frame<T>(long timestamp, long duration, Easing easing, T value) {
}

private boolean resetOnPlay = true;
private AnimationMode mode = AnimationMode.DEFAULT;
@Override
public List<AnimationOption<?>> options() {
// Reset On Play
return List.of(new AnimationOption<>("Reset on Play", true), new AnimationOption<>("Animation Mode", AnimationMode.DEFAULT));
}

@Override
public void set(int index, Object value) {
switch (index) {
case 0 -> this.resetOnPlay = (boolean) value;
case 1 -> this.mode = (AnimationMode) value;
}
}

@SuppressWarnings("ALL")
@Override
public Object get(int index) {
return switch (index) {
case 0 -> this.resetOnPlay;
case 1 -> this.mode;
default -> null;
};
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package oxy.bascenario.api.managers;

import oxy.bascenario.api.animation.Animation;
import oxy.bascenario.api.animation.api.Animation;

public interface AnimationManagerApi {
Animation put(String name, Animation animation);
Expand Down
Loading