blob: 2f42e916db42a73cfb2a09213a3cfcae026c9ae7 (
plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
/* 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
========
Dynamic Light Source
*/
#ifndef Light_h
#define Light_h
#include "Geometry.h"
#include "Color.h"
// +--------------------------------------------------------------------+
#define LIGHT_DESTROY(x) if (x) { x->Destroy(); x = 0; }
// +--------------------------------------------------------------------+
class Scene;
// +--------------------------------------------------------------------+
class Light
{
public:
static const char* TYPENAME() { return "Light"; }
enum TYPES {
LIGHT_POINT = 1,
LIGHT_SPOT = 2,
LIGHT_DIRECTIONAL = 3,
LIGHT_FORCE_DWORD = 0x7fffffff
};
Light(float l=0.0f, float dl=1.0f, int time=-1);
virtual ~Light();
int operator == (const Light& l) const { return id == l.id; }
// operations
virtual void Update();
// accessors / mutators
int Identity() const { return id; }
Point Location() const { return loc; }
DWORD Type() const { return type; }
void SetType(DWORD t) { type = t; }
float Intensity() const { return light; }
void SetIntensity(float f) { light = f; }
Color GetColor() const { return color; }
void SetColor(Color c) { color = c; }
bool IsActive() const { return active; }
void SetActive(bool a) { active = a; }
bool CastsShadow() const { return shadow; }
void SetShadow(bool s) { shadow = s; }
bool IsPoint() const { return type == LIGHT_POINT; }
bool IsSpot() const { return type == LIGHT_SPOT; }
bool IsDirectional() const { return type == LIGHT_DIRECTIONAL; }
virtual void MoveTo(const Point& dst);
virtual void TranslateBy(const Point& ref);
virtual int Life() const { return life; }
virtual void Destroy();
virtual Scene* GetScene() const { return scene; }
virtual void SetScene(Scene*s) { scene = s; }
protected:
static int id_key;
int id;
DWORD type;
Point loc;
int life;
float light;
float dldt;
Color color;
bool active;
bool shadow;
Scene* scene;
};
// +--------------------------------------------------------------------+
#endif // Light_h
|