1 6 7 package com.thoughtriver.open.vectorvisuals.task; 8 9 18 public abstract class AnimationTask { 19 20 24 private double duration; 25 26 27 private double startTime; 28 29 30 private double updateTime; 31 32 36 private TaskManager manager; 37 38 47 public AnimationTask(final int duration) { 48 this.duration = duration; 49 startTime = -1; 50 updateTime = -1; 51 } 52 53 60 protected void setManager(final TaskManager manager) { 61 this.manager = manager; 62 } 63 64 71 public TaskManager getManager() { 72 return manager; 73 } 74 75 83 synchronized public boolean update() { 84 85 if (startTime < 0) { 87 startTime = (System.nanoTime() / 1000000); 89 init(); 91 92 TaskEvent event = new TaskEvent(this, ExecutionState.running); 94 for (TaskListener listener : getManager().getListeners()) { 95 listener.taskStateChanged(event); 96 } 97 } 98 else if (duration < 0) { 100 startTime = updateTime; 101 } 102 103 updateTime = (System.nanoTime() / 1000000); double diff = updateTime - startTime; 105 106 if (duration == 0) { 108 return false; 109 110 } 112 else if (duration < 0) { 113 update(diff); 114 115 } 117 else { 118 119 if (diff > duration) { 121 update(1.0); return false; 124 } 125 126 double progress = diff / duration; 128 update(progress); 129 } 130 131 return true; 132 } 133 134 138 synchronized public void stop() { 139 duration = 0; 140 } 141 142 147 protected void init() { 148 } 149 150 162 protected abstract void update(final double progress); 163 164 } 165 | Popular Tags |