This is a whiteboard for how the classes are arranged in the code

core/

  • soy.Color
  • soy.Scene
  • soy.Window

audio/

  • soy.audio [module]
    • soy.audio.Sound (child of soy.bodies.* instance)
    • soy.audio.Music

bodies/

  • soy.bodies [module]
    • soy.bodies.Body (child of soy.Scene instance)
    • soy.bodies.Camera (inherits soy.physics.Body, adds opengl camera)
    • soy.bodies.Light (inherits soy.physics.Body, adds opengl light)
    • soy.bodies.Mesh (inherits soy.physics.Body, adds mesh rendering)

widgets/

  • soy.widgets [module]
    • soy.widgets.Widget
    • soy.widgets.Projector (inherits soy.widgets.Widget)

We should prevent recursive inheritance - every submodule is expected to have inherited from core, some submodules will inherit from other submodules (ie, audio inherits bodies), but core should not inherit classes from submodules.