Initial revision
[blender.git] / source / gameengine / Expressions / IfExpr.cpp
1 // IfExpr.cpp: implementation of the CIfExpr class.
2 /*
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 #include "IfExpr.h"
16 #include "EmptyValue.h"
17 #include "ErrorValue.h"
18
19
20 //////////////////////////////////////////////////////////////////////
21 // Construction/Destruction
22 //////////////////////////////////////////////////////////////////////
23
24
25 CIfExpr::CIfExpr()
26 {
27 }
28
29
30
31 CIfExpr::CIfExpr(CExpression *guard, CExpression *e1, CExpression *e2)
32 /*
33 pre:
34 effect: constructs an CifExpr-object corresponding to IF(guard, e1, e2)
35 */
36 {
37         m_guard = guard;
38         m_e1 = e1;
39         m_e2 = e2;
40 }
41
42
43
44 CIfExpr::~CIfExpr()
45 /*
46 pre:
47 effect: dereferences the object
48 */
49 {
50         if (m_guard)
51                 m_guard->Release();
52
53         if (m_e1)
54                 m_e1->Release();
55
56         if (m_e2)
57                 m_e2->Release();
58 }
59
60
61
62 CValue* CIfExpr::Calculate()
63 /*
64 pre:
65 ret: a new object containing the value of m_e1 if m_guard is a boolean TRUE
66          a new object containing the value of m_e2 if m_guard is a boolean FALSE
67          an new errorvalue if m_guard is not a boolean
68 */
69 {
70         CValue *guardval;
71         guardval = m_guard->Calculate();
72         STR_String text = guardval->GetText();
73         guardval->Release();
74
75         if (text == STR_String("TRUE"))
76         {
77                 return m_e1->Calculate();
78         }
79         else if (text == STR_String("FALSE"))
80         {
81                 return m_e2->Calculate();
82         }
83         else
84         {
85                 return new CErrorValue("Guard should be of boolean type");
86         }
87 }
88
89
90
91 bool CIfExpr::MergeExpression(CExpression *otherexpr)
92 {
93         assertd(false);
94         return false;
95 }
96
97
98
99 bool CIfExpr::IsInside(float x,float y,float z,bool bBorderInclude)
100 {
101         assertd(false);
102         return false;
103 }
104         
105
106
107 bool CIfExpr::NeedsRecalculated() 
108 {
109         return  (m_guard->NeedsRecalculated() ||
110                 m_e1->NeedsRecalculated() ||
111                 m_e2->NeedsRecalculated());
112 }
113
114
115
116 CExpression* CIfExpr::CheckLink(std::vector<CBrokenLinkInfo*>& brokenlinks)
117 {
118         assertd(false);
119         return NULL;
120 }
121
122
123
124 void CIfExpr::ClearModified()
125 {
126         assertd(false);
127 }
128
129
130
131 void CIfExpr::BroadcastOperators(VALUE_OPERATOR op)
132 {
133         assertd(false);
134 }
135
136
137
138 unsigned char CIfExpr::GetExpressionID()
139 {
140         return CIFEXPRESSIONID;
141 }