3
* This file is part of jReality. jReality is open source software, made
4
* available under a BSD license:
6
* Copyright (c) 2003-2006, jReality Group: Charles Gunn, Tim Hoffmann, Markus
7
* Schmies, Steffen Weissmann.
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions are met:
14
* - Redistributions of source code must retain the above copyright notice, this
15
* list of conditions and the following disclaimer.
17
* - Redistributions in binary form must reproduce the above copyright notice,
18
* this list of conditions and the following disclaimer in the documentation
19
* and/or other materials provided with the distribution.
21
* - Neither the name of jReality nor the names of its contributors nor the
22
* names of their associated organizations may be used to endorse or promote
23
* products derived from this software without specific prior written
26
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
27
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
30
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36
* POSSIBILITY OF SUCH DAMAGE.
41
package opencog.spacetime.tools;
43
import java.util.HashMap;
44
import java.util.IdentityHashMap;
45
import java.util.Iterator;
47
import opencog.spacetime.scene.tool.AbstractTool;
48
import opencog.spacetime.scene.tool.InputSlot;
49
import opencog.spacetime.scene.tool.ToolContext;
50
import opencog.spacetime.toolsystem.ToolSystem;
61
public class AnimatorTool extends AbstractTool {
63
private static InputSlot timer = InputSlot.getDevice("SystemTime");
65
private static HashMap<Object, AnimatorTool> instances=new HashMap<Object, AnimatorTool>();
67
public static AnimatorTool getInstance(ToolContext context) {
68
return getInstanceImpl((Object) context.getKey());
72
* WARNING: do not use this unless you write a tool system!!
74
public static AnimatorTool getInstanceImpl(Object key) {
75
//if (!thread.getName().equals("jReality ToolSystem EventQueue"))
76
// throw new RuntimeException("no tool system event thread!");
77
AnimatorTool instance = (AnimatorTool) instances.get(key);
78
if (instance == null) {
79
instance = new AnimatorTool();
80
instances.put(key, instance);
86
* WARNING: do not use this unless you write a tool system!!
88
public static void disposeInstance(Object key) {
89
AnimatorTool at = instances.remove(key);
93
private TimerQueue timerQueue;
95
private IdentityHashMap<Object, AnimatorTask> animators = new IdentityHashMap<Object, AnimatorTask>();
96
private final Object mutex = new Object();
98
private double totalTime;
100
private AnimatorTool() {
101
addCurrentSlot(timer, "Triggers the animator tasks.");
102
timerQueue = new TimerQueue(this);
105
public void perform(ToolContext tc) {
106
synchronized (mutex) {
107
int dt = tc.getAxisState(timer).intValue();
109
for (Iterator<AnimatorTask> i = animators.values().iterator(); i.hasNext(); ) {
110
AnimatorTask task = i.next();
111
if (!task.run(totalTime, dt)) {
118
public void schedule(Object key, AnimatorTask task) {
119
synchronized (mutex) {
120
animators.put(key, task);
124
public void deschedule(Object key) {
125
synchronized (mutex) {
126
animators.remove(key);
130
public TimerQueue getTimerQueue() {
134
public void dispose() {
135
synchronized (mutex) {
140
public static AnimatorTool getInstance(ToolSystem ts) {
141
return getInstanceImpl(ts.getKey());