Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/lang/base_object.cc @ 6278

Last change on this file since 6278 was 6278, checked in by bensch, 18 years ago

trunk: christmas commit…. fixed baseObject

File size: 4.9 KB
Line 
1
2
3/*
4   orxonox - the future of 3D-vertical-scrollers
5
6   Copyright (C) 2004 orx
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2, or (at your option)
11   any later version.
12
13   ### File Specific:
14   main-programmer: Patrick Boenzli
15   co-programmer: ...
16*/
17#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_BASE
18
19#include "base_object.h"
20
21#include "load_param.h"
22#include "compiler.h"
23#include "class_list.h"
24
25using namespace std;
26
27
28/**
29 *  sets the name from a LoadXML-Element
30 * @param root the element to load from
31 */
32BaseObject::BaseObject(const TiXmlElement* root)
33{
34  this->className = "BaseObject";
35  this->classID = CL_BASE_OBJECT;
36
37  this->objectName = NULL;
38
39  if (root)
40    this->loadParams(root);
41
42//  ClassList::addToClassList(this, this->classID, "BaseObject");
43}
44
45/**
46 *  standard deconstructor
47*/
48BaseObject::~BaseObject ()
49{
50  ClassList::removeFromClassList(this);
51
52  //  delete []this->className;
53  if (this->objectName)
54    delete[] this->objectName;
55}
56
57/**
58 *  loads parameters
59 * @param root the element to load from
60 */
61void BaseObject::loadParams(const TiXmlElement* root)
62{
63  // name setup
64  LoadParam(root, "name", this, BaseObject, setName)
65      .describe("the Name of the Object.");
66}
67
68/**
69 *  sets the class identifiers
70 * @param id a number for the class from class_id.h enumeration
71 * @param className the class name
72*/
73void BaseObject::setClassID(ClassID classID, const char* className)
74{
75  //  printf("%s(0x%.8X)->%s(0x%.8X)\n", this->className, this->classID, className, classID);
76  assert (!(this->classID & classID));
77
78  this->classID |= (long)classID;
79  this->className = className;
80
81  ClassList::addToClassList(this, classID, this->classID, className);
82}
83
84/**
85 * @briefbrief set the name of the Object
86 */
87void BaseObject::setName (const char* objectName)
88{
89  if (this->objectName)
90    delete[] this->objectName;
91  if (objectName != NULL)
92  {
93    this->objectName = new char[strlen(objectName)+1];
94    strcpy(this->objectName, objectName);
95  }
96  else
97    this->objectName = NULL;
98}
99
100
101/**
102 *  checks if the class is a classID
103 * @param classID the Identifier to check for
104 * @returns true if it is, false otherwise
105*/
106bool BaseObject::isA (ClassID classID) const
107{
108  // if classID is a derivable object from a SUPERCLASS
109  if (classID & CL_MASK_SUPER_CLASS)
110  {
111    if( likely(this->classID & classID))
112      return true;
113  }
114  // if classID is a SubSuperClass, and
115  else if (classID & CL_MASK_SUBSUPER_CLASS)
116  {
117    if (likely(((this->classID & CL_MASK_SUBSUPER_CLASS_IDA) == (this->classID & CL_MASK_SUBSUPER_CLASS_IDA)) &&
118        this->classID & classID & CL_MASK_SUBSUPER_CLASS_IDB))
119      return true;
120  }
121  // if classID is a LOWLEVEL-class
122  else
123  {
124    if( likely((this->classID & CL_MASK_LOWLEVEL_CLASS) == classID))
125      return true;
126  }
127  return false;
128}
129
130/**
131 *  checks if the class is a classID
132 * @param classID the Identifier to check for
133 * @returns true if it is, false otherwise
134 */
135bool BaseObject::isA (const char* className) const
136{
137  ClassID classID = ClassList::StringToID(className);
138  if (classID != CL_NULL)
139    return this->isA(classID);
140}
141
142/**
143 * compares the ObjectName with an external name
144 * @param objectName: the name to check.
145 * @returns true on match, false otherwise.
146 */
147bool BaseObject::operator==(const char* objectName)
148{
149  if (likely(this->objectName != NULL && objectName != NULL))
150    return (strcmp(this->objectName, objectName)) ? false : true;
151}
152
153
154/**
155 *  displays everything this class is
156 * @TODO REIMPLEMENT WITH SENSE.
157 */
158void BaseObject::whatIs() const
159{
160  PRINT(0)("object %s of class %s: ", this->getName(), this->getClassName());
161  if ((this->classID & CL_MASK_SINGLETON) == CL_MASK_SINGLETON)
162    PRINT(0)("is a Singleton-Class ");
163  if (this->classID & CL_MASK_SUPER_CLASS)
164  {
165    PRINT(0)(" ->is a derived from the following superclasses:");
166    if (this->isA(CL_BASE_OBJECT))
167      PRINT(0)(" =BaseObject=");
168    if (this->isA(CL_PARENT_NODE))
169      PRINT(0)(" =PNode=");
170    if (this->isA(CL_WORLD_ENTITY))
171      PRINT(0)(" =WorldEntity=");
172    if (this->isA(CL_PHYSICS_INTERFACE))
173      PRINT(0)(" =PhysicsInterface=");
174    if (this->isA(CL_EVENT_LISTENER))
175      PRINT(0)(" =EventListener=");
176    if (this->isA(CL_STORY_ENTITY))
177      PRINT(0)(" =StoryEntity=");
178    if (this->isA(CL_ELEMENT_2D))
179      PRINT(0)(" =Element2D=");
180    PRINT(0)("\n");
181  }
182  // subsuper-classes
183  if (this->classID & CL_MASK_SUBSUPER_CLASS)
184  {
185    PRINT(0)(" ->further derivations: ");
186    if (this->isA(CL_PLAYER))
187      PRINT(0)(" -Player-");
188    if (this->isA(CL_NPC))
189      PRINT(0)(" -NPC-");
190    if (this->isA(CL_POWER_UP))
191      PRINT(0)(" -PowerUp-");
192    if (this->isA(CL_FIELD))
193      PRINT(0)(" -Field-");
194    if (this->isA(CL_PROJECTILE))
195      PRINT(0)(" -Projectile-");
196    if (this->isA(CL_WEAPON))
197      PRINT(0)(" -Weapon-");
198    PRINT(0)("\n");
199}
200}
Note: See TracBrowser for help on using the repository browser.