 TODO
======

UI
---
 * Need a method to select spot to create/drop entities.
 * Pop-up menu showing possible interactions with an entity
 * Entity information dialog.
 * Make use of the stacking attribute. -- Eris stuff required?

Threading
---------
  * Lots of multi-core machines now.
  * Main problem areas: Open GL and Eris
  * Could thread model loading (easy ?) load in background and notify when its available. What do we do in the mean time -- PlaceHolder nullmodel?
  * Could thread eris polling (hard!) -- lots of accesses to Entity objects.

Entity Scripting
----------------

 * Embed LUA into Sear
  - Can eventually replace action handler and even current scripting interface?
 * We will probably want some way of handling time driven proccesses. Ie. each frame we will need to call some update/tick functions to advance a script further. We will probably want to be able to dynamically register/unregister particular scripts so as to not bog down performance too much.

 * Create some event handlers for specific events to control specific behaviour.
  - E.g. creation event could randomise head texture.
 * Possible events?
  - Change of appearance
  - Change of mode/action
  - Change of status
 * Might want to change default model/textures depending on attributes
  - Tree texture for seasons
  - Tree model depending on age/height
 * Might want to control certain behaviour, e.g. how fire is rendered on a burning entity.
 * Equipping an item might require triggering of certain animations and model selection.
 * We can also have scripts for certain events.
  - Explosions requiring mutliple artifacts to be rendered temporarily
  - "magically" create object could require a "poof of smoke"

General
-------

 * allow multiple terrain entities

Render Queue
------------

 * Loop through each object and update the animations
 * Loop through each object and check visibility
 * Loop through each object and get all the meshes to render
  - Encode required transform and re-check visibility
  - Add to a priority queue and sort by texture, states, transparency etc..
 * Render the queue

TextureManager
 * Implement reference counting for textures so they can be unloaded when no 
   longer required

CameraSystem
 * Create new camera types (e.g. top down, orthographic etc..)
 * Create smooth transitions between camera's

 * Finish moving graphics code into appropriate places
 * Make greater use of vertex buffer objects
 * Support more OpenGL extensions.
 * Implement shadows (Volumes/Maps)
 * Implements Per-Pixel lighting and associated techniques
 * Move OpenGL code into one object. Aim is to allow the "drop in" of other Render objects using another system such as DX
 * Add wavy grass effects
 * Add foot prints
 * Add weather effects
  - Query weather entity
 
ModelHandler
 * Needs to be able to instatiate objects independant of entity (e.g. for mercator forest)
 * Needs models to query and check for updates from associated world entity's

Media
 * Improve media efficiency 
 * run meshes through poly reductioner ?
 * Make textures smaller

General
 * Add an oct tree or other space partitioning system.
  - Provide basis for collision detection code
  - Reduce number of entities to render
  - Can link nodes to an "indoor" engine
  - Use to provide distance info for rendering options

 * Improve Sound/Music System
  - SDL_mixer (or maybe SDL sound subsystem) doesn't clean up properly
  - Currently using SDL_mixer. It is adequate for now, but a much better alternative would be to use openAL, www.openal.org

 * Create a file handling class
  - Allows memory mapping if appropriate
  - Allow file access from archives
  - transparent access bewtween file system and archives

  - Store type/position/emissive info about each light source
  - Determines light priority order (render N most appropriate light sources)
 

 * Improve scripting engine
  - Character manipulation
  - Animation control
  - Init special effects

 * Allow character portraits

 * Cally improvements
  - Make model heads turn to face the way the camera is looking
  - Allow skinning
  - Improve animation/mesh changing 

