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

\label{sec:design-changes}

Since the preliminary release, a number of changes have been made to
the design.  A few of these were necessitated by the amendment that
was released following the preliminary release, though most were made
for the platonic joy felt as a result of increasing the elegance of a
design.  Due to our approach of using many small components, the
effects of these changes on other parts of the system remained fairly
minimal.

\subsubsection{Changes For The Amendment}

No changes to the design were necessary to support multiple balls.
Because our balls are simply gizmos and our collision system is
general, the only necessary changes were in the implementations of the
ball gizmo and the absorber gizmo.

The only necessary change to support polygonal gizmos was the addition
of collection property support to the property system and the loader.
However, both of these are still general (indeed, we had considered
supporting collection properties from the beginning, but had decided
that it wasn't necessary).  The loader assumes that any sub-elements
of a gizmo tag should be added to the corresponding collection
property, therefore it could be used for any gizmo with collection
properties.

\subsubsection{Additional Changes}

Most of the remaining design changes were with respect to making the
game engine and gizmo designs more elegant.  The gizmos were moved out
of the game engine package and into their own because the game engine
itself works entirely with abstract gizmos and because the game
package was getting rather cluttered (see Section~\ref{sec:gizmos}).
To accompany this stronger division of game engine and gizmos, the
collision system was replaced with a brand new ``interaction system''
(see Section~\ref{sec:interaction-system}).  This system is designed
to concretely capture a fully general mechanism through which gizmos
can ``interact''.  For the \Gizmoball standard gizmos, this is used to
model collisions, but the system itself is general.

Along with the new interaction system, what used to be
\texttt{AbstractGizmoWithPolygonalGeometry} was generalized into a
full-blown abstraction around the physics library that allows gizmos
to specify their geometric properties and their motion.  This
abstraction allows any gizmo to collide with any other gizmo that the
underlying physics library supports.  Thus, this dramatically reduces
the coupling between gizmos.

