\documentclass{projdoc} \title{Software Design} \begin{document} \tablestables \newpage \section{Introduction} This document outlines the design and development process of the cr\^epe game engine, detailing the key decisions made during its creation. The primary goal of this engine is to offer a streamlined, Unity-like experience tailored for developing 2D games similar to Jetpack Joyride. The cr\^epe engine is designed to ease the transition for developers familiar with Unity, ensuring minimal friction when switching platforms. Our aim is to preserve many of Unity’s core features while introducing a lightweight and open-source alternative, licensed under the MIT License. The engine is primarily aimed at indie developers who have prior experience with Unity and are looking for a flexible, cost-effective solution with familiar workflows. \section{Overview} \subsection{Core} \subsection{Patterns} \section{Design} \subsection{Rendering} \subsection{Physics} \subsection{Scripting} \subsection{Audio} \subsubsection{Library} \subsubsection{Fa\c{c}ade} \Cref{fig:class-audio-facade} shows a class diagram of the audio fa\c{c}ade. It contains the following classes: \begin{description} \item[SoundContext] This is a wrapper around the \codeinline{SoLoud::soloud} `engine' class, and is therefore implemented as a singleton. This ensures the audio engine is initialized before \codeinline{Sound} is able to use it. This class is friends with \codeinline{Sound}, so only \codeinline{Sound} is able to get the \codeinline{SoundContext} instance. \item[Sound] This is a wrapper around the \codeinline{SoLoud::Wav} class, and uses cr\^epe's \codeinline{api::Resource} class to load an audio sample instead. \end{description} \begin{figure} \centering \includepumldiag{img/facade-audio.puml} \caption{Audio fa\c{c}ade class diagram} \label{fig:class-audio-facade} \end{figure} \subsection{Input} \subsection{Physics} \section{Tools} \section{Conclusion} \end{document}