Preparing the Laser Beam

The LaserBeam object is a red cylinder, hidden inside the gun cone when not in use, so there's no need for a Switch or visibility-controlling code. ShootingBehaviour rotates the cylinder (and gun cone) to point at the location picked by the user on the checkerboard. It lets FireBeam handle the shooting of the beam and subsequent explosion.

The laser beam is accompanied by a PointSound, which moves along with it. This means that the sound's volume increases (or diminishes) as the beam travels towards (or away from) the user's viewpoint.

The class diagram for LaserBeam is in Figure 23-5; all public methods are shown.

LaserBeam's public methods

Figure 23-5. LaserBeam's public methods

WrapShooter3D uses getBeamBG() to retrieve the beam's BranchGroup for addition to the scene. The scene graph branch built inside LaserBeam (by makeBeam()) is shown in Figure 23-6.

Scenegraph branch for LaserBeam

Figure 23-6. Scenegraph branch for LaserBeam

The cylinder is made unpickable, as only the floor should be pickable by the user:

    beam.setPickable(false);

The capability bits of beamTG are set to allow it to be rotated and translated.

ShootingBehaviour rotates the beam with makeRotation(), which is identical to the method in GunTurret, except that it applies the rotation to the beam's TransformGroup, beamTG.

 public void makeRotation(AxisAngle4d ...

Get Killer Game Programming in Java now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.