/* Starshatter: The Open Source Project Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo OVERVIEW ======== A 3D Scene, basically a collection of 3D graphic objects */ #ifndef Scene_h #define Scene_h #include "Types.h" #include "Color.h" #include "Geometry.h" #include "List.h" // +--------------------------------------------------------------------+ class Graphic; class Light; // +--------------------------------------------------------------------+ class Scene { public: static const char* TYPENAME() { return "Scene"; } Scene(); virtual ~Scene(); void AddBackground(Graphic* g); void DelBackground(Graphic* g); void AddForeground(Graphic* g); void DelForeground(Graphic* g); void AddGraphic(Graphic* g); void DelGraphic(Graphic* g); void AddSprite(Graphic* g); void DelSprite(Graphic* g); void AddLight(Light* l); void DelLight(Light* l); List& Background() { return background; } List& Foreground() { return foreground; } List& Graphics() { return graphics; } List& Sprites() { return sprites; } List& Lights() { return lights; } Color Ambient() { return ambient; } void SetAmbient(Color a) { ambient = a; } virtual void Collect(); virtual bool IsLightObscured(const Point& obj_pos, const Point& light_pos, double obj_radius, Point* imp_point=0) const; protected: List background; List foreground; List graphics; List sprites; List lights; Color ambient; }; // +--------------------------------------------------------------------+ #endif // Scene_h