Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 6440 was 6440, checked in by bensch, 20 years ago

orxonox/trunk: now the Widgets are only rendered within the HUD

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