Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/weaponSystem/src/world_entities/world_entity.cc @ 4877

Last change on this file since 4877 was 4877, checked in by bensch, 19 years ago

orxonox/branches/weaponSystem: cleanup WorldEntity and Player (or at least started cleaning up)

File size: 5.1 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: Christian Meyer
16*/
17
18#include <iostream>
19
20#include "world_entity.h"
21#include "list.h"
22#include "vector.h"
23#include "obb_tree.h"
24
25using namespace std;
26
27/**
28 *  Loads the WordEntity-specific Part of any derived Class
29*/
30WorldEntity::WorldEntity(const TiXmlElement* root)
31{
32  this->setClassID(CL_WORLD_ENTITY, "WorldEntity");
33
34  this->model = NULL;
35  this->obbTree = NULL;
36
37  if (root)
38    this->loadParams(root);
39
40  this->setVisibiliy(true);
41}
42
43/**
44 *  standard destructor
45*/
46WorldEntity::~WorldEntity ()
47{
48  // if( collisioncluster != NULL) delete collisioncluster;
49  if (this->model)
50    ResourceManager::getInstance()->unload(this->model);
51  if( this->obbTree)
52    delete this->obbTree;
53}
54
55void WorldEntity::loadParams(const TiXmlElement* root)
56{
57  static_cast<PNode*>(this)->loadParams(root);
58  // Model Loading
59  LoadParam<WorldEntity>(root, "model", this, &WorldEntity::loadModel)
60    .describe("the fileName of the model, that should be loaded onto this world-entity. (must be relative to the data-dir)") ;
61}
62
63/**
64 *  loads a Model onto a WorldEntity
65 * @param fileName the name of the model to load
66*/
67void WorldEntity::loadModel(const char* fileName)
68{
69  if (this->model)
70    ResourceManager::getInstance()->unload(this->model, RP_LEVEL);
71  if (fileName != NULL)
72  {
73    PRINTF(4)("loading %s\n", fileName);
74    this->model = (Model*)ResourceManager::getInstance()->load(fileName, OBJ, RP_CAMPAIGN);
75  }
76  else
77    this->model = NULL;
78}
79
80/**
81 *  sets the character attributes of a worldentity
82 * @param character attributes
83
84   these attributes don't have to be set, only use them, if you need them
85*/
86void WorldEntity::setCharacterAttributes(CharacterAttributes* charAttr)
87{}
88
89
90/**
91 *  gets the Character attributes of this worldentity
92 * @returns character attributes
93*/
94CharacterAttributes* WorldEntity::getCharacterAttributes()
95{}
96
97
98/**
99 *  set the WorldEntity's collision hull
100 * @param newhull: a pointer to a completely assembled CollisionCluster
101
102   Any previously assigned collision hull will be deleted on reassignment
103*/
104/*
105void WorldEntity::setCollision (CollisionCluster* newhull)
106{
107  if( newhull == NULL) return;
108  if( collisioncluster != NULL) delete collisioncluster;
109  collisioncluster = newhull;
110}
111*/
112
113/**
114 *  this function is called, when two entities collide
115 * @param entity: the world entity with whom it collides
116
117   Implement behaviour like damage application or other miscellaneous collision stuff in this function
118*/
119void WorldEntity::collideWith(WorldEntity* entity)
120{
121  this->obbTree->collideWith(entity->obbTree, (PNode*)this, (PNode*)entity);
122}
123
124
125/**
126 *  this function is called, when the ship is hit by a waepon
127 * @param weapon: the laser/rocket/shoot that hits.
128 * @param loc: place where it is hit
129
130   calculate the damage depending
131*/
132void WorldEntity::hit(WorldEntity* weapon, Vector* loc) {}
133
134
135/**
136 *  this is called immediately after the Entity has been constructed and initialized
137
138   Put any initialisation code that requires knowledge of location (placement if the Entity is free) and owner of the entity here.
139   DO NOT place such code in the constructor, those variables are set AFTER the entity is constucted.
140*/
141void WorldEntity::postSpawn ()
142{
143}
144
145
146/**
147 *  this method is called by the world if the WorldEntity leaves valid gamespace
148
149   For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a
150   place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy).
151*/
152void WorldEntity::leftWorld ()
153{
154}
155
156
157/**
158 *  this method is called every frame
159 * @param time: the time in seconds that has passed since the last tick
160
161   Handle all stuff that should update with time inside this method (movement, animation, etc.)
162*/
163void WorldEntity::tick(float time)
164{
165}
166
167/**
168 *  the entity is drawn onto the screen with this function
169
170   This is a central function of an entity: call it to let the entity painted to the screen. Just override this function with whatever you want to be drawn.
171*/
172void WorldEntity::draw()
173{
174  glMatrixMode(GL_MODELVIEW);
175  glPushMatrix();
176  float matrix[4][4];
177
178  /* translate */
179  glTranslatef (this->getAbsCoor ().x,
180                this->getAbsCoor ().y,
181                this->getAbsCoor ().z);
182  /* rotate */
183  this->getAbsDir ().matrix (matrix);
184  glMultMatrixf((float*)matrix);
185
186  if (this->model)
187    this->model->draw();
188  glPopMatrix();
189}
190
191
192void WorldEntity::drawBVTree(int depth, int drawMode)
193{
194  glMatrixMode(GL_MODELVIEW);
195  glPushMatrix();
196  float matrix[4][4];
197
198  /* translate */
199  glTranslatef (this->getAbsCoor ().x,
200                this->getAbsCoor ().y,
201                this->getAbsCoor ().z);
202  /* rotate */
203  this->getAbsDir ().matrix (matrix);
204  glMultMatrixf((float*)matrix);
205
206  if (this->obbTree)
207    this->obbTree->drawBV(depth, drawMode);
208  glPopMatrix();
209}
Note: See TracBrowser for help on using the repository browser.