summaryrefslogtreecommitdiff
path: root/common/light.h
blob: e11079935045bdf4142f1ff460955f595c736592 (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
#ifndef _LIGHT_H_
#define _LIGHT_H_

#include "object.h"

#define LC_LIGHT_HIDDEN				0x01
#define LC_LIGHT_SELECTED			0x02
#define LC_LIGHT_FOCUSED			0x04
#define LC_LIGHT_TARGET_SELECTED	0x08
#define LC_LIGHT_TARGET_FOCUSED		0x10
#define LC_LIGHT_ENABLED			0x20

class Light;
class LightTarget;

class LightTarget : public Object
{
 public:
  LightTarget (Light *pParent);
  ~LightTarget ();

 public:
  void MinIntersectDist (LC_CLICKLINE* pLine);

  Light* GetParent () const
    { return m_pParent; }

 protected:
  Light* m_pParent;

  friend class Light; // FIXME: needed for BoundingBoxCalculate ()
  // remove and use UpdatePosition instead
};

class Light : public Object
{
public:
	Light();
	~Light();

	Light* m_pNext;

	bool IsVisible()
		{ return (m_nState & LC_LIGHT_HIDDEN) == 0; } 
	bool IsSelected()
		{ return (m_nState & (LC_LIGHT_SELECTED|LC_LIGHT_TARGET_SELECTED)) != 0; } 
	void Select()
		{ m_nState |= (LC_LIGHT_SELECTED|LC_LIGHT_TARGET_SELECTED); } 
	void UnSelect()
		{ m_nState &= ~(LC_LIGHT_SELECTED|LC_LIGHT_FOCUSED|LC_LIGHT_TARGET_SELECTED|LC_LIGHT_TARGET_FOCUSED); } 
	void UnFocus()
		{ m_nState &= ~(LC_LIGHT_FOCUSED|LC_LIGHT_TARGET_FOCUSED); } 
	void FocusEye()
		{ m_nState |= (LC_LIGHT_FOCUSED|LC_LIGHT_SELECTED); } 
	void FocusTarget()
		{ m_nState |= (LC_LIGHT_TARGET_FOCUSED|LC_LIGHT_TARGET_SELECTED); } 
	const char* GetName()
		{ return m_strName; }

	void MinIntersectDist(LC_CLICKLINE* Line);
	void UpdatePosition(unsigned short nTime, bool bAnimation);

protected:
	void RemoveKeys();

	//	BoundingBox m_BoundingBox;
	//	BoundingBox m_TargetBoundingBox;

	unsigned char m_nState;
	char m_strName[81];
};

#endif // _LIGHT_H_