Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface GameTickListener {
- public void update(int tickCount);
- }
- //_______________________________________________________
- //_______________________________________________________
- public interface GameTimeListener {
- public void update(double timeDelta);
- }
- //_______________________________________________________
- //_______________________________________________________
- import java.util.Collection;
- import java.util.LinkedList;
- public class TickListenerManager {
- private static final long SECOND_TO_NANO = 1_000_000_000L;
- private final Collection<GameTickListener> tickListener = new LinkedList<>();
- private final long frequency;
- public TickListenerManager(int frequency) {
- this.frequency = frequency * SECOND_TO_NANO;
- }
- public void addListener(GameTickListener listener) {
- tickListener.add(listener);
- }
- public boolean removeListener(GameTickListener listener) {
- tickListener.remove(listener);
- return tickListener.isEmpty();
- }
- public void update(long totalTime, long delta) {
- long ticks = (totalTime / frequency) - ((totalTime - delta) / frequency);
- for (GameTickListener listener : tickListener) {
- listener.update((int) ticks);
- }
- }
- public int getFrequency() {
- return (int) (frequency / SECOND_TO_NANO);
- }
- }
- //_______________________________________________________
- //_______________________________________________________
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.LinkedList;
- import java.util.Map;
- public class GameTime {
- private static class Start {
- private static final long time = System.nanoTime();
- }
- private static final long SECOND_TO_NANO = 1_000_000_000L;
- private static final double NANO_TO_SECOND = 1. / SECOND_TO_NANO;
- public static final GameTime INSTANCE = new GameTime();
- private long elapsed = 0;
- private Map<Integer, TickListenerManager> tickListener = new HashMap<>();
- private Collection<GameTimeListener> timeListener = new LinkedList<>();
- private GameTime() {
- }
- public void update() {
- long start = Start.time;
- long now = System.nanoTime();
- long delta = now - start - elapsed;
- updatedTimeListener(delta);
- updatedTickListener(delta);
- elapsed += delta;
- }
- private void updatedTimeListener(long nanoSeconds) {
- double delta = nanoSeconds * NANO_TO_SECOND;
- for (GameTimeListener listener : timeListener) {
- listener.update(delta);
- }
- }
- private void updatedTickListener(long nanoSeconds) {
- for (TickListenerManager lm : tickListener.values()) {
- lm.update(elapsed, nanoSeconds);
- }
- }
- /**
- *
- * @param frequency of ticks in herz
- * @return
- */
- public void addTickListener(int frequency, GameTickListener listener) {
- TickListenerManager tlm = tickListener.get(frequency);
- if(tlm == null)
- {
- tlm = new TickListenerManager(frequency);
- tickListener.put(frequency, tlm);
- }
- tlm.addListener(listener);
- }
- public void removeTickListener(GameTickListener listener) {
- for (TickListenerManager lm : tickListener.values()) {
- if(lm.removeListener(listener))
- {
- tickListener.remove(lm.getFrequency());
- break;
- }
- }
- }
- public void addTimeListener(GameTimeListener listener) {
- timeListener.add(listener);
- }
- public void removeTimeistener(GameTimeListener listener) {
- timeListener.remove(listener);
- }
- public double getGameTime() {
- return elapsed * NANO_TO_SECOND;
- }
- /**
- *
- * @param frequency of ticks in herz
- * @return
- */
- public long getGameTicks(int frequency) {
- return elapsed / (frequency * SECOND_TO_NANO);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement