diff options
author | Aki <please@ignore.pl> | 2022-04-01 21:23:39 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-04-01 21:23:39 +0200 |
commit | 3c487c5cd69c53d6fea948643c0a76df03516605 (patch) | |
tree | 72730c7b8b26a5ef8fc9a987ec4c16129efd5aac /StarsEx/Light.h | |
parent | 8f353abd0bfe18baddd8a8250ab7c4f2d1c83a6e (diff) | |
download | starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.zip starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.gz starshatter-3c487c5cd69c53d6fea948643c0a76df03516605.tar.bz2 |
Moved Stars45 to StarsEx
Diffstat (limited to 'StarsEx/Light.h')
-rw-r--r-- | StarsEx/Light.h | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/StarsEx/Light.h b/StarsEx/Light.h new file mode 100644 index 0000000..2f42e91 --- /dev/null +++ b/StarsEx/Light.h @@ -0,0 +1,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 + |