Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/player.cc @ 3302

Last change on this file since 3302 was 3233, checked in by patrick, 20 years ago

orxonox/trunk: unstable - minor changes everywhere

File size: 3.6 KB
RevLine 
[1853]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.
[1872]12
13   ### File Specific:
14   main-programmer: Patrick Boenzli
[2190]15   co-programmer: Christian Meyer
[1853]16*/
17
[2036]18#include "player.h"
[2190]19#include "stdincl.h"
20#include "collision.h"
[2036]21
[1856]22using namespace std;
[1853]23
24
[2190]25Player::Player(bool isFree) : WorldEntity(isFree)
26{
[2811]27
[3226]28  this->obj = new Object("reaplow.obj");
[3210]29  /*
[2730]30  objectList = glGenLists(1);
31  glNewList (objectList, GL_COMPILE);
32
33  glBegin(GL_TRIANGLES);
34  glColor3f(1,1,1);
35  glVertex3f(0,0,0.5);
36  glVertex3f(-0.5,0,-1);
37  glVertex3f(0.5,0,-1);
38
39  glVertex3f(0,0,0.5);
40  glVertex3f(0,0.5,-1);
41  glVertex3f(0,-0.5,-1);
42  glEnd();
43   
44  glBegin(GL_QUADS);
45  glColor3f(0,0,1);
46  glVertex3f(0.5,0.5,-1);
47  glVertex3f(0.5,-0.5,-1);
48  glVertex3f(-0.5,-0.5,-1);
49  glVertex3f(-0.5,0.5,-1);
50  glEnd();
51 
52  glEndList ();
[3210]53  */
[1872]54}
[1853]55
[3226]56Player::~Player()
[3194]57{
58  delete this->obj;
[1896]59}
[1853]60
[3226]61void Player::postSpawn()
[1858]62{
[3227]63  travelSpeed = 15.0;
[2816]64  velocity = Vector();
65  bUp = bDown = bLeft = bRight = bAscend = bDescend = false;
66  bFire = false;
67  acceleration = 10.0;
[3227]68  setCollision(new CollisionCluster(1.0, Vector(0,0,0)));
[1858]69}
70
[3226]71void Player::tick(float time)
[1872]72{
[3209]73  // movement
74  move (time);
[1872]75}
[1858]76
[3226]77void Player::hit(WorldEntity* weapon, Vector loc)
[1900]78{
79}
80
[3226]81void Player::destroy()
[1872]82{
83}
84
[3226]85void Player::collide(WorldEntity* other, Uint32 ownhitflags, Uint32 otherhitflags)
[1872]86{
87}
88
[3226]89void Player::command(Command* cmd)
[1872]90{
[2636]91  //printf("Player|recieved command [%s]\n", cmd->cmd);
92  if( !strcmp( cmd->cmd, "up")) bUp = !cmd->bUp;
93  else if( !strcmp( cmd->cmd, "down")) bDown = !cmd->bUp;
94  else if( !strcmp( cmd->cmd, "left")) bLeft = !cmd->bUp;
95  else if( !strcmp( cmd->cmd, "right")) bRight = !cmd->bUp;
96  else if( !strcmp( cmd->cmd, "fire")) bFire = !cmd->bUp;
[1872]97}
98
[3226]99void Player::draw()
[2640]100{ 
[2551]101  glMatrixMode(GL_MODELVIEW);
102  glLoadIdentity();
103  float matrix[4][4];
104 
[3227]105  glTranslatef(getPlacement()->r.x, getPlacement()->r.y, getPlacement()->r.z);
[3233]106  getPlacement()->w.matrix (matrix);
[3226]107  glMultMatrixf((float*)matrix);
[2551]108 
[3226]109  glMatrixMode(GL_MODELVIEW);
110  glRotatef(-90, 0,1,0);
[2811]111  obj->draw();
[3226]112  // glCallList(objectList);
[2551]113
114 
[2816]115 
[2190]116}
[2036]117
[3226]118void Player::getLookat(Location* locbuf)
[1896]119{
[3227]120  *locbuf = *getLocation();
[3210]121  //locbuf->dist += 5.0;
[2190]122}
[2036]123
[3226]124void Player::leftWorld()
[2190]125{
[1872]126}
127
[3226]128void Player::move(float time)
[1858]129{
[2551]130  Vector accel(0.0, 0.0, 0.0);
[3227]131  /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */
132  Placement *pos = getPlacement();
[2551]133  /* calculate the direction in which the craft is heading  */
134  Vector direction(0.0, 0.0, 1.0);
135  direction = pos->w.apply(direction);
136  Vector orthDirection(0.0, 0.0, 1.0);
137  orthDirection = orthDirection.cross(direction);
138
139  if( bUp) { accel = accel+(direction*acceleration); }
140  if( bDown) { accel = accel-(direction*acceleration); }
141  if( bLeft ) { accel = accel + (orthDirection*acceleration); }
142  if( bRight ) { accel = accel - (orthDirection*acceleration); }
143  if( bAscend ) { /* not yet implemented but just: (0,0,1)*acceleration */}
[3210]144  if( bDescend) {/* FIXME */} /* \todo up and down player movement */
[2551]145
[3227]146  Location* l = getLocation();
[2551]147 
148  // r(t) = r(0) + v(0)*t + 1/2*a*t^2
149  // r = position
150  // v = velocity
151  // a = acceleration
152
153  /* this the base-speed of the player: determines how fast and how the player follows the track*/
[3227]154  l->dist = l->dist + travelSpeed * time;
[2551]155
156  /* this updates the player position on the track - user interaction */
157  l->pos = l->pos + accel*time;
[1896]158}
Note: See TracBrowser for help on using the repository browser.