code cleanup: make header defines more consistent, JOYSENSOR header guard had a typo...
[blender-staging.git] / source / gameengine / Expressions / VectorValue.h
1 /*
2  * VectorValue.h: interface for the CVectorValue class.
3  * Copyright (c) 1996-2000 Erwin Coumans <coockie@acm.org>
4  *
5  * Permission to use, copy, modify, distribute and sell this software
6  * and its documentation for any purpose is hereby granted without fee,
7  * provided that the above copyright notice appear in all copies and
8  * that both that copyright notice and this permission notice appear
9  * in supporting documentation.  Erwin Coumans makes no
10  * representations about the suitability of this software for any
11  * purpose.  It is provided "as is" without express or implied warranty.
12  *
13  */
14
15 /** \file VectorValue.h
16  *  \ingroup expressions
17  */
18
19 #ifndef __VECTORVALUE_H__
20 #define __VECTORVALUE_H__
21
22 #include "Value.h"
23
24 #define KX_X 0
25 #define KX_Y 1
26 #define KX_Z 2
27
28
29 class CVectorValue : public CPropValue  
30 {
31         //PLUGIN_DECLARE_SERIAL(CVectorValue,CValue)
32
33 public:
34         //void Transform(rcMatrix4x4 mat);
35         virtual void SetValue(CValue* newval);
36         void SetVector(double newvec[]);
37         void Configure(CValue* menuvalue);
38         virtual double* GetVector3(bool bGetTransformedVec=false);
39         virtual double          GetNumber();
40         
41         CValue*         Calc(VALUE_OPERATOR op, CValue *val) {
42                 return val->CalcFinal(VALUE_VECTOR_TYPE, op, this);
43         }
44         
45         CValue*         CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
46         
47         
48         CVectorValue(double vec[],const char *name,AllocationTYPE alloctype=CValue::HEAPVALUE);
49         CVectorValue() {};
50
51         CVectorValue(double vec[],AllocationTYPE alloctype=CValue::HEAPVALUE);
52         CVectorValue(float x,float y,float z, AllocationTYPE alloctype = CValue::HEAPVALUE);
53         virtual ~CVectorValue();
54         //virtual bool ExportT3D(File *txtfile,bool bNoName=false);
55         void AddConfigurationData(CValue* menuvalue);
56         
57
58
59         virtual CValue* GetReplica();
60         virtual const STR_String & GetText();
61
62 #if 0
63         void                    SnapPoint(float num,int snap)
64         {
65                 if (num > 0) num += ((float)snap / 2);
66                 else num -= ((float)snap / 2);
67                 num = (long)(((long)(num / snap)) * snap);
68         };
69
70         void SnapPosition(const double snapvec[])
71         {
72                 
73                 if (snapvec[KX_X] >= 1)
74                         SnapPoint(m_vec[KX_X],snapvec[KX_X]);
75                 if (snapvec[KX_Y] >= 1)
76                         SnapPoint(m_vec[KX_Y],snapvec[KX_Y]);
77                 if (snapvec[KX_Z] >= 1)
78                         SnapPoint(m_vec[KX_Z],snapvec[KX_Z]);
79                         
80         }
81 #endif
82
83 protected:
84         double                          m_vec[3];
85         double                          m_transformedvec[3];
86
87
88 #ifdef WITH_CXX_GUARDEDALLOC
89         MEM_CXX_CLASS_ALLOC_FUNCS("GE:CVectorValue")
90 #endif
91 };
92
93 #endif  /* __VECTORVALUE_H__ */