public:
RViewPoint() { objectLists = NULL; nObjectLists
= 0; weather = NULL; };
~RViewPoint() { ShiAssert( !IsReady() );
};
void Setup( float gndRange, int maxDetail, int minDetail, float
wxRange );
void Cleanup( void );
void SetGroundRange( float gndRange, int maxDetail, int minDetail
);
void SetWeatherRange( float wxRange );
BOOL IsReady( void ) { return (objectLists != NULL) && (TViewPoint::IsReady()); };
// Add/remove drawable objects from this viewpoint's display list
void InsertObject( DrawableObject *object );
void RemoveObject( DrawableObject *object );
// Query terrain and weather properties for the area arround this
viewpoint
float GetTerrainFloor( void ) { return
terrainFloor; };
float GetTerrainCeiling( void ) { return
terrainCeiling; };
float GetCloudBase( void ) { return
cloudBase; };
float GetCloudTops( void ) { return
cloudTops; };
float GetWeatherRange( void ) { return
weather ? weather->GetMaxRange() : 0.0f; };
// Cloud properties at this viewpoint's exact position in space
float CloudOpacity( void ) { return
cloudOpacity; };
Tcolor CloudColor( void ) {
return cloudColor; };
// Ask if a line of sight exists between two points with respect
to both clouds and terrain
float CompositLineOfSight( Tpoint *p1, Tpoint *p2 );
int CloudLineOfSight( Tpoint *p1, Tpoint *p2 );
void Update( Tpoint *pos );
void UpdateMoon();
void ResetObjectTraversal( void );
int GetContainingList( float zValue );
ObjectDisplayList* ObjectsInTerrain( void
) { return &objectLists[0].displayList; };
ObjectDisplayList* ObjectsBelowClouds(
void ) { return &objectLists[1].displayList; };
ObjectDisplayList* Clouds( void )
{ return &cloudList; };
ObjectDisplayList* ObjectsInClouds( void
) { return &objectLists[2].displayList; };
ObjectDisplayList* ObjectsAboveClouds(
void ) { return &objectLists[3].displayList; };
ObjectDisplayList* ObjectsAboveRoof( void
) { return &objectLists[4].displayList; };
Texture SunTexture,
GreenSunTexture;
Texture
MoonTexture, GreenMoonTexture, OriginalMoonTexture;
protected:
int lastDay;
// Used to decide when the moon needs updating
class LocalWeather *weather;
int nObjectLists;
ObjectListRecord *objectLists;
ObjectDisplayList cloudList;
float cloudOpacity; //
0.0 for no effect, 1.0 when inCloud is TRUE
Tcolor cloudColor;
float terrainFloor;
float terrainCeiling;
float cloudBase;
float cloudTops;
float roofHeight;
protected:
void SetupTextures(void);
void ReleaseTextures(void);
static void TimeUpdateCallback(
void *self );
};