1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
/* Starshatter: The Open Source Project
Copyright (c) 2021-2022, 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<Graphic> rep[MAX_DETAIL];
List<Point> off[MAX_DETAIL];
double rad[MAX_DETAIL];
List<Point> spin;
List<Point> rate;
int index;
int levels;
SimRegion* rgn;
Point loc;
static SimRegion* ref_rgn;
static Point ref_loc;
};
// +--------------------------------------------------------------------+
#endif // DetailSet_h
|