Merge of trunk into blender 2.5:
[blender.git] / source / gameengine / GameLogic / SCA_TimeEventManager.cpp
1 /**
2  * $Id$
3  * ***** BEGIN GPL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software Foundation,
17  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
18  *
19  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
20  * All rights reserved.
21  *
22  * The Original Code is: all of this file.
23  *
24  * Contributor(s): none yet.
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #ifdef HAVE_CONFIG_H
30 #include <config.h>
31 #endif
32
33 #ifdef WIN32
34
35 // This warning tells us about truncation of __long__ stl-generated names.
36 // It can occasionally cause DevStudio to have internal compiler warnings.
37 #pragma warning( disable : 4786 )     
38 #endif
39
40 #include "SCA_TimeEventManager.h"
41
42 #include "SCA_LogicManager.h"
43 #include "FloatValue.h"
44
45 SCA_TimeEventManager::SCA_TimeEventManager(SCA_LogicManager* logicmgr)
46 : SCA_EventManager(TIME_EVENTMGR)
47 {
48 }
49
50
51
52 SCA_TimeEventManager::~SCA_TimeEventManager()
53 {
54         for (vector<CValue*>::iterator it = m_timevalues.begin();
55                         !(it == m_timevalues.end()); it++)
56         {
57                 (*it)->Release();
58         }       
59 }
60
61
62
63 void SCA_TimeEventManager::RegisterSensor(SCA_ISensor* sensor)
64 {
65         // not yet
66 }
67
68 void SCA_TimeEventManager::RemoveSensor(SCA_ISensor* sensor)
69 {
70         // empty
71 }
72
73
74
75 void SCA_TimeEventManager::NextFrame(double curtime, double fixedtime)
76 {
77         if (m_timevalues.size() > 0 && fixedtime > 0.0)
78         {
79                 CFloatValue* floatval = new CFloatValue(curtime);
80                 
81                 // update sensors, but ... need deltatime !
82                 for (vector<CValue*>::iterator it = m_timevalues.begin();
83                 !(it == m_timevalues.end()); it++)
84                 {
85                         float newtime = (*it)->GetNumber() + fixedtime;
86                         floatval->SetFloat(newtime);
87                         (*it)->SetValue(floatval);
88                 }
89                 
90                 floatval->Release();
91         }
92 }
93
94
95
96 void SCA_TimeEventManager::AddTimeProperty(CValue* timeval)
97 {
98         timeval->AddRef();
99         m_timevalues.push_back(timeval);
100 }
101
102
103
104 void SCA_TimeEventManager::RemoveTimeProperty(CValue* timeval)
105 {
106         for (vector<CValue*>::iterator it = m_timevalues.begin();
107                         !(it == m_timevalues.end()); it++)
108         {
109                 if ((*it) == timeval)
110                 {
111                         this->m_timevalues.erase(it);
112                         timeval->Release();
113                         break;
114                 }
115         }
116 }