001: /*
002: * $RCSfile: WakeupCriterion.java,v $
003: *
004: * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
006: *
007: * This code is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU General Public License version 2 only, as
009: * published by the Free Software Foundation. Sun designates this
010: * particular file as subject to the "Classpath" exception as provided
011: * by Sun in the LICENSE file that accompanied this code.
012: *
013: * This code is distributed in the hope that it will be useful, but WITHOUT
014: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: * version 2 for more details (a copy is included in the LICENSE file that
017: * accompanied this code).
018: *
019: * You should have received a copy of the GNU General Public License version
020: * 2 along with this work; if not, write to the Free Software Foundation,
021: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
022: *
023: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
024: * CA 95054 USA or visit www.sun.com if you need additional information or
025: * have any questions.
026: *
027: * $Revision: 1.5 $
028: * $Date: 2008/02/28 20:17:33 $
029: * $State: Exp $
030: */
031:
032: package javax.media.j3d;
033:
034: /**
035: * An abstract class specifying a singleton wakeup Criterion. This
036: * class consists of several subclasses, each of which specifies one
037: * particular wakeup criterion, that criterion's associated arguments
038: * (if any), and either a flag that indicates whether this criterion
039: * caused a Behavior object to awaken or a return field containing the
040: * information that caused the Behavior object to awaken.
041: * <p>
042: * Note that a unique WakeupCriterion object must be used with each instance
043: * of a Behavior. Sharing wakeup criteria among different instances of
044: * a Behavior is illegal. Similarly, a unique WakeupCriterion object
045: * must be used for each individual element in the set of arrays used
046: * to construct WakeupOr, WakeupAnd, WakeupOrOfAnds, and
047: * WakeupAndOfOrs objects.
048: */
049:
050: public abstract class WakeupCriterion extends WakeupCondition {
051:
052: /**
053: * Flag specifying whether this criterion triggered a wakeup
054: */
055: boolean triggered;
056:
057: /**
058: * Returns true if this criterion triggered the wakeup.
059: * @return true if this criterion triggered the wakeup.
060: */
061: public boolean hasTriggered() {
062: return this .triggered;
063: }
064:
065: /**
066: * Set the Criterion's trigger flag to true.
067: */
068: void setTriggered() {
069: this .triggered = true;
070: if (this .parent == null) {
071: super .setConditionMet(id, Boolean.TRUE);
072: } else {
073: parent.setConditionMet(id, Boolean.TRUE);
074: }
075: }
076:
077: /**
078: * Initialize And/Or tree and add criterion to the BehaviourStructure.
079: *
080: */
081: void buildTree(WakeupCondition parent, int id, BehaviorRetained b) {
082: super .buildTree(parent, id, b);
083: triggered = false;
084: addBehaviorCondition(b.universe.behaviorStructure);
085: }
086:
087: /**
088: * This goes through the AndOr tree to remove the various criterion from the
089: * BehaviorStructure.
090: * We can't use behav.universe.behaviorStructure since behav
091: * may reassign to another universe at this time.
092: *
093: */
094: void cleanTree(BehaviorStructure bs) {
095: conditionMet = false;
096: removeBehaviorCondition(bs);
097: };
098:
099: /**
100: * This goes through the AndOr tree to reset various criterion.
101: */
102: void resetTree() {
103: conditionMet = false;
104: triggered = false;
105: resetBehaviorCondition(behav.universe.behaviorStructure);
106: }
107:
108: /**
109: * This is a callback from BehaviorStructure. It is
110: * used to add wakeupCondition to behavior structure.
111: */
112: abstract void addBehaviorCondition(BehaviorStructure bs);
113:
114: /**
115: * This is a callback from BehaviorStructure. It is
116: * used to remove wakeupCondition from behavior structure.
117: */
118: abstract void removeBehaviorCondition(BehaviorStructure bs);
119:
120: /**
121: * It is used reset wakeupCondition when it is reused.
122: */
123: abstract void resetBehaviorCondition(BehaviorStructure bs);
124: }
|