svn merge https://svn.blender.org/svnroot/bf-blender/trunk/blender -r20849:20855
[blender.git] / source / gameengine / Expressions / ConstExpr.cpp
1 // ConstExpr.cpp: implementation of the CConstExpr class.
2
3 /*
4  * Copyright (c) 1996-2000 Erwin Coumans <coockie@acm.org>
5  *
6  * Permission to use, copy, modify, distribute and sell this software
7  * and its documentation for any purpose is hereby granted without fee,
8  * provided that the above copyright notice appear in all copies and
9  * that both that copyright notice and this permission notice appear
10  * in supporting documentation.  Erwin Coumans makes no
11  * representations about the suitability of this software for any
12  * purpose.  It is provided "as is" without express or implied warranty.
13  *
14  */
15
16 #include "Value.h" // for precompiled header
17 #include "ConstExpr.h"
18 #include "VectorValue.h"
19
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 //////////////////////////////////////////////////////////////////////
25 // Construction/Destruction
26 //////////////////////////////////////////////////////////////////////
27
28 CConstExpr::CConstExpr()
29 {
30 }
31
32
33
34 CConstExpr::CConstExpr(CValue* constval) 
35 /*
36 pre:
37 effect: constructs a CConstExpr cointing the value constval
38 */
39 {
40         m_value = constval;
41 //      m_bModified=true;
42 }
43
44
45
46 CConstExpr::~CConstExpr()
47 /*
48 pre:
49 effect: deletes the object
50 */
51 {
52         if (m_value)
53                 m_value->Release();
54 }
55
56
57
58 unsigned char CConstExpr::GetExpressionID()
59 {
60         return CCONSTEXPRESSIONID;
61 }
62
63
64
65 CValue* CConstExpr::Calculate()
66 /*
67 pre:
68 ret: a new object containing the value of the stored CValue
69 */
70 {
71         return m_value->AddRef();
72 }
73
74
75
76 void CConstExpr::ClearModified()
77
78         if (m_value)
79         {
80                 m_value->SetModified(false);
81                 m_value->SetAffected(false);
82         }
83 }
84
85
86
87 double CConstExpr::GetNumber()
88 {
89         return -1;
90 }
91
92
93
94 bool CConstExpr::NeedsRecalculated()
95 {
96         return m_value->IsAffected(); // IsAffected is m_bModified OR m_bAffected !!!
97 }
98
99
100
101 CExpression* CConstExpr::CheckLink(std::vector<CBrokenLinkInfo*>& brokenlinks)
102 {
103 // parent checks if child is still usefull. 
104 // When for example it's value it's deleted flag set
105 // then release Value, and return NULL in case of constexpression
106 // else return this...
107
108         assertd(m_value);
109         if (m_value->IsReleaseRequested())
110         {
111                 AddRef(); //numchanges++;
112                 return Release();
113         }
114         else
115                 return this;
116 }
117
118
119
120 void CConstExpr::BroadcastOperators(VALUE_OPERATOR op)
121 {
122         assertd(m_value);
123         m_value->SetColorOperator(op);
124 }
125
126
127
128 bool CConstExpr::MergeExpression(CExpression *otherexpr)
129 {
130         assertd(false);
131         return false;
132 }