/* 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 ======== Level of Detail Manger class */ #ifndef DetailSet_h #define DetailSet_h #include "Types.h" #include "Geometry.h" #include "Graphic.h" #include "List.h" // +--------------------------------------------------------------------+ class Sim; class SimRegion; // +--------------------------------------------------------------------+ class DetailSet { public: enum { MAX_DETAIL = 4 }; DetailSet(); virtual ~DetailSet(); int DefineLevel(double r, Graphic* g=0, Point* offset=0, Point* spin=0); void AddToLevel(int level, Graphic* g, Point* offset=0, Point* spin=0); int NumLevels() const { return levels; } int NumModels(int level) const; void ExecFrame(double seconds); void SetLocation(SimRegion* rgn, const Point& loc); static void SetReference(SimRegion* rgn, const Point& loc); int GetDetailLevel(); Graphic* GetRep(int level, int n=0); Point GetOffset(int level, int n=0); Point GetSpin(int level, int n=0); void Destroy(); protected: List rep[MAX_DETAIL]; List off[MAX_DETAIL]; double rad[MAX_DETAIL]; List spin; List rate; int index; int levels; SimRegion* rgn; Point loc; static SimRegion* ref_rgn; static Point ref_loc; }; // +--------------------------------------------------------------------+ #endif // DetailSet_h