rename and negate DISABLE_PYTHON --> WITH_PYTHON
[blender.git] / source / gameengine / GameLogic / SCA_2DFilterActuator.cpp
1 /**
2  * SCA_2DFilterActuator.cpp
3  *
4  * $Id$
5  *
6  * ***** BEGIN GPL LICENSE BLOCK *****
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 #include "SCA_IActuator.h"
27 #include "SCA_2DFilterActuator.h"
28
29 #include <iostream>
30
31 SCA_2DFilterActuator::~SCA_2DFilterActuator()
32 {
33 }
34
35 SCA_2DFilterActuator::SCA_2DFilterActuator(
36         SCA_IObject *gameobj, 
37         RAS_2DFilterManager::RAS_2DFILTER_MODE type,
38                 short flag,
39                 float float_arg,
40                 int int_arg,
41                 RAS_IRasterizer* rasterizer,
42                 SCA_IScene* scene)
43     : SCA_IActuator(gameobj, KX_ACT_2DFILTER),
44      m_type(type),
45          m_disableMotionBlur(flag),
46          m_float_arg(float_arg),
47          m_int_arg(int_arg),
48          m_rasterizer(rasterizer),
49          m_scene(scene)
50 {
51         m_gameObj = NULL;
52         if(gameobj){
53                 m_propNames = gameobj->GetPropertyNames();
54                 m_gameObj = gameobj;
55         }
56 }
57
58
59 CValue* SCA_2DFilterActuator::GetReplica()
60 {
61     SCA_2DFilterActuator* replica = new SCA_2DFilterActuator(*this);
62     replica->ProcessReplica();
63     return replica;
64 }
65
66
67 bool SCA_2DFilterActuator::Update()
68 {
69         bool bNegativeEvent = IsNegativeEvent();
70         RemoveAllEvents();
71
72
73         if (bNegativeEvent)
74                 return false; // do nothing on negative events
75
76         if( m_type == RAS_2DFilterManager::RAS_2DFILTER_MOTIONBLUR )
77         {
78                 if(!m_disableMotionBlur)
79                         m_rasterizer->EnableMotionBlur(m_float_arg);
80                 else
81                         m_rasterizer->DisableMotionBlur();
82
83                 return false;
84         }
85         else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS)
86         {
87                 m_scene->Update2DFilter(m_propNames, m_gameObj, m_type, m_int_arg, m_shaderText);
88         }
89         // once the filter is in place, no need to update it again => disable the actuator
90     return false;
91 }
92
93
94 void SCA_2DFilterActuator::SetShaderText(const char *text)
95 {
96         m_shaderText = text;
97 }
98
99 #ifdef WITH_PYTHON
100
101 /* ------------------------------------------------------------------------- */
102 /* Python functions                                                          */
103 /* ------------------------------------------------------------------------- */
104
105 /* Integration hooks ------------------------------------------------------- */
106 PyTypeObject SCA_2DFilterActuator::Type = {
107         PyVarObject_HEAD_INIT(NULL, 0)
108         "SCA_2DFilterActuator",
109         sizeof(PyObjectPlus_Proxy),
110         0,
111         py_base_dealloc,
112         0,
113         0,
114         0,
115         0,
116         py_base_repr,
117         0,0,0,0,0,0,0,0,0,
118         Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
119         0,0,0,0,0,0,0,
120         Methods,
121         0,
122         0,
123         &SCA_IActuator::Type,
124         0,0,0,0,0,0,
125         py_base_new
126 };
127
128 PyMethodDef SCA_2DFilterActuator::Methods[] = {
129         /* add python functions to deal with m_msg... */
130     {NULL,NULL}
131 };
132
133 PyAttributeDef SCA_2DFilterActuator::Attributes[] = {
134         KX_PYATTRIBUTE_STRING_RW("shaderText", 0, 64000, false, SCA_2DFilterActuator, m_shaderText),
135         KX_PYATTRIBUTE_SHORT_RW("disableMotionBlur", 0, 1, true, SCA_2DFilterActuator, m_disableMotionBlur),
136         KX_PYATTRIBUTE_ENUM_RW("mode",RAS_2DFilterManager::RAS_2DFILTER_ENABLED,RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS,false,SCA_2DFilterActuator,m_type),
137         KX_PYATTRIBUTE_INT_RW("passNumber", 0, 100, true, SCA_2DFilterActuator, m_int_arg),
138         KX_PYATTRIBUTE_FLOAT_RW("value", 0.0, 100.0, SCA_2DFilterActuator, m_float_arg),
139         { NULL }        //Sentinel
140 };
141
142 #endif