next up previous
Next: 6.10.4 Box.java Up: 6.10 TickTockCollision Previous: 6.10.2 衝突検知処理

6.10.3 CollisionDetector.java

/*
 *@(#)CollisionDetector.java 1.10 02/04/01 15:03:22
 * Copyright (c) 1996-2002 Sun Microsystems,
 * Inc. All Rights Reserved.
 */
import java.util.Enumeration;
import javax.media.j3d.*;
import javax.vecmath.*;
public class CollisionDetector
  extends Behavior {
  private static final
  Color3f highlightColor =
  new Color3f(0.0f, 1.0f, 0.0f);
  private static final
  ColoringAttributes highlight =
  new ColoringAttributes(
    highlightColor,
    ColoringAttributes.SHADE_GOURAUD);

  private boolean inCollision = false;
  private Shape3D shape;
  private ColoringAttributes shapeColoring;
  private Appearance shapeAppearance;
  private WakeupOnCollisionEntry wEnter;
  private WakeupOnCollisionExit wExit;

  public CollisionDetector(Shape3D s) {
    shape = s;
    shapeAppearance =
      shape.getAppearance();
    shapeColoring =
      shapeAppearance.getColoringAttributes();
    inCollision = false;
  }
  public void initialize() {
    wEnter = new WakeupOnCollisionEntry(shape);
    wExit = new WakeupOnCollisionExit(shape);
    wakeupOn(wEnter);
  }

  public void processStimulus(
    Enumeration criteria) {
    inCollision = !inCollision;
    if (inCollision) {
      shapeAppearance.setColoringAttributes(
        highlight);
      wakeupOn(wExit);
    }
    else {
      shapeAppearance.setColoringAttributes(
        shapeColoring);
      wakeupOn(wEnter);
    }
  }
}


generated through LaTeX2HTML. M.Inaba 平成18年5月7日