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.

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.

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 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access