% -*- TeX-master: "finaler" -*-

\label{sec:gizmos}

\Gizmoball comes with a standard set of gizmos which implement the
abstract gizmo that the game board works with.  These gizmos are the:
ball, square bumper, triangular bumper, circular bumper, polygonal
bumper, flipper, and absorber.

The standard gizmos augment the required gizmo properties with the
following:

\begin{itemize}
\item the gizmo's name (a string used by the editor to identify a
  specific gizmo to the user)
\item the gizmo's position on the board
\item the gizmo's orientation, if appropriate for the gizmo type
\item for a ball, its current velocity
\item for an absorber, its size
\item for a flipper, its handedness (whether it is a left flipper or a
  right flipper)
\end{itemize}

All of the gizmos except the ball utilize the
\texttt{AbstractFixedGizmo} base class.  This class allows its
subclasses to represent their geometry as a union of circles,
polygons, and line segments (the elements supported by the physics
library).  Additionally, it allows them to set the gizmo's rotation
and coefficient of reflection.  This is enough to describe all of the
gizmos except for the ball (which is special because it is the only
translatable gizmo).  Furthermore, this precisely
reflects\footnote{Not, no that type.  Or that other type.} the
capabilities of the physics library.  Thus,
\texttt{AbstractFixedGizmo} acts as an abstraction and a bridge
between the physics library and the gizmo system.

Prior to \texttt{AbstractFixedGizmo}, we used an
\texttt{AbstractGizmoWithPolygonalGeometry} class, which was only
capable of representing bumpers with polygonal geometry that did not
rotate.  However, this was discarded in favor of the
\texttt{AbstractFixedGizmo}, which has a completely superset of the
functionality.
