\begin{sequencediagram}
  \newthread{ss}{:SimulationServer}
  \newinst{ctr}{:SimControlNode}
  \newinst{ps}{:PhysicsServer}
  \newinst[1]{sense}{:SenseServer}
  
  \begin{call}{ss}{Initialize()}{sense}{}
  \end{call}
  \begin{sdblock}{Run Loop}{The main loop}
    \begin{call}{ss}{StartCycle()}{ctr}{}
      \begin{call}{ctr}{ActAgent()}{sense}{}
      \end{call}
    \end{call}
    \begin{call}{ss}{Update()}{ps}{}
      \begin{messcall}{ps}{PrePhysicsUpdate()}{sense}{state}
      \end{messcall}
      \begin{sdblock}{Physics Loop}{}
        \begin{call}{ps}{PhysicsUpdate()}{ps}{}
        \end{call}
      \end{sdblock}
      \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
      \end{call}
    \end{call}
    \begin{call}{ss}{EndCycle()}{ctr}{}
      \begin{call}{ctr}{SenseAgent()}{sense}{}
      \end{call}
    \end{call}
  \end{sdblock}
\end{sequencediagram}
