001: /*
002: * Copyright (c) 2000-2001 Silvere Martin-Michiellot All Rights Reserved.
003: *
004: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
005: * royalty free, license to use, but not to modify or redistribute this
006: * software in source and binary code form,
007: * provided that i) this copyright notice and license appear on all copies of
008: * the software; and ii) Licensee does not utilize the software in a manner
009: * which is disparaging to Silvere Martin-Michiellot.
010: *
011: * This software is provided "AS IS," without a warranty of any kind. ALL
012: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
013: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
014: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
015: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
016: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
017: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
018: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
019: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
020: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
021: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
022: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
023: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
024: *
025: * This software is not designed or intended for use in on-line control of
026: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
027: * the design, construction, operation or maintenance of any nuclear
028: * facility. Licensee represents and warrants that it will not use or
029: * redistribute the Software for such purposes.
030: *
031: *
032: */
033:
034: package com.db.hanim;
035:
036: import java.util.Enumeration;
037: import javax.media.j3d.*;
038: import javax.vecmath.*;
039:
040: //array of weights for morph should contain at least 2 values
041: //this is not checked
042:
043: //may be this class should be in the behaviors package
044: //this code is in a way updated/general code of the Morphing example code from the Java3D SDK
045: //would have you guessed ?
046: public class MorphingBehavior extends Behavior {
047:
048: private Alpha alpha;
049: private Morph morph;
050: private double weights[];
051:
052: public MorphingBehavior(Alpha alpha, Morph morph) {
053:
054: this .alpha = alpha;
055: this .morph = morph;
056: this .weights = morph.getWeights();
057:
058: }
059:
060: WakeupOnElapsedFrames w = new WakeupOnElapsedFrames(0);
061:
062: public void initialize() {
063:
064: this .alpha.setStartTime(System.currentTimeMillis());
065: wakeupOn(w);
066:
067: }
068:
069: public void restart() {
070:
071: this .alpha.setStartTime(System.currentTimeMillis());
072: wakeupOn(w);
073:
074: }
075:
076: public void processStimulus(Enumeration criteria) {
077:
078: int i;
079: float value;
080:
081: value = this .alpha.value();
082: if (value < ((weights.length - 1) / (weights.length))) {
083:
084: i = new Double(Math.floor(value * weights.length))
085: .intValue();
086:
087: weights[i] = weights.length
088: * (value - ((i + 1) / weights.length));
089: weights[i + 1] = 1 - (weights.length)
090: * (value - ((i + 1) / weights.length));
091:
092: morph.setWeights(weights);
093:
094: // Set wakeup criteria for next time
095: wakeupOn(w);
096:
097: }
098:
099: }
100:
101: }
|