The ObjectDisplayList Class




public:
        ObjectDisplayList();
        ~ObjectDisplayList();

        void    Setup( void )   {};
        void    Cleanup( void ) {};

        void    InsertObject( DrawableObject *object );
        void    RemoveObject( DrawableObject *object );

        void    InsertUpdateCallbacks( UpdateCallBack*, SortCallBack*, void *self );
        void    RemoveUpdateCallbacks( UpdateCallBack*, SortCallBack*, void *self );

        void    UpdateMetrics( Tpoint *pos ); // do update without moving around in lists
        void    UpdateMetrics( long listNo, Tpoint *pos, TransportStr *transList );
        void    SortForViewpoint( void );

        void    ResetTraversal( void )          { nextToDraw = head; };
        float   GetNextDrawDistance( void )     { if (nextToDraw) return nextToDraw->distance; else return -1.0f; };
        void    DrawBeyond( float ringDistance, int LOD, RenderOTW *renderer );
        void    DrawBeyond( float ringDistance, Render3D *renderer );

        DrawableObject* GetNearest( void )                      { return tail; };
        DrawableObject* GetNext( void )                         { return nextToDraw; };
        DrawableObject* GetNextAndAdvance( void )       { DrawableObject *p = nextToDraw; if (nextToDraw) nextToDraw = nextToDraw->next;  return p; };
        void InsertionSortLink(DrawableObject **listhead, DrawableObject *listend);
        void QuickSortLink(DrawableObject **head, DrawableObject *end);

  protected:
        DrawableObject *head;
        DrawableObject *tail;
        DrawableObject *nextToDraw;

        UpdateCallBack  *updateCBlist;
        SortCallBack    *sortCBlist;