Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/presentation/src/world_entities/player.cc @ 10754

Last change on this file since 10754 was 10698, checked in by snellen, 18 years ago

merged adm, hud, vs-enhancements : beni's responsible for this commit. blame him!

File size: 3.3 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: Silvan Nellen
13   co-programmer: Benjamin Knecht
14*/
15
16#include "player.h"
17#include "playable.h"
18#include "space_ships/space_ship.h"
19
20#include "event_handler.h"
21#include "creatures/fps_player.h"
22
23#include "state.h"
24#include "util/hud.h"
25
26#include "debug.h"
27
28ObjectListDefinition(Player);
29/**
30 * creates a new Player
31*/
32Player::Player()
33{
34  //  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
35  this->registerObject(this, Player::_objectList);
36
37  PRINTF(4)("PLAYER INIT\n");
38
39  this->playable = NULL;
40  this->_hud.setVisibility(true);
41
42  this->subscribeEvent(ES_GAME, KeyMapper::PEV_CHANGE_SHIP);
43}
44
45
46/**
47 *  destructs the player, deletes alocated memory
48 */
49Player::~Player ()
50{
51  this->setPlayable(NULL);
52}
53
54
55bool Player::setPlayable(Playable* playable)
56{
57  if (this->playable == playable)
58    return false;
59
60  // get out of the current Playable
61  if (this->playable != NULL)
62  {
63    PRINTF(4)("Player gets ejected from Playable\n");
64    this->_hud.setEnergyWidget(NULL);
65    this->_hud.setWeaponManager(NULL);
66
67    Playable* ejectedPlayable = this->playable;
68
69    this->playable = NULL;
70    ejectedPlayable->setPlayer(NULL);
71  }
72
73  if (playable != NULL)
74  {
75    PRINTF(4)("Enter new Playable\n");
76    this->playable = playable;
77   
78    if( playable->isA(FPSPlayer::staticClassID()) )
79    {
80        this->_hud.setMode(Hud::FirstPerson);
81        this->_hud.setHealthWidget(this->playable->getHealthWidget());
82    }
83    else
84    {
85        this->_hud.setMode(Hud::Full3D);
86        this->_hud.setHealthWidget(this->playable->getHealthWidget());
87    }
88    /*if (dynamic_cast<SpaceShip*>(this->playable) != 0)
89      this->_hud.setWeaponManager(&this->playable->getWeaponManager(), &dynamic_cast<SpaceShip*>(this->playable)->getWeaponManagerSecondary());
90    else
91      this->_hud.setWeaponManager(&this->playable->getWeaponManager());*/
92
93    this->playable->setPlayer(this);
94    return true;
95  }
96
97  if ( playable == NULL )
98    this->playable = NULL;
99
100  return true;
101}
102
103bool Player::eject()
104{
105  return this->setPlayable(NULL);
106}
107
108
109void Player::weaponConfigChanged()
110{
111  //this->_hud.updateWeaponManager();
112
113  if (dynamic_cast<SpaceShip*>(this->playable) != NULL)
114    this->_hud.setWeaponManager(&this->playable->getWeaponManager(), &dynamic_cast<SpaceShip*>(this->playable)->getWeaponManagerSecondary());
115  else
116    this->_hud.setWeaponManager(&this->playable->getWeaponManager());
117}
118
119
120void Player::enterNewPlayable()
121{
122  /// FIXME this should be in the ObjectManager
123  for (ObjectList<Playable>::const_iterator node = Playable::objectList().begin();
124       node != Playable::objectList().end();
125       ++node)
126  {
127    if (this->playable != (*node) &&
128        ((*node)->getAbsCoor() - this->playable->getAbsCoor()).len() < ((*node)->getEnterRadius()))
129    {
130
131      this->setPlayable(*(node));
132
133      break;
134    }
135  }
136}
137
138
139void Player::process(const Event &event)
140{
141  if (event.type == KeyMapper::PEV_CHANGE_SHIP && event.bPressed)
142  {
143    this->enterNewPlayable();
144  }
145
146  if (likely(this->playable != NULL))
147    this->playable->process(event);
148}
149
150
Note: See TracBrowser for help on using the repository browser.