Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/util/object_manager.cc @ 4311

Last change on this file since 4311 was 4311, checked in by patrick, 20 years ago

orxonox/trunk: f*g object manager is hard to get done right, trying it differently

File size: 2.8 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: Patrick Boenzli
13*/
14
15#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_OBJECT_MANAGER
16
17#include "object_manager.h"
18#include "garbage_collector.h"
19#include "list.h"
20
21#include "projectile.h"
22
23using namespace std;
24
25
26/**
27   \brief standard constructor
28*/
29ObjectManager::ObjectManager () 
30{
31  this->setClassName ("ObjectManager");
32 
33  //this->managedObjectList = new BaseObject*[CL_NUMBER];
34  this->managedObjectList = new tList<BaseObject>*[CL_NUMBER];
35
36  this->garbageCollector = GarbageCollector::getInstance();
37}
38
39/**
40   \brief the singleton reference to this class
41*/
42ObjectManager* ObjectManager::singletonRef = NULL;
43
44/**
45   \returns a Pointer to this Class
46*/
47ObjectManager* ObjectManager::getInstance(void)
48{
49  if (!ObjectManager::singletonRef)
50    ObjectManager::singletonRef = new ObjectManager();
51  return ObjectManager::singletonRef;
52}
53
54
55/**
56   \brief standard deconstructor
57
58*/
59ObjectManager::~ObjectManager () 
60{
61  ObjectManager::singletonRef = NULL;
62}
63
64
65void ObjectManager::cache(classList index, int number, Projectile* copyObject)
66{
67  //this->managedObjectList[index] = new BaseObject[number];
68  this->managedObjectList[index] = new tList<BaseObject>();
69  for(int i = 0; i < number; ++i)
70    {
71      this->managedObjectList[index]->add(new Projectile(*copyObject));
72    }
73}
74
75
76void ObjectManager::addToDeadList(classList index, BaseObject* object)
77{
78  if( likely(this->managedObjectList[index] != NULL))
79    this->managedObjectList[index]->add(object);
80  else
81    PRINTF(0)(" Error: unable to add object to the list nr. %i: no list initialized - ignoring\n", index);
82}
83
84
85BaseObject* ObjectManager::getFromDeadList(classList index, int number)
86{
87  if( likely(this->managedObjectList[index] != NULL))
88    {
89      BaseObject* obj = this->managedObjectList[index]->firstElement();
90      this->managedObjectList[index]->remove(obj);
91      return obj;
92    }
93  else
94    PRINTF(0)(" Error: unable to get object from the list nr. %i: no elements initialized - ignoring\n", index);
95}
96
97
98void ObjectManager::debug()
99{
100  PRINT(0)("\n==========================| ObjectManager::debug() |===\n");
101  PRINT(0)("=  Number of registerable classes: %i\n", CL_NUMBER ); 
102  PRINT(0)("=  Currently cached objects: \n");
103  for(int i = 0; i < CL_NUMBER; ++i)
104    {
105      if(this->managedObjectList[i] != NULL)
106        PRINT(0)("=   o Class Nr. %i has cached %i object(s)\n", i, this->managedObjectList[i]->getSize());
107      else
108        PRINT(0)("=   o Class Nr. %i has cached 0 object(s)\n", i);
109    }
110  PRINT(0)("=======================================================\n");
111}
Note: See TracBrowser for help on using the repository browser.