To make Pysoy managable we're adopting a layered API whereas each layer provides a higher level for game programmers to work with. The goal is to allow most games to be implemented almost entirely with included "mode" classes since the controls and behaviors are similar to many games. Providing the lower levels allows a programmer to "tweak" modes, expand them by adding lower-level elements, or even implement their own modes from scratch.

To implement this we must first get layer 1 implemeted in a clean fashion, then add layer 2 classes, and finally add layer 3 once enough lower level classes are ready. This is a serious change from Soya which included classes such as Land and Cal3dShape which were built monolithically.

Layer 1: Primitives

  • Shapes, Entities, Nodes, Particals, and other components of a 3d scene
  • Armatures, Joints, Bodies, and other Physics/Animation? components (not animation sequences)
  • Music tracks, sound effects, voice samples, and other components of the audio system
  • Images
  • Window
    • Widgets (including camera)
    • Input from keyboard, joysticks/controllers, and mouse

Layer 2: Control

  • Forces (gravity, wind)
  • Collision Detection, Physics Processing
  • Behavior (ai, input handling, animation sequences) for all primitives
  • Networking

Layer 3: Modes

  • Splash (Pre-scripted 2d or 3d images w/ minimal input control, often at beginning of game)
  • Menu (Primarily widget-based screen, often after splash mode)
  • Avatar (Adventure, RPG, FPS, etc. Any game where you play a character that runs around and does stuff)
  • Deity (RTS-type games where you control units from a birdseye perspective)
  • Vehicle (Games where you control a car, plane, or spacecraft directly)

Care is being taken to ensure that the layers can be mixed freely. Example: a mode must allow lower level components to be used in the scene, even it's own objects manipulated directly, and elegantly recover from the discontinuity created by this. Programmers should feel comfortable "hacking" physics, switching modes, creating their own widgets, etc.