Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/world_entities/player.cc @ 6441

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

orxonox/trunk: the Hud now scales the Widgets itself

File size: 2.2 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
19#include "event_handler.h"
20
21
22#include "class_list.h"
23#include "state.h"
24#include "util/hud.h"
25
26using namespace std;
27
28
29/**
30 * creates a new Player
31*/
32Player::Player()
33{
34//  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
35  this->setClassID(CL_PLAYER, "Player");
36
37  PRINTF(4)("PLAYER INIT\n");
38
39  this->controllable = NULL;
40  this->hud.show();
41
42  EventHandler::getInstance()->subscribe(this, ES_GAME, SDLK_l);
43}
44
45
46/**
47 *  destructs the player, deletes alocated memory
48 */
49Player::~Player ()
50{
51
52}
53
54
55bool Player::setControllable(Playable* controllable)
56{
57  if(controllable != NULL && controllable->subscribePlayer(this))
58  {
59      this->controllable = controllable;
60      this->hud.setEnergyWidget(this->controllable->getEnergyWidget());
61      return true;
62  }
63  else
64    return false;
65}
66
67bool Player::disconnectControllable()
68 {
69   if(this->controllable == NULL) return true;
70
71   if(this->controllable->unsubscribePlayer(this))
72   {
73     this->controllable = NULL;
74     this->hud.setEnergyWidget(NULL);
75     return true;
76   }
77   else
78     return false;
79 }
80
81 void Player::process(const Event &event)
82 {
83   if (event.type == SDLK_l && event.bPressed)
84   {
85     /// FIXME this should be in the ObjectManager
86     const std::list<BaseObject*>* objectList = ClassList::getList(CL_PLAYABLE);
87     if (objectList != NULL)
88     {
89       list<BaseObject*>::const_iterator node;
90       for (node = objectList->begin(); node != objectList->end(); node++)
91         if (this->controllable != (*node) && (dynamic_cast<PNode*>(*node)->getAbsCoor() - this->controllable->getAbsCoor()).len() < 10.0)
92       {
93
94         this->disconnectControllable();
95         this->setControllable(dynamic_cast<Playable*>(*node));
96
97         break;
98       }
99     }
100   }
101
102   if (likely(this->controllable != NULL))
103     this->controllable->process(event);
104 }
105
Note: See TracBrowser for help on using the repository browser.