Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jul 4, 2006, 11:18:41 AM (18 years ago)
Author:
bensch
Message:

orxonox/trunk: merged the Presentation back

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/world_entities/space_ships/spacecraft_2d.cc

    r9061 r9110  
    2525
    2626#include "util/loading/factory.h"
     27#include "util/loading/load_param.h"
    2728#include "key_mapper.h"
    2829#include "state.h"
     
    3637CREATE_FACTORY(Spacecraft2D, CL_SPACECRAFT_2D);
    3738
     39/**
     40 *  destructs the spacecraft_2d, deletes alocated memory
     41 */
     42Spacecraft2D::~Spacecraft2D ()
     43{
     44  this->setPlayer(NULL);
     45  delete this->toTravelHeight;
     46}
    3847
    3948/**
     
    8695
    8796/**
    88  *  destructs the spacecraft_2d, deletes alocated memory
    89  */
    90 Spacecraft2D::~Spacecraft2D ()
    91 {
    92   this->setPlayer(NULL);
    93 }
    94 
    95 /**
    9697 * @brief initializes a Spacecraft2D
    9798 */
     
    101102  this->setClassID(CL_SPACECRAFT_2D, "Spacecraft2D");
    102103
    103   this->setSupportedPlaymodes(Playable::Full3D | Playable::Horizontal);
    104 
     104  this->setSupportedPlaymodes(Playable::Full3D | Playable::Horizontal );
    105105
    106106  bForward = bBackward = bLeft = bRight = false;
     
    110110  this->rotation = 0.0f;
    111111  this->acceleration = 10.0f;
    112   this->altitude = 0.0f;
     112  this->airFriction = 2.0f;
     113
    113114
    114115  this->setHealthMax(100);
     
    116117
    117118
     119  /// 2D-MODE
     120  this->toTravelHeight = NULL;
     121  this->travelSpeed = 0.0f;
     122  this->travelNode = new PNode();
     123
     124
    118125  // camera - issue
    119   this->travelNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE);
     126  this->cameraNode.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     127  this->cameraNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE);
    120128  //this->cameraNode.setParentMode(PNODE_ROTATE_MOVEMENT);
    121129  //this->cameraNode.setParent(this);
    122130
    123   // rotors
    124131  // PARTICLES
    125132  this->burstEmitter = new DotEmitter(200, 5.0, .01);
    126133  this->burstEmitter->setParent(this);
    127134  this->burstEmitter->setRelCoor(0, -0.7, 0);
    128   this->burstEmitter->setRelDir(Quaternion(-M_PI_2, Vector(0,0,1)));
     135  this->burstEmitter->setRelDir(Quaternion(-M_PI, Vector(0,0,1)));
    129136  this->burstEmitter->setName("Spacecraft2D_Burst_emitter_Left");
    130 
    131137
    132138  this->burstSystem = new SpriteParticles(1000);
     
    150156  this->registerEvent(KeyMapper::PEV_LEFT);
    151157  this->registerEvent(KeyMapper::PEV_RIGHT);
    152   this->registerEvent(KeyMapper::PEV_UP);
    153   this->registerEvent(KeyMapper::PEV_DOWN);
    154158  this->registerEvent(KeyMapper::PEV_FIRE1);
    155159  this->registerEvent(KeyMapper::PEV_NEXT_WEAPON);
     
    178182  this->getWeaponManager().setSlotDirection(4, Quaternion(24/180 * M_PI, Vector(1,0,0)));
    179183
    180   this->travelNode.setRelCoor(0,0,0);
    181   //this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
    182   //this->getWeaponManager().getFixedTarget()->setRelCoor(1000,0,0);
     184  this->cameraNode.setRelCoor(1,5,0);
     185  this->getWeaponManager().getFixedTarget()->setParent(&this->cameraNode);
     186  this->getWeaponManager().getFixedTarget()->setRelCoor(1000,0,0);
    183187
    184188  registerVar( new SynchronizeableBool( &bForward, &bForward, "bForward", PERMISSION_OWNER ) );
     
    198202{
    199203  Playable::loadParams(root);
     204
     205  LoadParam(root, "travel-speed", this, Spacecraft2D, setTravelSpeed);
     206  LoadParam(root, "travel-height", this, Spacecraft2D, setTravelHeight);
     207  LoadParam(root, "travel-distance", this, Spacecraft2D, setTravelDistance);
    200208}
    201209
     
    205213}
    206214
    207 void Spacecraft2D::setTravelDirecton(const Quaternion& rot, float speed)
    208 {
    209   this->setPlayDirection(rot, speed);
    210 }
    211 
    212215void Spacecraft2D::setTravelSpeed(float travelSpeed)
    213216{
     
    216219
    217220
     221void Spacecraft2D::setTravelHeight(float travelHeight)
     222{
     223  if (this->toTravelHeight == NULL)
     224    this->toTravelHeight = new float;
     225  *this->toTravelHeight = travelHeight;
     226}
     227
     228
     229void Spacecraft2D::setTravelDistance(const Vector2D& distance)
     230{
     231  this->travelDistance = distance;
     232}
     233
     234void Spacecraft2D::setTravelDistance(float x, float y)
     235{
     236  this->setTravelDistance(Vector2D(x, y));
     237}
     238
     239
    218240
    219241void Spacecraft2D::enter()
    220242{
    221243  dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true);
    222 
    223   if (State::getCameraNode != NULL)
    224   {
    225     State::getCameraNode()->setParentSoft(&this->travelNode);
    226     State::getCameraNode()->setRelCoorSoft(-10, 50,0);
    227     State::getCameraTargetNode()->setParentSoft(&this->travelNode);
    228   }
     244  this->setPlaymode(this->getPlaymode());
    229245}
    230246
     
    235251
    236252}
     253
     254
     255void Spacecraft2D::enterPlaymode(Playable::Playmode playmode)
     256{
     257  switch(playmode)
     258  {
     259    case Playable::Full3D:
     260      if (State::getCameraNode != NULL)
     261      {
     262        Vector absCoor = this->getAbsCoor();
     263        this->setParent(PNode::getNullParent());
     264        this->setAbsCoor(absCoor);
     265        State::getCameraNode()->setParentSoft(&this->cameraNode);
     266        State::getCameraNode()->setRelCoorSoft(-10, 0,0);
     267        State::getCameraTargetNode()->setParentSoft(&this->cameraNode);
     268        State::getCameraTargetNode()->setRelCoorSoft(100, 0,0);
     269
     270      }
     271      break;
     272
     273
     274    case Playable::Horizontal:
     275      if (State::getCameraNode != NULL)
     276      {
     277        this->debugNode(1);
     278        this->travelNode->debugNode(1);
     279
     280        this->travelNode->setAbsCoor(this->getAbsCoor());
     281        this->travelNode->updateNode(0.01f);
     282
     283        this->setParent(this->travelNode);
     284        this->setRelCoor(0,0,0);
     285
     286        State::getCameraNode()->setParentSoft(this->travelNode);
     287        State::getCameraNode()->setRelCoorSoft(-3, 50,0);
     288        State::getCameraTargetNode()->setParentSoft(this->travelNode);
     289        State::getCameraTargetNode()->setRelCoorSoft(0,0,0);
     290
     291
     292        this->debugNode(1);
     293        this->travelNode->debugNode(1);
     294      }
     295      break;
     296
     297    default:
     298      PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassName());
     299  }
     300}
     301
    237302
    238303
     
    277342
    278343  // TRYING TO FIX PNode.
    279   //this->travelNode.setAbsCoorSoft(this->getAbsCoor() + Vector(0.0f, 5.0f, 0.0f), 30.0f);
    280   //this->travelNode.setRelDirSoft(this->getAbsDir(), 30.0f);
     344  this->cameraNode.setAbsCoorSoft(this->getAbsCoor() + Vector(0.0f, 5.0f, 0.0f), 30.0f);
     345  this->cameraNode.setRelDirSoft(this->getAbsDir(), 30.0f);
    281346}
    282347
     
    307372    accel += Vector(0, 0, this->acceleration);
    308373  }
    309 
    310374
    311375  switch(this->getPlaymode())
     
    316380
    317381        // this is the air friction (necessary for a smooth control)
    318 
    319         this->velocity += (accelerationDir)* dt;
     382        Vector damping = (this->velocity * this->airFriction);
     383
     384
     385        this->velocity += (accelerationDir - damping)* dt;
    320386        this->shiftCoor (this->velocity * dt);
    321387
     
    332398
    333399        this->setRelDirSoft(this->direction * Quaternion(-cameraLook, Vector(0,0,1)), 5);
    334 
    335400      }
    336401      break;
     
    338403    case Playable::Horizontal:
    339404      {
     405
     406        if (this->toTravelHeight != NULL)
     407        {
     408          this->travelNode->shiftCoor(Vector(0, (*toTravelHeight - this->travelNode->getAbsCoor().y) * dt, 0));
     409          if (fabsf(this->travelNode->getAbsCoor().y - *this->toTravelHeight) < .1)
     410          {
     411            delete this->toTravelHeight;
     412            this->toTravelHeight = NULL;
     413          }
     414        }
     415        this->travelNode->shiftCoor(Vector(this->travelSpeed * dt, 0, 0));
     416
    340417        accel.y = 0.0;
    341418        Vector accelerationDir = this->getAbsDir().apply(accel * this->acceleration);
     
    343420
    344421        // this is the air friction (necessary for a smooth control)
    345 
    346 
    347         this->velocity += (accelerationDir )* dt;
     422        Vector damping = (this->velocity * this->airFriction);
     423
     424
     425        this->velocity += (accelerationDir - damping)* dt;
    348426        this->shiftCoor (this->velocity * dt);
    349 
    350         // limit the maximum rotation speed.
    351         if (this->rotation != 0.0f)
    352         {
    353           float maxRot = 10.0 * dt;
    354           if (unlikely(this->rotation > 0.01 || this->rotation < 0.01)) this->rotation /=1.5;
    355           this->direction *= Quaternion(-M_PI/4.0*this->rotation, Vector(0,1,0));
    356 
    357           this->rotation = 0.0f;
    358         }
    359 
    360         this->setRelDirSoft(this->direction, 5);
     427        this->setRelDirSoft(Quaternion(0, Vector(0,0,0)), 1.0f);
    361428      }
    362429      break;
    363430
    364431    default:
    365       PRINTF(2)("Playmode %s Not Implemented\n", Playable::playmodeToString(this->getPlaymode()).c_str());
     432      PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassName());
    366433  }
    367434}
     
    390457  else if( event.type == EV_MOUSE_MOTION)
    391458  {
    392     float xMouse, yMouse;
    393     xMouse = event.xRel*mouseSensitivity;
    394     yMouse = event.yRel*mouseSensitivity;
    395 
    396     // rotate the Player around the y-axis
     459
     460
     461
    397462    if (this->getPlaymode() == Playable::Full3D)
     463    {
     464      float xMouse, yMouse;
     465      xMouse = event.xRel*mouseSensitivity;
     466      yMouse = event.yRel*mouseSensitivity;
     467
     468      // rotate the Player around the y-axis
    398469      this->rotation += xMouse;
    399470
    400     this->cameraLook += yMouse;
    401     // rotate the Camera around the z-axis
    402     if (cameraLook > M_PI_4)
    403       cameraLook = M_PI_4;
    404     else if (cameraLook < -M_PI_4)
    405       cameraLook = -M_PI_4;
    406     //this->cameraNode.setRelDirSoft(this->direction,10);
    407   }
    408 }
     471      this->cameraLook += yMouse;
     472      // rotate the Camera around the z-axis
     473      if (cameraLook > M_PI_4)
     474        cameraLook = M_PI_4;
     475      else if (cameraLook < -M_PI_4)
     476        cameraLook = -M_PI_4;
     477      //this->cameraNode.setRelDirSoft(this->direction,10);
     478    }
     479  }
     480}
Note: See TracChangeset for help on using the changeset viewer.