Changeset 5839 in orxonox.OLD for branches/spaceshipcontrol/src/world_entities/player.cc
- Timestamp:
- Nov 30, 2005, 9:40:41 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/spaceshipcontrol/src/world_entities/player.cc
r5767 r5839 49 49 } 50 50 51 /**52 * loads a Players information from a specified file.53 * @param fileName the name of the File to load the player from (absolute path)54 */55 Player::Player(const char* fileName)56 {57 this->init();58 TiXmlDocument doc(fileName);59 60 if(!doc.LoadFile())61 {62 PRINTF(2)("Loading file %s failed for player.\n", fileName);63 return;64 }65 66 this->loadParams(doc.RootElement());67 }68 69 /**70 * creates a new Player from Xml Data71 * @param root the xml element containing player data72 73 @todo add more parameters to load74 */75 Player::Player(const TiXmlElement* root)76 {77 this->init();78 if (root != NULL)79 this->loadParams(root);80 81 //weapons:82 Weapon* wpRight = new TestGun(0);83 wpRight->setName("testGun Right");84 Weapon* wpLeft = new TestGun(1);85 wpLeft->setName("testGun Left");86 Weapon* cannon = dynamic_cast<Weapon*>(Factory::getFirst()->fabricate(CL_CANNON));87 88 cannon->setName("BFG");89 90 this->weaponMan->addWeapon(wpLeft, 1, 0);91 this->weaponMan->addWeapon(wpRight,1 ,1);92 this->weaponMan->addWeapon(cannon, 0, 6);93 94 //this->weaponMan->addWeapon(turret, 3, 0);95 96 this->weaponMan->changeWeaponConfig(1);97 }98 51 99 52 /** … … 102 55 Player::~Player () 103 56 { 104 /* do not delete the weapons, they are contained in the pnode tree105 and will be deleted there.106 this only frees the memory allocated to save the list.107 */108 delete this->weaponMan;109 57 } 110 58 … … 120 68 121 69 PRINTF(4)("PLAYER INIT\n"); 122 travelSpeed = 15.0;123 bUp = bDown = bLeft = bRight = bAscend = bDescend = false;124 bFire = false;125 acceleration = 10.0;126 127 // GLGuiButton* button = new GLGuiPushButton();128 // button->show();129 // button->setLabel("orxonox");130 // button->setBindNode(this);131 132 this->weaponMan = new WeaponManager(this);133 this->weaponMan->setSlotCount(7);134 135 this->weaponMan->setSlotPosition(0, Vector(-2.6, .1, -3.0));136 this->weaponMan->setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);137 138 this->weaponMan->setSlotPosition(1, Vector(-2.6, .1, 3.0));139 this->weaponMan->setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);140 141 this->weaponMan->setSlotPosition(2, Vector(-1.5, .5, -.5));142 this->weaponMan->setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));143 144 this->weaponMan->setSlotPosition(3, Vector(-1.5, .5, .5));145 this->weaponMan->setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));146 147 this->weaponMan->setSlotPosition(4, Vector(-1.5, -.5, .5));148 this->weaponMan->setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));149 150 this->weaponMan->setSlotPosition(5, Vector(-1.5, -.5, -.5));151 this->weaponMan->setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));152 //153 this->weaponMan->setSlotPosition(6, Vector(-1, 0.0, 0));154 this->weaponMan->setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);155 //156 // this->weaponMan->setSlotPosition(8, Vector(-2.5, -0.3, -2.0));157 // this->weaponMan->setSlotDirection(8, Quaternion(-M_PI, Vector(1,0,0)));158 //159 // this->weaponMan->setSlotPosition(9, Vector(-2.5, -0.3, 2.0));160 // this->weaponMan->setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));:161 70 162 71 } 163 72 164 73 165 /** 166 * loads the Settings of a Player from an XML-element. 167 * @param root the XML-element to load the Player's properties from 168 */ 169 void Player::loadParams(const TiXmlElement* root) 74 void Player::process(const Event &event) 170 75 { 171 static_cast<WorldEntity*>(this)->loadParams(root); 172 173 174 76 this->controllable->process(event); 175 77 } 176 78 177 /**178 * adds a weapon to the weapon list of player179 * @param weapon to add180 */181 void Player::addWeapon(Weapon* weapon)182 {183 this->weaponMan->addWeapon(weapon);184 }185 186 187 /**188 * removes a weapon from the player189 * @param weapon to remove190 */191 void Player::removeWeapon(Weapon* weapon)192 {193 this->weaponMan->removeWeapon(weapon);194 }195 196 197 /**198 * effect that occurs after the player is spawned199 */200 void Player::postSpawn ()201 {202 //setCollision(new CollisionCluster(1.0, Vector(0,0,0)));203 }204 205 206 /**207 * the action occuring if the player left the game208 */209 void Player::leftWorld ()210 {}211 212 213 WorldEntity* ref = NULL;214 /**215 * this function is called, when two entities collide216 * @param entity: the world entity with whom it collides217 *218 * Implement behaviour like damage application or other miscellaneous collision stuff in this function219 */220 void Player::collidesWith(WorldEntity* entity, const Vector& location)221 {222 if (entity->isA(CL_TURRET_POWER_UP) && entity != ref)223 {224 this->ADDWEAPON();225 ref = entity;226 }227 // PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getClassName(), entity->getClassName(), location.x, location.y, location.z);228 }229 230 /**231 * draws the player after transforming him.232 */233 void Player::draw () const234 {235 glMatrixMode(GL_MODELVIEW);236 glPushMatrix();237 /* translate */238 glTranslatef (this->getAbsCoor ().x,239 this->getAbsCoor ().y,240 this->getAbsCoor ().z);241 /* rotate */242 Vector tmpRot = this->getAbsDir().getSpacialAxis();243 glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );244 this->model->draw();245 glPopMatrix();246 247 this->weaponMan->draw();248 249 //this->debug(0);250 }251 252 253 /**254 * the function called for each passing timeSnap255 * @param time The timespan passed since last update256 */257 void Player::tick (float time)258 {259 // player controlled movement260 this->move(time);261 262 this->weaponMan->tick(time);263 // weapon system manipulation264 this->weaponAction();265 }266 267 268 /**269 * action if player moves270 * @param time the timeslice since the last frame271 */272 void Player::move (float time)273 {274 Vector accel(0.0, 0.0, 0.0);275 Vector rot(0.0, 0.0, 0.0);276 float rotVal = 0.0;277 /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */278 /* calculate the direction in which the craft is heading */279 Vector direction (1.0, 0.0, 0.0);280 //direction = this->absDirection.apply (direction);281 Vector orthDirection (0.0, 0.0, 1.0);282 //orthDirection = orthDirection.cross (direction);283 284 if( this->bUp && this->getRelCoor().x < 20)285 accel += direction;286 if( this->bDown && this->getRelCoor().x > -5)287 accel -= direction;288 289 if( this->bLeft && TrackManager::getInstance()->getWidth() > -this->getRelCoor().z*2)290 {291 accel -=(orthDirection);292 rot +=Vector(1,0,0);293 rotVal -= .4;294 }295 if( this->bRight && TrackManager::getInstance()->getWidth() > this->getRelCoor().z*2)296 {297 accel += orthDirection;298 rot += Vector(1,0,0);299 rotVal += .4;300 }301 if (this->bAscend )302 {303 accel += Vector(0,1,0);304 rot += Vector(0,0,1);305 rotVal += .4;306 }307 if (this->bDescend )308 {309 accel -= Vector(0,1,0);310 rot += Vector(0,0,1);311 rotVal -= .4;312 }313 314 Vector move = accel * time *acceleration;315 316 /* if (accel.z < 0)317 this->setRelDirSoft(Quaternion(-.4, accel), 5);318 else if (accel.z > 0)319 this->setRelDirSoft(Quaternion(.4, accel), 5);320 else*/321 rot.normalize();322 this->setRelDirSoft(Quaternion(rotVal, rot), 5);323 this->shiftCoor (move);324 }325 326 327 /**328 * weapon manipulation by the player329 */330 void Player::weaponAction()331 {332 if( this->bFire)333 {334 this->weaponMan->fire();335 }336 }337 338 /**339 * @todo switch statement ??340 */341 void Player::process(const Event &event)342 {343 if( event.type == KeyMapper::PEV_UP)344 this->bUp = event.bPressed;345 else if( event.type == KeyMapper::PEV_DOWN)346 this->bDown = event.bPressed;347 else if( event.type == KeyMapper::PEV_RIGHT)348 this->bRight= event.bPressed;349 else if( event.type == KeyMapper::PEV_LEFT)350 this->bLeft = event.bPressed;351 else if( event.type == KeyMapper::PEV_FIRE1)352 this->bFire = event.bPressed;353 else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)354 this->weaponMan->nextWeaponConfig();//if( !event.bPressed) this->bWeaponChange = !this->bWeaponChange;355 else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)356 this->weaponMan->previousWeaponConfig();357 358 else if( event.type == SDLK_PAGEUP)359 this->bAscend = event.bPressed; //this->shiftCoor(0,.1,0);360 else if( event.type == SDLK_PAGEDOWN)361 this->bDescend = event.bPressed; //this->shiftCoor(0,-.1,0);362 }363 364 #include "weapons/aiming_turret.h"365 // FIXME THIS MIGHT BE CONSIDERED EITHER A FEATURE, OR A BUG366 void Player::ADDWEAPON()367 {368 Weapon* turret = NULL;369 370 if ((float)rand()/RAND_MAX < .1)371 {372 //if (this->weaponMan->hasFreeSlot(2, WTYPE_TURRET))373 {374 turret = new Turret();375 this->weaponMan->addWeapon(turret, 2);376 this->weaponMan->changeWeaponConfig(2);377 }378 }379 else380 {381 //if (this->weaponMan->hasFreeSlot(3))382 {383 turret = new AimingTurret();384 this->weaponMan->addWeapon(turret, 3);385 386 this->weaponMan->changeWeaponConfig(3);387 }388 }389 390 if(turret != NULL)391 {392 turret->setName("Turret");393 turret->setStateDuration(WS_SHOOTING, (float)rand()/RAND_MAX*.5+.1);394 }395 }
Note: See TracChangeset
for help on using the changeset viewer.