summaryrefslogtreecommitdiff
path: root/common/light.h
diff options
context:
space:
mode:
authorleo2000-11-09 17:06:45 +0000
committerleo2000-11-09 17:06:45 +0000
commitaf9983f08feeb36cf224065085cf9e19e0fbf58c (patch)
treed4bf7e95e50194d3bc53a3c0e4b3c5dba7b3af80 /common/light.h
parent8a90b268f62dbd8a3715be54d3292bc95b89845a (diff)
Implementation of light classes
git-svn-id: http://svn.leocad.org/trunk@153 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common/light.h')
-rw-r--r--common/light.h115
1 files changed, 80 insertions, 35 deletions
diff --git a/common/light.h b/common/light.h
index e110799..f40118d 100644
--- a/common/light.h
+++ b/common/light.h
@@ -1,18 +1,29 @@
#ifndef _LIGHT_H_
#define _LIGHT_H_
+#include "opengl.h"
#include "object.h"
-#define LC_LIGHT_HIDDEN 0x01
-#define LC_LIGHT_SELECTED 0x02
-#define LC_LIGHT_FOCUSED 0x04
+#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
+#define LC_LIGHT_ENABLED 0x20
class Light;
class LightTarget;
+typedef enum { LK_POSITION, LK_TARGET, LK_COLOR } LK_TYPES;
+
+typedef struct LC_LIGHT_KEY
+{
+ unsigned short time;
+ float param[3];
+ unsigned char type;
+ LC_LIGHT_KEY* next;
+} LC_LIGHT_KEY;
+
class LightTarget : public Object
{
public:
@@ -34,40 +45,74 @@ class LightTarget : public Object
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);
+ public:
+ Light (float px, float py, float pz);
+ Light (float px, float py, float pz, float tx, float ty, float tz);
+ virtual ~Light ();
-protected:
- void RemoveKeys();
- // BoundingBox m_BoundingBox;
- // BoundingBox m_TargetBoundingBox;
- unsigned char m_nState;
- char m_strName[81];
+
+
+ public:
+ 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; }
+ bool IsEyeSelected()
+ { return (m_nState & LC_LIGHT_SELECTED) != 0; }
+ bool IsTargetSelected()
+ { return (m_nState & 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 GetTargetPos (float *pos) const
+ { memcpy (pos, m_fTarget, sizeof (float[3])); }
+
+ void Render (float fLineWidth);
+ void MinIntersectDist (LC_CLICKLINE* Line);
+ void UpdatePosition (unsigned short nTime, bool bAnimation);
+ void CalculatePosition (unsigned short nTime, bool bAnimation, float pos[3], float target[3], float color[3]);
+ void Move (unsigned short nTime, bool bAnimation, bool bAddKey, float dx, float dy, float dz);
+ void ChangeKey (unsigned short nTime, bool bAnimation, bool bAddKey, float param[3], unsigned char nKeyType);
+ void Setup (int index);
+
+protected:
+ void RemoveKeys ();
+ void Initialize ();
+
+ // Camera target
+ LightTarget* m_pTarget;
+
+ // Position
+ LC_LIGHT_KEY* m_pAnimationKeys;
+ LC_LIGHT_KEY* m_pInstructionKeys;
+
+ // Attributes
+ float m_fCone;
+ unsigned char m_nState;
+ char m_strName[81];
+ bool m_bEnabled;
+
+ GLuint m_nList;
+ static GLuint m_nSphereList;
+ static GLuint m_nTargetList;
+
+ // Temporary position
+ float m_fPos[4];
+ float m_fTarget[4];
+ float m_fColor[4];
};
#endif // _LIGHT_H_