Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/branches/chris/src/world_entity.cc @ 2193

Last change on this file since 2193 was 2192, checked in by chris, 21 years ago

orxonox/branches/chris: it's now possible to add derivations of Track to the World; hit function declaration finalized; implemented splash damage function (World::explosion())

File size: 5.8 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 "stdincl.h"
22#include "collision.h"
23
24using namespace std;
25
26/**
27   \brief standard constructor
28   
29   Every derived contructor HAS to call the previous one supplying the isFree parameter. This is necessary to distunguish
30   between free and bound entities. The difference between them is simply the fact that the movement of a free entity is
31   not bound to the track of a world. Use this to implement projectile or effect classes that do not have to travel along the track.
32   To specify an entity to be free or bound set the default parameter in the declaration of the constructor.
33   Theoretically you should never have to call the constructor of an Entity directly, for it is called by the spawn() function of the World
34   class. So if you want to create a new entity at any time, call World::spawn(). It will handle everything that is necessary.
35*/
36WorldEntity::WorldEntity (bool isFree) : bFree(isFree)
37{
38        collisioncluster = NULL;
39        owner = NULL;
40}
41
42/**
43        \brief standard destructor
44*/
45WorldEntity::~WorldEntity ()
46{
47        if( collisioncluster != NULL) delete collisioncluster;
48}
49
50/**
51        \brief get the Location of the WorldEntity
52        \return a pointer to location
53*/
54Location* WorldEntity::get_location ()
55{
56        return &loc;
57}
58
59/**
60        \brief get the Placement of the WorldEntity
61        \return a pointer to placement
62*/
63Placement* WorldEntity::get_placement ()
64{
65        return &place;
66}
67
68/**
69        \brief query whether the WorldEntity in question is free
70        \return true if the WorldEntity is free or false if it isn't
71*/
72bool WorldEntity::isFree ()
73{
74  return bFree;
75}
76
77/**
78        \brief set the WorldEntity's collision hull
79        \param newhull: a pointer to a completely assembled CollisionCluster
80       
81        Any previously assigned collision hull will be deleted on reassignment
82*/
83void WorldEntity::set_collision (CollisionCluster* newhull)
84{
85        if( newhull == NULL) return;
86        if( collisioncluster != NULL) delete collisioncluster;
87        collisioncluster = newhull;
88}
89
90/**
91        \brief this method is called every frame
92        \param time: the time in seconds that has passed since the last tick
93       
94        Handle all stuff that should update with time inside this method (movement, animation, etc.)
95*/
96void WorldEntity::tick(float time) {}
97
98/**
99   \brief the entity is drawn onto the screen with this function
100
101   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.
102*/
103void WorldEntity::draw() {}
104
105/**
106        \brief this function is called, when two entities collide
107        \param other: the world entity with whom it collides
108        \param ownhitflags: flags to the CollisionCluster subsections that registered an impact
109        \param otherhitflags: flags to the CollisionCluster subsections of the other entity that registered an impact
110
111        Implement behaviour like damage application or other miscellaneous collision stuff in this function
112*/
113void WorldEntity::collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags) {}
114
115/**
116   \brief this function is called when the entity takes damage
117   \param dmg: a pointer to a structure containing information about the damage
118   \param instigator: the world entity that dealt the damage
119   \param hitflags: an integer full of flags signifying the places the enitiy had been hit
120   
121   You're free to do what you want with the damage you register here. This function is called from World::explosion() when
122   dealing splash damage, but can be called from virtually anywhere you want.
123*/
124void WorldEntity::hit (Damage* dmg, WorldEntity* instigator, Uint32 hitflags) {}
125
126/**
127   \brief this function is called when the entity is to be destroied
128   
129   This can be called, if eg. something realy bad happens :)
130*/
131void WorldEntity::destroy() {}
132
133
134/**
135        \brief basic initialisation for bound Entities
136*/
137void WorldEntity::init( Location* spawnloc, WorldEntity* spawnowner)
138{
139        loc = *spawnloc;
140        owner = spawnowner;
141}
142
143/**
144        \brief basic initialisation for free Entities
145*/
146void WorldEntity::init( Placement* spawnplc, WorldEntity* spawnowner)
147{
148        place = *spawnplc;
149        owner = spawnowner;
150}
151
152/**
153        \brief this is called immediately after the Entity has been constructed and initialized
154       
155        Put any initialisation code that requires knowledge of location (placement if the Entity is free) and owner of the entity here.
156        DO NOT place such code in the constructor, those variables are set AFTER the entity is constucted.
157*/
158void WorldEntity::post_spawn () {}
159
160/**
161        \brief this handles incoming command messages
162        \param cmd: a pointer to the incoming Command structure
163       
164        Put all code that handles Command messages here, this will mainly be called by the assigned CommandNode but can also be used
165        to send commands from one WorldEntity to another.
166*/
167void WorldEntity::command (Command* cmd) {}
168
169/**
170        \brief this is called by the local Camera to determine the point it should look at on the WorldEntity
171        \param locbuf: a pointer to the buffer to fill with a location to look at
172       
173        You may put any Location you want into locbuf, the Camera will determine via the corresponding Track how
174        to look at the location you return with this.
175*/
176void WorldEntity::get_lookat (Location* locbuf) {}
177
178/**
179        \brief this method is called by the world if the WorldEntity leaves valid gamespace
180       
181        For free entities this means it left the Track boundaries. With bound entities it means its Location adresses a
182        place that is not in the world anymore. In both cases you might have to take extreme measures (a.k.a. call destroy).
183*/
184void WorldEntity::left_world () {}
Note: See TracBrowser for help on using the repository browser.