javax.media.j3d.WakeupCondition Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java3d-core Show documentation
Show all versions of java3d-core Show documentation
Java3D Core And Java3D Util Libraries
The newest version!
/*
* Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
*/
package javax.media.j3d;
import java.util.Enumeration;
/**
* An abstract class specifying a single wakeup Condition. This class
* is extended by the WakeupCriterion, WakeupOr, WakeupAnd,
* WakeupOrOfAnds, and WakeupAndOfOr classes. A Behavior node hands a
* WakeupCondition object to the behavior scheduler and the behavior
* scheduler hands back an enumeration of that WakeupCondition.
*/
public abstract class WakeupCondition extends Object {
static final int ALL_ELEMENTS = 0;
static final int TRIGGERED_ELEMENTS = 1;
/**
* This boolean indicates whether this condition has been fully met.
*/
boolean conditionMet = false;
/**
* This points to the parent of this criterion in the AndOr tree
*/
WakeupCondition parent = null;
/**
* The location of this criterion in the parents array.
*/
int id;
/**
* The BehaviorRetained node that is using this condition
*/
BehaviorRetained behav = null;
/**
* This is the allElements enumerator
*/
WakeupCriteriaEnumerator allEnum = null;
/**
* This is the triggeredElements enumerator
*/
WakeupCriteriaEnumerator trigEnum = null;
// Use in WakeupIndexedList
int listIdx[][];
/**
* Returns an enumeration of all WakeupCriterias in this Condition.
*/
public Enumeration allElements() {
if (allEnum == null) {
allEnum = new WakeupCriteriaEnumerator(this, ALL_ELEMENTS);
} else {
allEnum.reset(this, ALL_ELEMENTS);
}
return allEnum;
}
/**
* Returns an enumeration of all triggered WakeupCriterias in this Condition.
*/
public Enumeration triggeredElements() {
if (trigEnum == null) {
trigEnum = new WakeupCriteriaEnumerator(this, TRIGGERED_ELEMENTS);
} else {
trigEnum.reset(this, TRIGGERED_ELEMENTS);
}
return trigEnum;
}
/**
* this sets the conditionMet flag.
*/
void setConditionMet(int id, Boolean checkSchedulingRegion) {
if (!conditionMet) {
conditionMet = true;
J3dMessage message = new J3dMessage();
message.type = J3dMessage.COND_MET;
message.threads = J3dThread.UPDATE_BEHAVIOR;
message.universe = behav.universe;
message.args[0] = behav;
message.args[1] = checkSchedulingRegion;
message.args[2] = this;
VirtualUniverse.mc.processMessage(message);
}
}
/**
* Initialize And/Or tree and add criterion to the BehaviourStructure
*/
void buildTree(WakeupCondition parent, int id, BehaviorRetained b){
this.parent = parent;
this.behav = b;
this.id = id;
conditionMet = false;
}
/**
* This goes through the AndOr tree to remove the various criterion from the
* BehaviorStructure.
* We can't use behav.universe.behaviorStructure since behav
* may reassign to another universe at this time.
*/
void cleanTree(BehaviorStructure bs) {
conditionMet = false;
}
void reInsertElapseTimeCond() {
conditionMet = false;
}
void resetTree() {
conditionMet = false;
}
}