FIFE  2008.0
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
object.cpp
1 /***************************************************************************
2  * Copyright (C) 2005-2008 by the FIFE team *
3  * http://www.fifengine.de *
4  * This file is part of FIFE. *
5  * *
6  * FIFE is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Lesser General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2.1 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
14  * Lesser General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Lesser General Public *
17  * License along with this library; if not, write to the *
18  * Free Software Foundation, Inc., *
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
20  ***************************************************************************/
21 
22 // Standard C++ library includes
23 
24 // 3rd party library includes
25 
26 // FIFE includes
27 // These includes are split up in two parts, separated by one empty line
28 // First block: files included from the FIFE root src directory
29 // Second block: files included from the same folder
30 #include "util/base/exception.h"
31 
32 #include "object.h"
33 #include "action.h"
34 #include "abstractpather.h"
35 
36 namespace FIFE {
37  Object::Object(const std::string& identifier, const std::string& name_space, Object* inherited):
38  m_id(identifier),
39  m_namespace(name_space),
40  m_inherited(inherited),
41  m_actions(NULL),
42  m_blocking(false),
43  m_static(false),
44  m_pather(NULL),
45  m_visual(NULL),
46  m_defaultaction(NULL) {
47  }
48 
50  if (m_actions) {
51  std::map<std::string, Action*>::const_iterator i(m_actions->begin());
52  while (i != m_actions->end()) {
53  delete i->second;
54  ++i;
55  }
56  delete m_actions;
57  }
58  delete m_visual;
59  }
60 
61  Action* Object::createAction(const std::string& identifier, bool is_default) {
62  if (!m_actions) {
63  m_actions = new std::map<std::string, Action*>;
64  }
65 
66  std::map<std::string, Action*>::const_iterator it = m_actions->begin();
67  for(; it != m_actions->end(); ++it) {
68  if(identifier == it->second->getId()) {
69  throw NameClash(identifier);
70  }
71  }
72 
73  Action* a = getAction(identifier);
74  if (!a) {
75  a = new Action(identifier);
76  (*m_actions)[identifier] = a;
77  if (is_default || (!m_defaultaction)) {
78  m_defaultaction = a;
79  }
80  }
81  return a;
82  }
83 
84  Action* Object::getAction(const std::string& identifier) const {
85  std::map<std::string, Action*>::const_iterator i;
86  if (m_actions) {
87  i = m_actions->find(identifier);
88  }
89  if ((!m_actions) || (i == m_actions->end())) {
90  if (m_inherited) {
91  return m_inherited->getAction(identifier);
92  }
93  return NULL;
94  }
95  return i->second;
96  }
97 
98  std::list<std::string> Object::getActionIds() const {
99  std::list<std::string> action_ids;
100  action_ids.clear();
101  if (m_actions) {
102  std::map<std::string, Action*>::const_iterator actions_it = m_actions->begin();
103  for(; actions_it != m_actions->end(); ++actions_it) {
104  action_ids.push_back(actions_it->first);
105  }
106  }
107  return action_ids;
108  }
109 
110  void Object::setPather(AbstractPather* pather) {
111  m_pather = pather;
112  }
113 
114  bool Object::isBlocking() const {
115  if (m_blocking) {
116  return true;
117  }
118  if (m_inherited) {
119  return m_inherited->isBlocking();
120  }
121  return false;
122  }
123 
124  bool Object::isStatic() const {
125  if (m_static) {
126  return true;
127  }
128  if (m_inherited) {
129  return m_inherited->isStatic();
130  }
131  return false;
132  }
133 
134  bool Object::operator==(const Object& obj) const {
135  return m_id == obj.getId() && m_namespace == obj.getNamespace();
136  }
137 
138  bool Object::operator!=(const Object& obj) const {
139  return m_id != obj.getId() || m_namespace != obj.getNamespace();
140  }
141 
142 }