Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10366 in orxonox.OLD


Ignore:
Timestamp:
Jan 25, 2007, 12:48:13 PM (17 years ago)
Author:
patrick
Message:

merged the playability branche. working

Location:
branches/playability.merge
Files:
47 edited
44 copied

Legend:

Unmodified
Added
Removed
  • branches/playability.merge

    • Property svn:ignore
      •  

        old new  
        1010autom4te.cache
        1111aclocal.m4
         12tags
         13test.bmp
         14config.sub
         15config.guess
         16OrxonoxPlayability.kdevses
         17OrxonoxPlayability.kdevelop.pcs
  • branches/playability.merge/ChangeLog

    r9872 r10366  
     12006-12-17 Nicolas Schlumberger <nicolasc@ee.ethz.ch>
     2  Added guiding sysmte for swarm missile
     3  updated drawing function, to draw in the correct direction
     4
     52006-12-16  Marc Schärer <marcscha@ee.ethz.ch>
     6  Addition trail system
     7  Experiment with explosion class on SpaceShip.
     8  Sadly, collision problems still persist. need to be solved until wednesday 2006-12-20
     9
     102006-12-03  Nicolas Schlumberger <nicolasc@ee.ethz.ch>
     11  Added Rotation to hbolt
     12  Did some experimenting with test_entity2 (rotation, texturing)
     13  Added textured versions of bolt, and hbolt
     14
     152006-12-03  Marc Schärer <marcscha@ee.ethz.ch>
     16  Added functionality to show / hide a crosshair to the weapon manager. No default crosshair anymore
     17  Multiple weapons per ship added
     18  Several small tweaks needed to make the above working added
     19  Addition of SwarmMissile and SwarmProjectile
     20
     212006-11-29  Nicolas Schlumbgerger <nicolasc@ee.ethz.ch>
     22  Added bolt projectile for light blaster, copied of laser
     23  Added hbolt projectile for heavy blaster, copied of laser
     24  Added bolt model, currently untextured
     25  Added hbolt model, currently untextured
     26
     272006-11-28      Marc Schärer <marcscha@ee.ethz.ch>
     28        Mapped primary weapon manager back to playable default weapon manager.
     29        Addition of secondary weapon manager for special weapon. Currently uses Cannon to show and test this functionality.
     30        Implementation of weapon energy regeneration. This needed some little modifications to the HUD class as well but now works :)
     31        Addition of the second weapon manager to the HUD manager in util/hud .h .cc for our master of HUD ;-)
     32
    1332006-09-22      Benjamin Grauer <bensch@orxonox.net>
    234        Complete reimplementation of the ResourceManager.
  • branches/playability.merge/src/lib/coord/p_node.h

    r9869 r10366  
    9898  inline const Vector& getRelCoor () const { return this->prevRelCoordinate; };
    9999  /** @returns the Relative Coordinate Destination */
    100 inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)? *this->toCoordinate : this->relCoordinate; };
     100  inline const Vector& getRelCoorSoft2D() const { return (this->toCoordinate)? *this->toCoordinate : this->relCoordinate; };
    101101  void setAbsCoor (const Vector& absCoord);
    102102  void setAbsCoor (float x, float y, float z);
     
    133133  inline const Quaternion& getRelDir () const { return this->prevRelDirection; };
    134134  /** @returns the Relative Directional Destination */
    135 inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; };
     135  inline const Quaternion& getRelDirSoft2D() const { return (this->toDirection)? *this->toDirection : this->relDirection; };
    136136  /** @returns a Vector pointing into the relative Direction */
    137137  inline Vector getRelDirV() const { return this->prevRelDirection.apply(Vector(0,1,0)); };
  • branches/playability.merge/src/lib/graphics/importer/vertex_array_model.cc

    r9869 r10366  
    260260                            ((float)j - (float)resolutionY/2.0)/(float)resolutionY * sizeY);
    261261          this->addNormal(0.0, 1, 0.0);
    262           this->addTexCoor((float)i/(float)resolutionX, (float)j/(float)resolutionY);
     262          this->addTexCoor((float)i/(float)(resolutionY-1), (float)j/(float)(resolutionX-1));
    263263          this->addColor(1.0, 1.0, 1.0);
    264264        }
  • branches/playability.merge/src/lib/gui/gl/glgui_bar.cc

    r9869 r10366  
    7171
    7272    this->_value = value;
    73     this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value -_minimum)/ (_minimum + _maximum)
     73    this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value - _minimum) / (_maximum -_minimum)
    7474        ,this->getSizeY2D() - borderTop() - borderBottom());
    7575  }
     
    9999
    100100    this->_frontRect.setTopLeft(borderLeft(), borderTop());
    101     this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value -_minimum)/ (_minimum + _maximum)
    102                              ,this->getSizeY2D() - borderTop() - borderBottom());
     101    this->_frontRect.setSize((this->getSizeX2D() - borderLeft() - borderRight()) * (_value - _minimum) / (_maximum -_minimum)
     102        ,this->getSizeY2D() - borderTop() - borderBottom());
    103103
    104104  }
  • branches/playability.merge/src/lib/gui/gl/glgui_box.cc

    r9869 r10366  
    1818#include "glgui_box.h"
    1919#include <cassert>
     20#include <iostream>
    2021#include "debug.h"
     22#include "network_log.h"
     23
    2124
    2225namespace OrxGui
     
    177180  void GLGuiBox::resize()
    178181  {
    179     if (orientation() == OrxGui::Vertical)
     182    if (this->orientation() == OrxGui::Vertical)
    180183    {
    181184      float height = borderTop();
     
    186189      for (widget = this->_children.begin(); widget != this->_children.end(); ++widget)
    187190      {
    188         (*widget)->setRelCoor2D(borderLeft(), height);
    189         height += (*widget)->getSizeY2D();
    190         width = fmax(width, (*widget)->getSizeX2D());
     191        //float radDir = (*widget)->getAbsDir2D() * 2 * M_PI / 360;
     192        //float realSizeX = fabsf((*widget)->getSizeX2D() * cosf(radDir)) + fabsf((*widget)->getSizeY2D() * sinf(radDir));
     193        //float realSizeY = fabsf((*widget)->getSizeX2D() * sinf(radDir)) + fabsf((*widget)->getSizeY2D() * cosf(radDir));
     194        float realSizeX, realSizeY;
     195        int angleAbs = (int)(*widget)->getAbsDir2D();
     196        int angleRel = (int)(*widget)->getRelDir2D();
     197        //std::cout << "absangle: " << angleAbs << ", relangle: " << angleRel << '\n';
     198        if ((*widget)->getAbsDir2D() == 0 || (*widget)->getAbsDir2D() == 180)
     199        {
     200          realSizeX = (*widget)->getSizeX2D();
     201          realSizeY = (*widget)->getSizeY2D();
     202          //std::cout<<"box vertical, widget 0or180";
     203        }
     204        else if ((*widget)->getAbsDir2D() == 90 || (*widget)->getAbsDir2D() == 270)
     205        {
     206          realSizeX = (*widget)->getSizeY2D();
     207          realSizeY = (*widget)->getSizeX2D();
     208          //std::cout<<"box vertical, widget 90or270";
     209        }
     210
     211        (*widget)->setRelCoor2D(borderLeft(), height + borderTop());
     212        height += realSizeY;
     213        width = fmax(width, realSizeX);
    191214      }
    192215
     
    205228      for (widget = this->_children.begin(); widget != this->_children.end(); ++widget)
    206229      {
     230        //float radDir = (*widget)->getAbsDir2D() * 2 * M_PI / 360;
     231        //std::cout << "size X: " << (*widget)->getSizeX2D() << "size Y: " << (*widget)->getSizeY2D() << '\n';
     232        //float realSizeX = fabsf((*widget)->getSizeX2D() * cosf(radDir)) + fabsf((*widget)->getSizeY2D() * sinf(radDir));
     233        //float realSizeY = fabsf((*widget)->getSizeX2D() * sinf(radDir)) + fabsf((*widget)->getSizeY2D() * cosf(radDir));
     234        float realSizeX, realSizeY;
     235        int angleAbs = (int)(*widget)->getAbsDir2D();
     236        int angleRel = (int)(*widget)->getRelDir2D();
     237        //std::cout << "absangle: " << angleAbs << ", relangle: " << angleRel << '\n';
     238        if ((*widget)->getAbsDir2D() == 0 || (*widget)->getAbsDir2D() == 180)
     239        {
     240          realSizeX = (*widget)->getSizeX2D();
     241          realSizeY = (*widget)->getSizeY2D();
     242          //std::cout<<"box horicontal, widget 0or180";
     243        }
     244        else if ((*widget)->getAbsDir2D() == 90 || (*widget)->getAbsDir2D() == 270)
     245        {
     246          realSizeX = (*widget)->getSizeY2D();
     247          realSizeY = (*widget)->getSizeX2D();
     248          //std::cout<<"box horicontal, widget 90or270";
     249        }
     250
    207251        (*widget)->setRelCoor2D(width, borderTop());
    208         height = fmax(height, (*widget)->getSizeY2D());
    209         width += (*widget)->getSizeX2D();
     252        height = fmax(height, realSizeY);
     253        width += realSizeX;
    210254      }
    211255
  • branches/playability.merge/src/lib/gui/gl/glgui_widget.cc

    r10317 r10366  
    915915  }
    916916
     917  void GLGuiWidget::beginDraw() const
     918  {
     919    glPushMatrix();
     920    glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0);
     921    glRotatef(this->getAbsDir2D(), 0, 0, 1);
     922  }
     923
    917924
    918925}
  • branches/playability.merge/src/lib/gui/gl/glgui_widget.h

    r9869 r10366  
    244244
    245245    /// RENDERING
    246     inline void beginDraw() const { glPushMatrix(); glTranslatef(this->getAbsCoor2D().x, this->getAbsCoor2D().y, 0); };
     246    void beginDraw() const;
    247247    inline void endDraw() const { glPopMatrix(); };
    248248
  • branches/playability.merge/src/lib/math/curve.cc

    r9110 r10366  
    142142    tmpNode = tmpNode->next;
    143143  return tmpNode->position;
     144}
     145
     146/**
     147 * This function returns an approximation of the length of the curve
     148 *
     149*/
     150float Curve::getLength()
     151{
     152      float length = 0;
     153      PathNode* tmpNode = this->firstNode;
     154      for(int i = 1; i < this->nodeCount; i++)
     155      {
     156              length += Vector(tmpNode->next->position - tmpNode->position).len();
     157      }
     158      return length;
    144159}
    145160
     
    273288Vector BezierCurve::calcDir (float t)
    274289{
    275   return this->dirCurve->calcPos(t);
     290  return this->calcPos(t + 0.01) - this->calcPos(t);
     291  //return this->dirCurve->calcPos(t);
    276292}
    277293
  • branches/playability.merge/src/lib/math/curve.h

    r6616 r10366  
    4747  /** @returns the directional Curve */
    4848  Curve* getDirCurve() const { return this->dirCurve; };
     49  float getLength();
    4950
    5051  /** @param t the value on the curve [0-1] @returns Vector to the position */
  • branches/playability.merge/src/lib/util/loading/fast_factory.cc

    r9869 r10366  
    157157void FastFactory::flush(bool hardFLUSH)
    158158{
     159hardFLUSH = false; // HACK
    159160  FastObjectMember* tmpMember = this->deadList, *delMember = NULL;
    160161  while (tmpMember != NULL)
  • branches/playability.merge/src/story_entities/game_world.cc

    r10340 r10366  
    359359      this->dataTank->localPlayer->getPlayable()->setPlaymode(playmode))
    360360  {
    361     PRINTF(4)("Set Playmode to %d:%s\n", playmode, Playable::playmodeToString(playmode).c_str());
     361    PRINTF(0)("Set Playmode to %d:%s\n", playmode, Playable::playmodeToString(playmode).c_str());
    362362  }
    363363  else
    364364  {
    365     PRINTF(2)("Unable to set Playmode %d:'%s'\n", playmode, Playable::playmodeToString(playmode).c_str());
     365    PRINTF(0)("Unable to set Playmode %d:'%s'\n", playmode, Playable::playmodeToString(playmode).c_str());
    366366  }
    367367}
  • branches/playability.merge/src/story_entities/menu/game_menu.cc

    r10114 r10366  
    111111
    112112  this->dataTank->localCamera->setRelCoor(this->cameraVector);
     113  //this->dataTank->localCamera->setFovy(60);
    113114
    114115  GraphicsEngine::getInstance()->displayFPS(false);
  • branches/playability.merge/src/util/Makefile.am

    r9869 r10366  
    2626                        animation/animation_player.cc \
    2727                        \
    28                         track/pilot_node.cc
    29 
    30 #                       track/track_manager.cc \
     28                        track/pilot_node.cc \
     29                        track/track.cc \
     30                        track/track_manager.cc \
    3131                        track/track_node.cc
    3232
     
    5252                        animation/t_animation.h \
    5353                        \
    54                         track/pilot_node.h
     54                        track/pilot_node.h \
     55                        track/track.h \
     56                        track/track_manager.h \
     57                        track/track_node.h
    5558
    56 #                       track/track_manager.h \
    57                         track/track_node.h
  • branches/playability.merge/src/util/hud.cc

    r9869 r10366  
    2323#include "world_entities/weapons/weapon_manager.h"
    2424#include "glgui_widget.h"
     25#include "glgui_box.h"
     26#include "glgui_bar.h"
     27#include "elements/glgui_energywidgetvertical.h"
    2528
    2629#include "glgui_inputline.h"
    2730#include "specials/glgui_notifier.h"
    2831#include "elements/glgui_radar.h"
     32#include "world_entities/space_ships/space_ship.h"
    2933
    3034
     
    4549  //this->setSize2D(
    4650  this->weaponManager = NULL;
     51  this->weaponManagerSecondary = NULL;
    4752  this->energyWidget = NULL;
    4853  this->shieldWidget = NULL;
    4954  this->armorWidget = NULL;
     55  //this->leftRect = NULL;
     56  //this->rightRect = NULL;
    5057  this->resX = 1;
    5158  this->resY = 1;
     59
     60  this->overlayPercentage = 40;
     61  this->overlayActive = false;
     62  this->rightRect = new OrxGui::GLGuiImage();
     63  this->leftRect = new OrxGui::GLGuiImage();
    5264
    5365  this->inputLine = new OrxGui::GLGuiInputLine();
     
    5870
    5971  this->_radar = new OrxGui::GLGuiRadar();
     72  this->radarCenterNode = NULL;
    6073
    6174  this->subscribeEvent(ES_ALL, EV_VIDEO_RESIZE);
    6275  this->subscribeEvent(ES_ALL, SDLK_TAB);
    6376
    64 
     77  //this->shipValuesBox = NULL;
    6578}
    6679
     
    7588
    7689  delete this->_radar;
     90  delete this->rightRect;
     91  delete this->leftRect;
     92  //if (this->shipValuesBox != NULL)
     93    //delete this->shipValuesBox;
     94
    7795  // delete what has to be deleted here
    7896}
     
    94112void Hud::setEnergyWidget(OrxGui::GLGuiWidget* widget)
    95113{
     114  //if (this->shipValuesBox == NULL)
     115    //this->createShipValuesBox();
     116
    96117  // decopple old widget
    97118  if (this->energyWidget != NULL)
     
    103124  if (this->energyWidget != NULL)
    104125  {
     126    //this->energyWidget->shiftDir2D(270);
     127    //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->energyWidget)->setDisplayedName("Electronics");
     128    //this->shipValuesBox->pack(this->energyWidget);
     129    //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->energyWidget)->setStandardSettings();
     130    this->energyWidget->setParent2D(this->leftRect);
    105131    this->energyWidget->show();
    106     this->energyWidget->setBackgroundTexture( "hud_energy_background.png");
    107132    /*    this->energyWidget->frontMaterial().setDiffuseMap("hud_energy_bar.png");
    108133        this->energyWidget->frontMaterial().setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/
     
    113138
    114139void Hud::setShiledWidget(OrxGui::GLGuiWidget* widget)
    115 {}
     140{
     141  /*
     142  if (this->shipValuesBox == NULL)
     143    this->createShipValuesBox();
     144  */
     145
     146  // decopple old widget
     147  if (this->shieldWidget != NULL)
     148  {
     149    this->shieldWidget->hide();
     150  }
     151
     152  this->shieldWidget = widget;
     153  if (this->shieldWidget != NULL)
     154  {
     155    //this->shieldWidget->shiftDir2D(270);
     156    //this->shipValuesBox->pack(this->shieldWidget);
     157    //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->shieldWidget)->setStandardSettings();
     158    this->shieldWidget->setParent2D(this->leftRect);
     159    this->shieldWidget->show();
     160    /*    this->shieldWidget->frontMaterial().setDiffuseMap("hud_energy_bar.png");
     161        this->shieldWidget->frontMaterial().setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/
     162  }
     163  else
     164    printf("schild im hud nicht uebergeben!!!!!!!!!!!!!!!!!!!!!!!!!");
     165
     166  this->updateResolution();
     167}
    116168
    117169void Hud::setArmorWidget(OrxGui::GLGuiWidget* widget)
    118 {}
    119 
    120 void Hud::setWeaponManager(WeaponManager* weaponMan)
    121 {
     170{
     171  /*
     172  if (this->shipValuesBox == NULL)
     173    this->createShipValuesBox();
     174  */
     175
     176// decopple old widget
     177  if (this->armorWidget != NULL)
     178  {
     179    this->armorWidget->hide();
     180  }
     181
     182  this->armorWidget = widget;
     183  if (this->armorWidget != NULL)
     184  {
     185    //this->armorWidget->shiftDir2D(270);
     186    //this->shipValuesBox->pack(this->armorWidget);
     187    //dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (this->armorWidget)->setStandardSettings();
     188    this->armorWidget->setParent2D(this->leftRect);
     189    this->armorWidget->show();
     190    /*    this->armorWidget->frontMaterial().setDiffuseMap("hud_energy_bar.png");
     191        this->armorWidget->frontMaterial().setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);*/
     192  }
     193
     194  this->updateResolution();
     195}
     196
     197void Hud::setWeaponManager(WeaponManager* weaponMan, WeaponManager* weaponManSec)
     198{
     199  //clearWeaponManager();
     200
     201  //Hide all widgets
    122202  if (this->weaponManager != NULL)
    123203  {
     
    128208      {
    129209        weapon->getEnergyWidget()->hide();
    130         this->weaponsWidgets.remove(weapon->getEnergyWidget());
     210        //this->weaponsWidgetsPrim.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget()));
    131211      }
    132212    }
    133213  }
    134214
     215  if (this->weaponManagerSecondary != NULL)
     216  {
     217    for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++)
     218    {
     219      Weapon* weapon = this->weaponManagerSecondary->getWeapon(i);
     220      if (weapon != NULL)
     221      {
     222        weapon->getEnergyWidget()->hide();
     223        //this->weaponsWidgetsSec.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget()));
     224      }
     225    }
     226  }
     227
    135228  this->weaponManager = weaponMan;
     229  this->weaponManagerSecondary = weaponManSec;
    136230
    137231  this->updateWeaponManager();
     
    139233}
    140234
     235/*
     236void Hud::clearWeaponManager()
     237{
     238  //Hide all widgets
     239  if (this->weaponManager != NULL)
     240  {
     241    for (unsigned int i = 0; i < this->weaponManager->getSlotCount(); i++)
     242    {
     243      Weapon* weapon = this->weaponManager->getWeapon(i);
     244      if (weapon != NULL)
     245      {
     246        weapon->getEnergyWidget()->hide();
     247        //this->weaponsWidgetsPrim.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget()));
     248      }
     249    }
     250  }
     251
     252  if (this->weaponManagerSecondary != NULL)
     253  {
     254    for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++)
     255    {
     256      Weapon* weapon = this->weaponManagerSecondary->getWeapon(i);
     257      if (weapon != NULL)
     258      {
     259        weapon->getEnergyWidget()->hide();
     260        //this->weaponsWidgetsSec.remove(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget()));
     261      }
     262    }
     263  }
     264
     265  //this->weaponsWidgetsPrim.clear();
     266  //this->weaponsWidgetsSec.clear();
     267}
     268*/
     269
    141270void Hud::updateWeaponManager()
    142271{
    143272  // hide all the Widgets
    144   std::list<OrxGui::GLGuiWidget*>::iterator weaponWidget;
    145   for (weaponWidget = this->weaponsWidgets.begin(); weaponWidget != this->weaponsWidgets.end(); weaponWidget++)
     273 
     274  std::list<OrxGui::GLGuiEnergyWidgetVertical*>::iterator weaponWidget;
     275  for (weaponWidget = this->weaponsWidgetsPrim.begin(); weaponWidget != this->weaponsWidgetsPrim.end(); weaponWidget++)
    146276  {
    147277    (*weaponWidget)->hide();
    148278  }
    149   this->weaponsWidgets.clear();
     279  this->weaponsWidgetsPrim.clear();
     280
     281  for (weaponWidget = this->weaponsWidgetsSec.begin(); weaponWidget != this->weaponsWidgetsSec.end(); weaponWidget++)
     282  {
     283    (*weaponWidget)->hide();
     284  }
     285  this->weaponsWidgetsSec.clear();
     286 
    150287
    151288  // add all that we need again.
     289
    152290  if (this->weaponManager != NULL)
    153291    for (unsigned int i = 0; i < this->weaponManager->getSlotCount(); i++)
     
    157295      {
    158296        //PRINTF(0)("WEAPON %s::%s in Slots\n", weapon->getClassCName(), weapon->getName());
     297        weapon->getEnergyWidget()->setParent2D(this->rightRect);
    159298        weapon->getEnergyWidget()->show();
    160299        weapon->getEnergyWidget()->setBackgroundColor(Color(.8,.2,.11, 0.1));
    161300        weapon->getEnergyWidget()->setFrontColor(Color( .2,.5,.7,.6));
    162         //      weapon->getEnergyWidget()->frontMaterial().setTransparency(.6);
    163         this->weaponsWidgets.push_back(weapon->getEnergyWidget());
     301        weapon->getEnergyWidget()->setWidgetSize(120,30);
     302        //weapon->getEnergyWidget()->frontMaterial().setTransparency(.6);
     303        this->weaponsWidgetsPrim.push_back(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget()));
    164304      }
    165305    }
     306
     307  if (this->weaponManagerSecondary != NULL)
     308    for (unsigned int i = 0; i < this->weaponManagerSecondary->getSlotCount(); i++)
     309    {
     310      Weapon* weapon = this->weaponManagerSecondary->getWeapon(i);
     311      if (weapon != NULL)
     312      {
     313        //PRINTF(0)("WEAPON %s::%s in Slots\n", weapon->getClassCName(), weapon->getName());
     314        weapon->getEnergyWidget()->setParent2D(this->rightRect);
     315        weapon->getEnergyWidget()->show();
     316        weapon->getEnergyWidget()->setBackgroundColor(Color(.8,.2,.11, 0.1));
     317        weapon->getEnergyWidget()->setFrontColor(Color( .2,.5,.7,.6));
     318        weapon->getEnergyWidget()->setWidgetSize(150,50);
     319        //weapon->getEnergyWidget()->frontMaterial().setTransparency(.6);
     320        this->weaponsWidgetsSec.push_back(dynamic_cast<OrxGui::GLGuiEnergyWidgetVertical*> (weapon->getEnergyWidget()));
     321      }
     322    }
     323
    166324  this->updateResolution();
     325
    167326}
    168327
     
    182341  this->notifier->setWidgetSize(0.25 * this->resX, 0.6 * this->resY);
    183342
     343  int overlayWidth = 0;
     344  if (overlayPercentage >= 20)
     345    overlayWidth = this->resX * (overlayPercentage)/(200);
     346  else
     347    overlayWidth = this->resX * 0.1;
     348  //if (overlayWidth < 100)
     349    //overlayWidth = 100;
     350
     351  this->rightRect->hide();
     352  this->leftRect->hide();
     353
     354  this->leftRect->setParent2D(this);
     355  this->leftRect->setWidgetSize(float(overlayWidth), float(this->resY));
     356  this->leftRect->setAbsCoor2D(0,0);
     357  this->leftRect->setBackgroundTexture(Texture());
     358  this->leftRect->setBackgroundColor(Color(0,0,0.7,0.2));
     359  this->leftRect->setForegroundTexture(Texture());
     360  this->leftRect->setForegroundColor(Color(0,0,0,0));
     361
     362  this->rightRect->setParent2D(this);
     363  this->rightRect->setWidgetSize(float(overlayWidth), float(this->resY));
     364  this->rightRect->setAbsCoor2D(this->resX - overlayWidth,0);
     365  this->rightRect->setBackgroundTexture(Texture());
     366  this->rightRect->setBackgroundColor(Color(0,0,0.7,0.2));
     367  this->rightRect->setForegroundTexture(Texture());
     368  this->rightRect->setForegroundColor(Color(0,0,0,0));
     369
     370
     371  if (this->overlayActive == true)
     372  {
     373    this->rightRect->show();
     374    this->leftRect->show();
     375  }
     376
    184377
    185378  if (State::getPlayer() && State::getPlayer()->getPlayable() && State::getObjectManager())
    186379  {
    187380    PRINTF(4)("UPDATING RADAR\n");
    188     this->_radar->setCenterNode(State::getPlayer()->getPlayable());
    189     this->_radar->addEntityList(&State::getObjectManager()->getEntityList((OM_LIST)(State::getPlayer()->getPlayable()->getOMListNumber()+1)), Color(.4, .4, 1.0));
    190     this->_radar->addEntityList(&State::getObjectManager()->getEntityList(OM_GROUP_02), Color(1.0, .2, .2));
    191     this->_radar->setAbsCoor2D(0.8 * this->resX, 0.01 * this->resY);
    192     this->_radar->setWidgetSize(0.2 * this->resX, 0.2 * this->resY);
     381    this->_radar->setParent2D(this->leftRect);
     382    if (radarCenterNode == NULL)
     383      this->_radar->setCenterNode(State::getPlayer()->getPlayable());
     384    else
     385      this->_radar->setCenterNode(this->radarCenterNode);
     386
     387    //this->_radar->addEntityList(&State::getObjectManager()->getEntityList((OM_LIST)(State::getPlayer()->getPlayable()->getOMListNumber()+1)), Color(.4, .4, 1.0));
     388    this->_radar->addEntityList(&State::getObjectManager()->getEntityList(OM_GROUP_00), Color(1, 0, 0));
     389    this->_radar->addEntityList(&State::getObjectManager()->getEntityList(OM_GROUP_01), Color(0, 0, 1));
     390    this->_radar->setAbsCoor2D(0, 0.01 * this->resY);
     391    this->_radar->setWidgetSize(overlayWidth, overlayWidth);
    193392    this->_radar->setRange(300);
    194393    this->_radar->show();
    195   }
    196 
    197 
    198   if (this->energyWidget != NULL)
    199   {
    200     this->energyWidget->setAbsCoor2D(0.0 * this->resX, 0.85 * this->resY);
    201     this->energyWidget->setWidgetSize(.25 * this->resX, 0.1 * this->resY);
    202   }
    203 
    204 
    205   std::list<OrxGui::GLGuiWidget*>::iterator weaponWidget;
    206   Vector2D pos(0.3, .9);
    207   for (weaponWidget = this->weaponsWidgets.begin(); weaponWidget != this->weaponsWidgets.end(); weaponWidget++, pos.x+=.2)
    208   {
    209     if (pos.x > .8)
    210     {
    211       pos.x = 0.3;
    212       pos.y -= .1;
    213 
    214     }
    215     (*weaponWidget)->setAbsCoor2D(pos.x*this->resX, pos.y*this->resY);
    216     (*weaponWidget)->setWidgetSize(.02*this->resX, .1 *this->resY);
     394   
     395    int statWidgetsNumber = 0;
     396    float expectedArmorSizeX = 0;
     397    float expectedArmorSizeY = 0;
     398    float newSizeY = 0; float newSizeX = 0;
     399    float moduloWidth = 0;
     400
     401    if (this->armorWidget != NULL)
     402    {
     403      expectedArmorSizeX = 150;
     404      expectedArmorSizeY = 50;
     405      statWidgetsNumber++;
     406    }
     407
     408    if (this->shieldWidget != NULL)
     409      statWidgetsNumber++;
     410   
     411    if (this->energyWidget != NULL)
     412      statWidgetsNumber++;
     413
     414    if (expectedArmorSizeY * statWidgetsNumber > overlayWidth)
     415    {
     416      newSizeY = overlayWidth / float(statWidgetsNumber);
     417      newSizeX = expectedArmorSizeX;
     418      PRINTF(0)("Statwidgets resized\n");
     419    }
     420    else
     421    {
     422      newSizeY = expectedArmorSizeY;
     423      newSizeX = expectedArmorSizeX;
     424      moduloWidth = int(overlayWidth) % int(expectedArmorSizeY * statWidgetsNumber);
     425    }
     426
     427    float posY = overlayWidth + newSizeX;
     428
     429    if (this->armorWidget != NULL)
     430    {
     431      this->armorWidget->setSize2D(newSizeX, newSizeY);
     432      this->armorWidget->setRelCoor2D((statWidgetsNumber - 1) * newSizeY + 3 * moduloWidth / (statWidgetsNumber + 1),posY);
     433    }
     434    if (this->shieldWidget != NULL)
     435    {
     436      this->shieldWidget->setSize2D(newSizeX, newSizeY);
     437      this->shieldWidget->setRelCoor2D((statWidgetsNumber - 2) * newSizeY + 2 *moduloWidth / (statWidgetsNumber + 1),posY);
     438    }
     439    if (this->energyWidget != NULL)
     440    {
     441      this->energyWidget->setSize2D(newSizeX, newSizeY);
     442      this->energyWidget->setRelCoor2D(moduloWidth / (statWidgetsNumber + 1),posY);
     443    }
     444
     445    /*
     446    if (this->armorWidget != NULL)
     447      this->armorWidget->setRelCoor2D(100,0.2*this->resY + this->armorWidget->getSizeX2D());
     448    if (this->shieldWidget != NULL)
     449      this->shieldWidget->setRelCoor2D(60,0.2*this->resY + this->armorWidget->getSizeX2D());
     450    if (this->energyWidget != NULL)
     451      this->energyWidget->setRelCoor2D(20,0.2*this->resY + this->armorWidget->getSizeX2D());
     452    */
     453    //this->shieldWidget->setRelCoor2D(0.1*this->resX + this->armorWidget->getSizeX2D(),0);
     454    //this->energyWidget->setRelCoor2D(0.1*this->resX + this->armorWidget->getSizeX2D() + this->shieldWidget->getSizeX2D(),0);
     455  }
     456
     457  /*
     458  if (this->shipValuesBox != NULL)
     459  {
     460    this->shipValuesBox->setAbsCoor2D(0.2 * this->resX, 0.4 * this->resY);
     461    this->shipValuesBox->setWidgetSize(.4 * this->resX, 0.1 * this->resY);
     462  }
     463  else
     464    createShipValuesBox();
     465  */
     466
     467  std::list<OrxGui::GLGuiEnergyWidgetVertical*>::iterator weaponWidget;
     468  Vector2D pos = Vector2D(overlayWidth, 0.4*this->resY);
     469  float largestWidgetSizeX = 0;
     470  //PRINTF(0)("Cur Pos: %f,%f\n",pos.x,pos.y);
     471  // out of reasons i can't get behind, this version is segfaulting when calling getSizeX2D or getSizeY2D. the other
     472  // element2D- related function works tough.. :s
     473
     474  for (weaponWidget = this->weaponsWidgetsPrim.begin(); weaponWidget != this->weaponsWidgetsPrim.end(); weaponWidget++)
     475  {
     476    float ySize = (*weaponWidget)->getSizeY2D();
     477    float xSize = (*weaponWidget)->getSizeX2D();
     478    if (xSize > largestWidgetSizeX)
     479      largestWidgetSizeX = xSize;
     480    if (pos.x < ySize)
     481    {
     482      pos.x = overlayWidth;
     483      pos.y += largestWidgetSizeX;
     484    }
     485    pos.x -= ySize;
     486    (*weaponWidget)->setAbsCoor2D(pos.x + this->rightRect->getAbsCoor2D().x, pos.y);
     487    //(*weaponWidget)->setAbsCoor2D(0,100);
    217488    (*weaponWidget)->show();
    218489    //printf("update thing %s::%s\n", (*weaponWidget)->getClassCName(), (*weaponWidget)->getName());
    219490  }
     491 
     492  weaponWidget = this->weaponsWidgetsSec.begin();
     493  float expectedWidgetSizeY = 0;
     494  if (weaponWidget != this->weaponsWidgetsSec.end())
     495  {
     496    expectedWidgetSizeY = (*weaponWidget)->getSizeY2D();
     497  }
     498  pos.y = resY - expectedWidgetSizeY * 0.6;
     499  pos.x = overlayWidth + this->rightRect->getAbsCoor2D().x;
     500
     501  for (weaponWidget = this->weaponsWidgetsSec.begin(); weaponWidget != this->weaponsWidgetsSec.end(); weaponWidget++)
     502  {
     503    float ySize = (*weaponWidget)->getSizeY2D();
     504    float xSize = (*weaponWidget)->getSizeX2D();
     505    if (xSize > largestWidgetSizeX)
     506      largestWidgetSizeX = xSize;
     507    if (pos.x < ySize)
     508    {
     509      pos.x = overlayWidth;
     510      pos.y -= largestWidgetSizeX + expectedWidgetSizeY * 0.6;
     511    }
     512    pos.x -= ySize;
     513    //PRINTF(0)("secweaponwidget y-size: %f/n", (*weaponWidget)->getSizeY2D());
     514    (*weaponWidget)->setAbsCoor2D(pos.x + this->rightRect->getAbsCoor2D().x, pos.y);
     515    (*weaponWidget)->show();
     516    //printf("update thing %s::%s\n", (*weaponWidget)->getClassCName(), (*weaponWidget)->getName());
     517  }
     518
    220519}
    221520
     
    235534  //  this->inputLine->select();
    236535  }
    237 
    238 
    239 }
    240 
    241 
     536}
     537
     538/*
     539void Hud::createShipValuesBox()
     540{
     541  this->shipValuesBox = new OrxGui::GLGuiBox(OrxGui::Vertical);
     542  //this->shipValuesBox->setWidgetSize(1000,500);
     543  //this->shipValuesBox->setBackgroundTexture("maps/gui_container_background.png");
     544  this->shipValuesBox->setBackgroundTexture(Texture());
     545  this->shipValuesBox->setBackgroundColor(Color(0,0,1,0.5));
     546  this->shipValuesBox->setVisibility(true);
     547}
     548*/
     549
     550
  • branches/playability.merge/src/util/hud.h

    r9869 r10366  
    99#include "element_2d.h"
    1010#include "event_listener.h"
     11#include "glgui_box.h"
     12#include "elements/glgui_energywidgetvertical.h"
    1113
    1214
     
    3941  void setShiledWidget(OrxGui::GLGuiWidget* widget);
    4042  void setArmorWidget(OrxGui::GLGuiWidget* widget);
    41   void setWeaponManager(WeaponManager* weaponMan);
     43  inline OrxGui::GLGuiWidget* getEnergyWidget() {return this->energyWidget;};
     44  inline OrxGui::GLGuiWidget* getShieldWidget() {return this->shieldWidget;};
     45  inline OrxGui::GLGuiWidget* getArmorWidget() {return this->armorWidget;};
     46
     47  void setWeaponManager(WeaponManager* weaponMan, WeaponManager* weaponManSec = NULL);
     48  inline void setRadarCenterNode(PNode* node) {this->radarCenterNode = node;};
    4249
    4350  void addWeaponWidget(OrxGui::GLGuiWidget* widget);
     
    4754
    4855  void updateWeaponManager();
     56  //void clearWeaponManager();
     57
     58  inline void setOverlayPercentage(int perc)
     59  {
     60    if (perc > 100) perc = 100;
     61    else if (perc < 0) perc = 0;
     62
     63    this->overlayPercentage = perc;
     64    updateResolution();
     65  };
     66
     67  inline void setOverlayActive(bool b)
     68  {
     69    overlayActive = b;
     70    updateResolution();
     71  };
    4972
    5073  void draw() const;
     
    5477  private:
    5578    void updateResolution();
     79    //void createShipValuesBox();
    5680
    5781private:
    5882  unsigned int             resX;
    5983  unsigned int             resY;
     84
     85  float                    travelZoneWidth; //the percentage of the screen, the player has got for his movements. should always be a value between 0 and 1;
    6086
    6187  OrxGui::GLGuiWidget*     energyWidget;
     
    6692  OrxGui::GLGuiInputLine*  inputLine;
    6793  OrxGui::GLGuiRadar*      _radar;
     94  PNode*                   radarCenterNode;
     95
     96  OrxGui::GLGuiWidget*     rightRect;
     97  OrxGui::GLGuiWidget*     leftRect;
     98  bool                     overlayActive;
     99  int                      overlayPercentage; //the percentage of the screen, the player has got for his movements. should always be a value between 0 and 1;
    68100
    69101  WeaponManager*           weaponManager;
     102  WeaponManager*           weaponManagerSecondary;
    70103
    71   std::list<OrxGui::GLGuiWidget*> weaponsWidgets; //!< WeaponWidgets will be displayed one after another
     104  std::list<OrxGui::GLGuiEnergyWidgetVertical*> weaponsWidgetsPrim; //!< WeaponWidgets will be displayed one after another
     105  std::list<OrxGui::GLGuiEnergyWidgetVertical*> weaponsWidgetsSec;
    72106};
    73107
  • branches/playability.merge/src/util/state.h

    r8408 r10366  
    109109  static inline int getMenuID() { return State::menuID;}
    110110
     111  ////////////////////////
     112  /// Scroller-Control ///
     113  ////////////////////////
     114  /** sets the scroller-travelnode (center of the screen) */
     115  static void setTravelNode(PNode* travelNode) {State::travelNode = travelNode;}
     116  /** @returns the scroller-travelnode (center of the screen) */
     117  static PNode* getTravelNode() { return State::travelNode; }
    111118
    112119
     
    123130  static GameRules*             gameRules;          //!< A reference to the GameRules
    124131  static Player*                player;             //!< A reference to the Player
     132  static PNode*                 travelNode;         //!< A reference to the scroller-travelnode
    125133
    126134  static SkyBox*                skyBox;            //!< The SkyBox used in the current world.
  • branches/playability.merge/src/util/track/track_manager.cc

    r10320 r10366  
    2626#include "t_animation.h"
    2727
     28#include <string.h>
     29
    2830
    2931#include "parser/tinyxml/tinyxml.h"
     
    3234#include <stdarg.h>
    3335
     36ObjectListDefinition(TrackElement);
    3437
    3538
     
    3942TrackElement::TrackElement()
    4043{
    41   this->setClassID(CL_TRACK_ELEMENT, "TrackElement");
     44  this->registerObject(this, TrackElement::_objectList);
     45
    4246
    4347  this->isFresh = true;
     
    126130{
    127131  // return if Found.
    128   if (this->getName() && !strcmp(this->getName(), trackName))
    129     return this;
     132//   if (this->getName() && !strcmp(this->getName(), trackName))
     133//     return this;
    130134  // search all children
    131135  if (this->childCount > 0)
     
    217221void TrackElement::debug() const
    218222{
    219   PRINT(0)("--== TrackElement:%i ==--", this->ID);
    220   if(this->getName())
    221     PRINT(0)("--++Name: %s++--", this->getName());
    222   if(this->isFresh)
    223     PRINT(0)("  -- has not jet eddited in any way --\n");
    224   PRINT(0)("\n   TimeTable: startingTime=%f; endTime=%f; duration=%f; jumpTime=%f\n", this->startingTime, this->endTime, this->duration, this->jumpTime);
    225   PRINT(0)("   consists of %d Points\n", this->nodeCount);
    226   if (this->childCount == 0)
    227     PRINT(0)("   has no child\n");
    228   else if (this->childCount == 1)
    229     PRINT(0)("   has 1 child: =%d=\n", this->getChild(0)->ID);
    230   else if (this->childCount > 1)
    231     {
    232       PRINT(0)("   has %d children: ", this->childCount);
    233       //TrackElement* enumElem = this->children->enumerate();
    234       tIterator<TrackElement>* iterator = this->children->getIterator();
    235       TrackElement* enumElem = iterator->firstElement();
    236       while (enumElem)
    237         {
    238           PRINT(0)("=%d= ", enumElem->ID);
    239           enumElem = iterator->nextElement();
    240         }
    241       delete iterator;
    242       PRINT(0)("\n");
    243     }
    244 
    245   if(this->isHotPoint)
    246     PRINT(0)("   is a special Point:\n");
    247   if(this->isSavePoint)
    248     PRINT(0)("    is a SavePoint\n");
    249   if(this->isFork)
    250     {
    251       PRINT(0)("    is A Fork with with %d children.\n", this->childCount);
    252     }
    253   if(this->isJoined)
    254     PRINT(0)("   is Joined at the End\n");
    255 
    256   if(!this->backLoopCheck()) /* this should not happen */
    257     PRINT(2)(" THERE IS A BACKLOOP TO THIS ELEMENT\n");
     223//   PRINT(0)("--== TrackElement:%i ==--", this->ID);
     224//   if(this->getName())
     225//     PRINT(0)("--++Name: %s++--", this->getName());
     226//   if(this->isFresh)
     227//     PRINT(0)("  -- has not jet eddited in any way --\n");
     228//   PRINT(0)("\n   TimeTable: startingTime=%f; endTime=%f; duration=%f; jumpTime=%f\n", this->startingTime, this->endTime, this->duration, this->jumpTime);
     229//   PRINT(0)("   consists of %d Points\n", this->nodeCount);
     230//   if (this->childCount == 0)
     231//     PRINT(0)("   has no child\n");
     232//   else if (this->childCount == 1)
     233//     PRINT(0)("   has 1 child: =%d=\n", this->getChild(0)->ID);
     234//   else if (this->childCount > 1)
     235//     {
     236//       PRINT(0)("   has %d children: ", this->childCount);
     237//       //TrackElement* enumElem = this->children->enumerate();
     238//       tIterator<TrackElement>* iterator = this->children->getIterator();
     239//       TrackElement* enumElem = iterator->firstElement();
     240//       while (enumElem)
     241//         {
     242//           PRINT(0)("=%d= ", enumElem->ID);
     243//           enumElem = iterator->nextElement();
     244//         }
     245//       delete iterator;
     246//       PRINT(0)("\n");
     247//     }
     248//
     249//   if(this->isHotPoint)
     250//     PRINT(0)("   is a special Point:\n");
     251//   if(this->isSavePoint)
     252//     PRINT(0)("    is a SavePoint\n");
     253//   if(this->isFork)
     254//     {
     255//       PRINT(0)("    is A Fork with with %d children.\n", this->childCount);
     256//     }
     257//   if(this->isJoined)
     258//     PRINT(0)("   is Joined at the End\n");
     259//
     260//   if(!this->backLoopCheck()) /* this should not happen */
     261//     PRINT(2)(" THERE IS A BACKLOOP TO THIS ELEMENT\n");
    258262}
    259263
     
    358362TrackManager::TrackManager()
    359363{
    360   this->setClassID(CL_TRACK_MANAGER, "TrackManager");
    361   this->setName("TrackManager");
    362 
    363364  TrackManager::singletonRef = this; // do this because otherwise the TrackNode cannot get The instance of the TrackManager
    364365
     
    395396void TrackManager::loadParams(const TiXmlElement* root)
    396397{
    397   double x, y, z, d;
    398 
    399   LOAD_PARAM_START_CYCLE(root, element);
    400   {
    401 
    402     LoadParam_CYCLE(element, "WorkOn", this, TrackManager, workOnS)
    403         .describe("Selects a TrackElement (by name) to work on");
    404 
    405     LoadParam_CYCLE(element, "Point", this, TrackManager, addPoint)
    406         .describe("Adds a new Point to the currently selected TrackElement");
    407 
    408     LoadParam_CYCLE(element, "Duration", this, TrackManager, setDuration)
    409         .describe("Sets the Duration of the currently selected TrackElement");
    410 
    411     LoadParam_CYCLE(element, "HotPoint", this, TrackManager, addHotPoint)
    412         .describe("Sets a new Point that acts as a hot point. meaning, the curve will flow through this Point");
    413 
    414     LoadParam_CYCLE(element, "SavePoint", this, TrackManager, setSavePointS)
    415         .describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on");
    416 
    417     LoadParam_CYCLE(element, "Fork", this, TrackManager, forkS)
    418         .describe("Forks the Path into multiple forked Path names seperated by ','");
    419 
    420     LoadParam_CYCLE(element, "Join", this, TrackManager, joinS)
    421         .describe("Joins multiple joining Path names seperated by ','");
     398//   double x, y, z, d;
     399//
     400//   LOAD_PARAM_START_CYCLE(root, element);
     401//   {
     402//
     403//     LoadParam_CYCLE(element, "WorkOn", this, TrackManager, workOnS)
     404//         .describe("Selects a TrackElement (by name) to work on");
     405//
     406//     LoadParam_CYCLE(element, "Point", this, TrackManager, addPoint)
     407//         .describe("Adds a new Point to the currently selected TrackElement");
     408//
     409//     LoadParam_CYCLE(element, "Duration", this, TrackManager, setDuration)
     410//         .describe("Sets the Duration of the currently selected TrackElement");
     411//
     412//     LoadParam_CYCLE(element, "HotPoint", this, TrackManager, addHotPoint)
     413//         .describe("Sets a new Point that acts as a hot point. meaning, the curve will flow through this Point");
     414//
     415//     LoadParam_CYCLE(element, "SavePoint", this, TrackManager, setSavePointS)
     416//         .describe("Sets the current selected Point to a Savepoint, meaning that the curve will be ended and a new one starts, and that one starts again from this point on");
     417//
     418//     LoadParam_CYCLE(element, "Fork", this, TrackManager, forkS)
     419//         .describe("Forks the Path into multiple forked Path names seperated by ','");
     420//
     421//     LoadParam_CYCLE(element, "Join", this, TrackManager, joinS)
     422//         .describe("Joins multiple joining Path names seperated by ','");
    422423
    423424      /*
     
    445446        }
    446447      */
    447   }
    448   LOAD_PARAM_END_CYCLE(element);
     448
     449//   }
     450//   LOAD_PARAM_END_CYCLE(element);
    449451}
    450452
     
    477479void TrackManager::initChildren(unsigned int childCount, TrackElement* trackElem)
    478480{
    479   if (!trackElem)
    480     trackElem = this->currentTrackElem;
    481 
    482   trackElem->childCount = childCount;
    483   trackElem->mainJoin = true;  // this tells join, that this one is the Main Join, if it tries to join multiple Tracks
    484   trackElem->children =  new tList<TrackElement>();
    485   for (int i = 0; i < childCount; i++)
    486     {
    487       // create a new Element
    488       TrackElement* newElem = new TrackElement();
    489       // setting up the new ID
    490       newElem->ID = ++trackElemCount;
    491       // setting up the Time
    492       newElem->startingTime = trackElem->endTime + trackElem->jumpTime;
    493       // adds the conection Point
    494       this->addPointV(trackElem->curve->getNode(trackElem->curve->getNodeCount()),
    495                      newElem);
    496       // add the new child to the childList.
    497       trackElem->children->add(newElem);
    498     }
    499 
    500   // setting the Name of the new TrackElement to the name of the last one + _childI
    501 
    502   if (trackElem->getName())
    503     {
    504       for (int i = 0; i < trackElem->childCount; i++)
    505       {
    506         char* childName = new char[strlen(trackElem->getName())+10];
    507         sprintf(childName, "%s_child%d", trackElem->getName(), i);
    508         trackElem->getChild(i)->setName(childName);
    509       }
    510     }
    511   // select the first Child to work on.
    512   this->currentTrackElem = trackElem->getChild(0);
     481//   if (!trackElem)
     482//     trackElem = this->currentTrackElem;
     483//
     484//   trackElem->childCount = childCount;
     485//   trackElem->mainJoin = true;  // this tells join, that this one is the Main Join, if it tries to join multiple Tracks
     486//   trackElem->children =  new tList<TrackElement>();
     487//   for (int i = 0; i < childCount; i++)
     488//     {
     489//       // create a new Element
     490//       TrackElement* newElem = new TrackElement();
     491//       // setting up the new ID
     492//       newElem->ID = ++trackElemCount;
     493//       // setting up the Time
     494//       newElem->startingTime = trackElem->endTime + trackElem->jumpTime;
     495//       // adds the conection Point
     496//       this->addPointV(trackElem->curve->getNode(trackElem->curve->getNodeCount()),
     497//                      newElem);
     498//       // add the new child to the childList.
     499//       trackElem->children->add(newElem);
     500//     }
     501//
     502//   // setting the Name of the new TrackElement to the name of the last one + _childI
     503//
     504//   if (trackElem->getName())
     505//     {
     506//       for (int i = 0; i < trackElem->childCount; i++)
     507//       {
     508//         char* childName = new char[strlen(trackElem->getName())+10];
     509//         sprintf(childName, "%s_child%d", trackElem->getName(), i);
     510//         trackElem->getChild(i)->setName(childName);
     511//       }
     512//     }
     513//   // select the first Child to work on.
     514//   this->currentTrackElem = trackElem->getChild(0);
    513515}
    514516
     
    659661void TrackManager::setSavePointS(const std::string& nextElementName)
    660662{
    661   this->setSavePoint(NULL);
    662   if (strcmp(nextElementName, ""))
    663     this->firstTrackElem->findByID(this->trackElemCount)->setName(nextElementName);
     663//   this->setSavePoint(NULL);
     664//   if (strcmp(nextElementName, ""))
     665//     this->firstTrackElem->findByID(this->trackElemCount)->setName(nextElementName);
    664666}
    665667
     
    736738void TrackManager::forkS(const std::string& forkString)
    737739{
    738   SubString strings(forkString, ',');
    739 
    740   int* trackIDs = new int[strings.getCount()];
    741   this->forkV(strings.getCount(), trackIDs, NULL);
    742 
    743   for(int i = 0; i < strings.getCount(); i++)
    744     {
    745       this->firstTrackElem->findByID(trackIDs[i])->setName(strings.getString(i));
    746     }
    747   delete []trackIDs;
     740//   SubString strings(forkString, ',');
     741//
     742//   int* trackIDs = new int[strings.getCount()];
     743//   this->forkV(strings.getCount(), trackIDs, NULL);
     744//
     745//   for(int i = 0; i < strings.getCount(); i++)
     746//     {
     747//       this->firstTrackElem->findByID(trackIDs[i])->setName(strings.getString(i));
     748//     }
     749//   delete []trackIDs;
    748750}
    749751
     
    877879void TrackManager::joinS(const std::string& joinString)
    878880{
    879   SubString strings(joinString, ',');
    880 
    881   int* trackIDs = new int[strings.getCount()];
    882   this->joinV(strings.getCount(), trackIDs);
    883 
    884   for(unsigned int i = 0; i < strings.getCount(); i++)
    885     {
    886       TrackElement* tmpElem = this->firstTrackElem->findByName(strings.getString(i).c_str());
    887       if (tmpElem != NULL)
    888         trackIDs[i] = tmpElem->ID;
    889       else
    890       {
    891         PRINTF(1)("Trying to join a Track, of which the name does not exist: %s\n", strings.getString(i).c_str());
    892         trackIDs[i] = -1;
    893       }
    894     }
    895   this->joinV(strings.getCount(), trackIDs);
    896   delete []trackIDs;
     881//   SubString strings(joinString, ',');
     882//
     883//   int* trackIDs = new int[strings.getCount()];
     884//   this->joinV(strings.getCount(), trackIDs);
     885//
     886//   for(unsigned int i = 0; i < strings.getCount(); i++)
     887//     {
     888//       TrackElement* tmpElem = this->firstTrackElem->findByName(strings.getString(i).c_str());
     889//       if (tmpElem != NULL)
     890//         trackIDs[i] = tmpElem->ID;
     891//       else
     892//       {
     893//         PRINTF(1)("Trying to join a Track, of which the name does not exist: %s\n", strings.getString(i).c_str());
     894//         trackIDs[i] = -1;
     895//       }
     896//     }
     897//   this->joinV(strings.getCount(), trackIDs);
     898//   delete []trackIDs;
    897899}
    898900
     
    10731075void TrackManager::tick(float dt)
    10741076{
    1075   PRINTF(4)("CurrentTrackID: %d, LocalTime is: %f, timestep is: %f\n", this->currentTrackElem->ID, this->localTime, dt);
    1076   if (this->localTime <= this->firstTrackElem->duration)
    1077     this->jumpTo(this->localTime);
    1078   if (this->localTime <= this->maxTime)
    1079     this->localTime += dt;
    1080   if (this->localTime > this->currentTrackElem->endTime
    1081       && this->currentTrackElem->children)
    1082     {
    1083       if (this->currentTrackElem->jumpTime != 0.0)
    1084         this->jumpTo(this->localTime + this->currentTrackElem->jumpTime);
    1085       // jump to the next TrackElement and also set the history of the new Element to the old one.
    1086       TrackElement* tmpHistoryElem = this->currentTrackElem;
    1087       this->currentTrackElem = this->currentTrackElem->getChild(this->choosePath(this->currentTrackElem));
    1088       this->currentTrackElem->history = tmpHistoryElem;
    1089       if (this->currentTrackElem->getName())
    1090         {
    1091           this->trackText->setText(this->currentTrackElem->getName());
    1092           this->textAnimation->replay();
    1093         }
    1094     }
    1095   if (this->bindSlave)
    1096     {
    1097       Vector tmp = this->calcPos();
    1098       Quaternion quat = Quaternion(this->calcDir(), Vector(this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).x,1,this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).z));
    1099 
    1100       Vector v(0.0, 1.0, 0.0);
    1101       Quaternion q(-PI/2, v);
    1102       quat = quat * q;
    1103 
    1104       this->bindSlave->setAbsCoor(tmp);
    1105       this->bindSlave->setAbsDir(quat);
    1106     }
     1077//   PRINTF(4)("CurrentTrackID: %d, LocalTime is: %f, timestep is: %f\n", this->currentTrackElem->ID, this->localTime, dt);
     1078//   if (this->localTime <= this->firstTrackElem->duration)
     1079//     this->jumpTo(this->localTime);
     1080//   if (this->localTime <= this->maxTime)
     1081//     this->localTime += dt;
     1082//   if (this->localTime > this->currentTrackElem->endTime
     1083//       && this->currentTrackElem->children)
     1084//     {
     1085//       if (this->currentTrackElem->jumpTime != 0.0)
     1086//         this->jumpTo(this->localTime + this->currentTrackElem->jumpTime);
     1087//       // jump to the next TrackElement and also set the history of the new Element to the old one.
     1088//       TrackElement* tmpHistoryElem = this->currentTrackElem;
     1089//       this->currentTrackElem = this->currentTrackElem->getChild(this->choosePath(this->currentTrackElem));
     1090//       this->currentTrackElem->history = tmpHistoryElem;
     1091//       if (this->currentTrackElem->getName())
     1092//         {
     1093//           this->trackText->setText(this->currentTrackElem->getName());
     1094//           this->textAnimation->replay();
     1095//         }
     1096//     }
     1097//   if (this->bindSlave)
     1098//     {
     1099//       Vector tmp = this->calcPos();
     1100//       Quaternion quat = Quaternion(this->calcDir(), Vector(this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).x,1,this->currentTrackElem->curve->calcAcc((localTime-this->currentTrackElem->startingTime)/this->currentTrackElem->duration).z));
     1101//
     1102//       Vector v(0.0, 1.0, 0.0);
     1103//       Quaternion q(-PI/2, v);
     1104//       quat = quat * q;
     1105//
     1106//       this->bindSlave->setAbsCoor(tmp);
     1107//       this->bindSlave->setAbsDir(quat);
     1108//     }
    11071109}
    11081110
     
    11161118void TrackManager::jumpTo(float time)
    11171119{
    1118   if (time == 0)
    1119     {
    1120       this->currentTrackElem = this->firstTrackElem;
    1121       if (this->currentTrackElem->getName())
    1122         {
    1123           this->trackText->setText(this->currentTrackElem->getName());
    1124           this->textAnimation->play();
    1125         }
    1126     }
    1127   this->localTime = time;
     1120//   if (time == 0)
     1121//     {
     1122//       this->currentTrackElem = this->firstTrackElem;
     1123//       if (this->currentTrackElem->getName())
     1124//         {
     1125//           this->trackText->setText(this->currentTrackElem->getName());
     1126//           this->textAnimation->play();
     1127//         }
     1128//     }
     1129//   this->localTime = time;
    11281130}
    11291131
  • branches/playability.merge/src/util/track/track_manager.h

    r7221 r10366  
    4141class TrackElement : public BaseObject
    4242{
     43  ObjectListDeclaration(TrackElement);
     44
    4345 public:
    4446  TrackElement();
     
    131133    \li TrackElement: A Part of A whole Track
    132134*/
    133 class TrackManager : public BaseObject
     135class TrackManager
    134136{
    135137 public:
  • branches/playability.merge/src/util/track/track_node.cc

    r9869 r10366  
    1717
    1818
    19 #include "track_node.h"
     19#include "track/track_node.h"
    2020
    21 #include "track_manager.h"
     21#include "track/track_manager.h"
    2222
    2323
    24 ObjectListDefinition(TracNode);
     24ObjectListDefinition(TrackNode);
     25
    2526/**
    2627 *  standard constructor
     
    2829TrackNode::TrackNode ()
    2930{
    30   this->registerObject(this, TracNode::_objectList);
    31   this->setName("TrackNode");
     31  this->registerObject(this, TrackNode::_objectList);
    3232
    3333  PNode::getNullParent()->addChild(this);
  • branches/playability.merge/src/util/track/track_node.h

    r9869 r10366  
    1414#include "p_node.h"
    1515
     16
    1617/* FORWARD DECLARATION */
    1718class TrackManager;
     
    2021class TrackNode : public PNode
    2122{
    22   ObjectListDeclaratrion(TracNode);
     23  ObjectListDeclaration(TrackNode);
    2324 public:
    2425  TrackNode ();
  • branches/playability.merge/src/world_entities/Makefile.am

    r9869 r10366  
    66
    77## THESE ARE THE BASE CLASSES OF ALL WORLD_ENTITIES
    8 libORXwe_a_SOURCES = \
    9                 world_entity.cc \
    10                 \
    11                 camera.cc \
    12                 playable.cc \
    13                 player.cc \
    14                 \
    15                 npcs/npc.cc \
    16                 \
    17                 weapons/weapon_manager.cc \
    18                 weapons/crosshair.cc \
    19                 weapons/weapon.cc \
    20                 weapons/ammo_container.cc \
    21                 projectiles/projectile.cc \
    22                 \
    23                 extendable.cc \
    24                 power_ups/power_up.cc \
    25                 power_ups/param_power_up.cc \
    26                 power_ups/weapon_power_up.cc \
    27                 \
    28                 spawning_point.cc \
    29                 \
    30                 \
    31                 effects/explosion.cc \
    32                 effects/billboard.cc \
    33                 \
    34                 \
    35                 elements/glgui_energywidget.cc
     8libORXwe_a_SOURCES = world_entity.cc                            camera.cc               playable.cc             player.cc \
     9                                                npcs/npc.cc                             weapons/weapon_manager.cc               weapons/crosshair.cc \
     10                                weapons/weapon.cc               weapons/ammo_container.cc               projectiles/projectile.cc \
     11                                                extendable.cc           power_ups/power_up.cc           power_ups/param_power_up.cc \
     12                                power_ups/weapon_power_up.cc                            spawning_point.cc                                               effects/explosion.cc            effects/billboard.cc            effects/wobblegrid.cc\
     13                                effects/trail.cc                                elements/glgui_energywidget.cc elements/glgui_energywidgetvertical.cc
    3614
    3715
    38 noinst_HEADERS  = \
    39                 world_entity.h \
    40                 \
    41                 camera.h \
    42                 extendable.h \
    43                 playable.h \
    44                 player.h \
    45                 \
    46                 npcs/npc.h \
    47                 \
    48                 weapons/weapon_manager.h \
    49                 weapons/crosshair.h \
    50                 weapons/weapon.h \
    51                 weapons/ammo_container.h \
    52                 projectiles/projectile.h \
    53                 \
    54                 power_ups/power_up.h \
    55                 power_ups/param_power_up.h \
    56                 power_ups/weapon_power_up.h \
    57                 \
    58                 spawning_point.h \
    59                 \
    60                 \
    61                 effects/explosion.h \
    62                 effects/billboard.h \
    63                 \
    64                 \
    65                 \
    66                 elements/glgui_energywidget.h \
    67                 \
    68                 \
    69                 $(WorldEntities_HEADERS_)
     16noinst_HEADERS = world_entity.h                                 camera.h                extendable.h            playable.h \
     17                                player.h                                npcs/npc.h                              weapons/weapon_manager.h                weapons/crosshair.h \
     18                                weapons/weapon.h                weapons/ammo_container.h                projectiles/projectile.h \
     19                                                power_ups/power_up.h            power_ups/param_power_up.h              power_ups/weapon_power_up.h \
     20                                                spawning_point.h                                                effects/explosion.h             effects/billboard.h             effects/trail.h                 effects/wobblegrid.h\
     21                                                                                elements/glgui_energywidget.h elements/glgui_energywidgetvertical.h
    7022
    7123
  • branches/playability.merge/src/world_entities/WorldEntities.am

    r10321 r10366  
    2323                world_entities/character_attributes.cc \
    2424                world_entities/test_entity.cc \
     25                world_entities/test_entity2.cc \
    2526                world_entities/planet.cc \
    2627                world_entities/bsp_entity.cc \
     
    3940                world_entities/weapons/fps_sniper_rifle.cc \
    4041                world_entities/weapons/boomerang_gun.cc \
    41                 \
     42                world_entities/weapons/light_blaster.cc \
     43                world_entities/weapons/medium_blaster.cc \
     44                world_entities/weapons/heavy_blaster.cc \
     45                world_entities/weapons/swarm_launcher.cc \
     46                world_entities/weapons/spike_launcher.cc \
     47                world_entities/weapons/spike_thrower.cc \
     48                world_entities/weapons/acid_launcher.cc \
     49                \
     50                world_entities/projectiles/lbolt.cc \
     51                world_entities/projectiles/mbolt.cc \
     52                world_entities/projectiles/hbolt.cc \
     53                world_entities/projectiles/swarm_projectile.cc \
    4254                world_entities/projectiles/bomb.cc \
    4355                world_entities/projectiles/laser.cc \
     
    4860                world_entities/projectiles/boomerang_projectile.cc \
    4961                world_entities/projectiles/hyperblast.cc \
     62                world_entities/projectiles/spike.cc \
     63                world_entities/projectiles/acid_splash.cc \
     64                \
     65                world_entities/projectiles/projectile_weapon.cc \
     66                world_entities/projectiles/spike_ball.cc \
    5067                \
    5168                world_entities/power_ups/turret_power_up.cc \
     
    83100                world_entities/particles/box_emitter.cc \
    84101                world_entities/particles/plane_emitter.cc \
     102        world_entities/particles/emitter_node.cc \
    85103                \
    86104                world_entities/particles/particle_system.cc \
     
    129147                character_attributes.h \
    130148                test_entity.h \
     149                test_entity2.h \
    131150                planet.h \
    132151                bsp_entity.h \
     
    145164                weapons/aiming_system.h \
    146165                weapons/fps_sniper_rifle.h \
    147                 \
     166                weapons/light_blaster.h \
     167                weapons/medium_blaster.h \
     168                weapons/heavy_blaster.h \
     169                weapons/swarm_launcher.h \
     170                weapons/spike_launcher.h \
     171                weapons/spike_thrower.h \
     172                weapons/acid_launcher.h \
     173                \
     174                projectiles/lbolt.h \
     175                projectiles/mbolt.h \
     176                projectiles/hbolt.h \
     177                projectiles/swarm_projectile.h \
    148178                projectiles/bomb.h \
    149179                projectiles/laser.h \
     
    154184                projectiles/boomerang_projectile.h \
    155185                projectiles/hyperblast.h \
     186                projectiles/spike.h \
     187                projectiles/spike_ball.h \
     188                projectiles/acid_splash.h \
     189                \
     190                projectiles/projectile_weapon.h \
     191                projectiles/spike_ball.h \
    156192                \
    157193                power_ups/turret_power_up.h \
     
    172208                environments/model_entity.h \
    173209                environments/building.h \
    174                 environments/rotor.h \
    175210                environments/mapped_water.h \
     211                environments/rotor.h \
    176212                \
    177213                elements/image_entity.h \
     
    188224                particles/box_emitter.h \
    189225                particles/plane_emitter.h \
     226        particles/emitter_node.h \
    190227                \
    191228                particles/particle_system.h \
  • branches/playability.merge/src/world_entities/camera.cc

    r9869 r10366  
    1818#include "key_mapper.h"
    1919#include "glincl.h"
     20//#include "util/loading/load_param.h"
     21#include "world_entity.h"
    2022
    2123ObjectListDefinition(Camera);
     
    2729{
    2830  this->registerObject(this, Camera::_objectList);
     31  this->init();
     32}
     33
     34/*
     35Camera::Camera(const TiXmlElement* root)
     36{
     37  this->registerObject(this, Camera::_objectList);
     38  this->init();
     39  this->loadParams(root);
     40}
     41*/
     42
     43/**
     44 *  default destructor
     45*/
     46Camera::~Camera()
     47{}
     48
     49void Camera::init()
     50{
    2951  this->setName("camera");
    3052  this->target = new CameraTarget();
     
    3759  this->subscribeEvent(ES_GAME, KeyMapper::PEV_VIEW5);
    3860
    39   this->setFovy(90);
    40   this->setAspectRatio(1.2f);
     61  //this->setFovy(90);
     62  this->setAspectRatio(1.33f);
    4163  this->setClipRegion(.1, 10000);
     64 
     65  this->viewTopFovy = 60;
     66  this->viewNormalFovy = 90;
     67  this->viewFrontFovy = 120;
     68  this->viewRightFovy = 90;
     69  this->viewLeftFovy = 90;
     70
     71  this->viewTopDistance = 70;
     72  this->viewNormalDistance = 10;
     73  this->viewFrontDistance = 4;
     74  this->viewRightDistance = 10;
     75  this->viewLeftDistance = 10;
     76
     77  //this->loadParams(doc.RootElement());
    4278
    4379  this->setViewMode(Camera::ViewNormal);
    4480
    4581  this->setParentMode(PNODE_ALL);
    46 }
    47 
    48 /**
    49  *  default destructor
    50 */
    51 Camera::~Camera()
    52 {}
     82  this->eventHandling = true;
     83}
    5384
    5485/**
     
    100131    default:
    101132    case Camera::ViewNormal:
    102       this->toFovy = 60.0;
    103       this->setRelCoorSoft(-10, 5, 0);
     133    {
     134      this->fovy = viewNormalFovy;
     135      this->toFovy = viewNormalFovy;
     136      //this->fovy = 60;
     137      //this->toFovy = 60;
     138      this->setRelCoorSoft(-2.0/3.0 * this->viewNormalDistance, 1.0/3.0 * this->viewNormalDistance, 0);
    104139      this->target->setRelCoorSoft(0,0,0);
    105140      break;
     141    }
    106142    case Camera::ViewBehind:
    107143      break;
    108144    case Camera::ViewFront:
    109       this->toFovy = 120.0;
    110       this->setRelCoorSoft(4, 0, 0, 5);
     145    {
     146      this->fovy = viewFrontFovy;
     147      this->toFovy = viewFrontFovy;
     148      this->setRelCoorSoft(this->viewFrontDistance, 0, 0, 5);
    111149      this->target->setRelCoorSoft(Vector(10,0,0), 5);
    112150      break;
     151    }
    113152    case Camera::ViewLeft:
    114       this->toFovy = 90;
    115       this->setRelCoorSoft(0, 1, -10, .5);
     153    {
     154      this->fovy = viewLeftFovy;
     155      this->toFovy = viewLeftFovy;
     156      this->setRelCoorSoft(0, 1, -viewLeftDistance, .5);
    116157      this->target->setRelCoorSoft(0,0,0);
    117158      break;
     159    }
    118160    case Camera::ViewRight:
    119       this->toFovy = 90;
    120       this->setRelCoorSoft(Vector(0, 1, 10));
     161    {
     162      this->fovy = viewRightFovy;
     163      this->toFovy = viewRightFovy;
     164      this->setRelCoorSoft(Vector(0, 1, viewRightDistance), 0.5);
    121165      this->target->setRelCoorSoft(0,0,0);
    122166      break;
     167    }
    123168    case Camera::ViewTop:
    124       this->toFovy= 120;
    125       this->setRelCoorSoft(Vector(30, 50, 0));
    126       this->target->setRelCoorSoft(35,0,0);
     169    {
     170      this->fovy= viewTopFovy;
     171      this->toFovy = viewTopFovy;
     172      this->setRelCoor(Vector(-0.05, this->viewTopDistance , 0));
     173      this->target->setRelCoor(0,0,0);
     174    }
    127175  }
    128176}
     
    143191
    144192  float tmpFovy = (this->toFovy - this->fovy);
    145   if (tmpFovy > 0.01)
     193  if (fabsf(tmpFovy) > 0.01)
    146194    this->fovy += tmpFovy * fabsf(dt);
    147195}
     
    192240void Camera::process(const Event &event)
    193241{
    194   if( event.type == KeyMapper::PEV_VIEW0)
     242  if (eventHandling == true)
    195243  {
    196     this->setViewMode(Camera::ViewNormal);
     244    if( event.type == KeyMapper::PEV_VIEW0)
     245    {
     246      this->setViewMode(Camera::ViewNormal);
     247    }
     248    else if( event.type == KeyMapper::PEV_VIEW1)
     249    {
     250      this->setViewMode(Camera::ViewBehind);
     251    }
     252    else if( event.type == KeyMapper::PEV_VIEW2)
     253    {
     254      this->setViewMode(Camera::ViewFront);
     255    }
     256    else if( event.type == KeyMapper::PEV_VIEW3)
     257    {
     258      this->setViewMode(Camera::ViewLeft);
     259    }
     260    else if( event.type == KeyMapper::PEV_VIEW4)
     261    {
     262      this->setViewMode(Camera::ViewRight);
     263    }
     264    else if( event.type == KeyMapper::PEV_VIEW5)
     265    {
     266      this->setViewMode(Camera::ViewTop);
     267    }
    197268  }
    198   else if( event.type == KeyMapper::PEV_VIEW1)
    199   {
    200     this->setViewMode(Camera::ViewBehind);
    201   }
    202   else if( event.type == KeyMapper::PEV_VIEW2)
    203   {
    204     this->setViewMode(Camera::ViewFront);
    205   }
    206   else if( event.type == KeyMapper::PEV_VIEW3)
    207   {
    208     this->setViewMode(Camera::ViewLeft);
    209   }
    210   else if( event.type == KeyMapper::PEV_VIEW4)
    211   {
    212     this->setViewMode(Camera::ViewRight);
    213   }
    214   else if( event.type == KeyMapper::PEV_VIEW5)
    215   {
    216     this->setViewMode(Camera::ViewTop);
    217   }
     269}
     270
     271/*
     272void Camera::loadParams(const TiXmlElement* root)
     273{
     274  // Do the PNode loading stuff
     275  PNode::loadParams(root);
     276
     277  LoadParam(root, "viewTopFovy", this, Camera, setViewTopFovy);
     278  LoadParam(root, "viewFrontFovy", this, Camera, setViewFrontFovy);
     279  LoadParam(root, "viewLeftFovy", this, Camera, setViewLeftFovy);
     280  LoadParam(root, "viewRightFovy", this, Camera, setViewRightFovy);
     281  LoadParam(root, "viewBehindFovy", this, Camera, setViewBehindFovy);
     282  LoadParam(root, "viewNormalFovy", this, Camera, setViewNormalFovy);
     283
     284  LoadParam(root, "viewTopDistance", this, Camera, setViewTopDistance);
     285  LoadParam(root, "viewFrontDistance", this, Camera, setViewFrontDistance);
     286  LoadParam(root, "viewLeftDistance", this, Camera, setViewLeftDistance);
     287  LoadParam(root, "viewRightDistance", this, Camera, setViewRightDistance);
     288  LoadParam(root, "viewBehindDistance", this, Camera, setViewBehindDistance);
     289  LoadParam(root, "viewNormalDistance", this, Camera, setViewNormalDistance);
     290}
     291*/
     292
     293void Camera::setViewTopFovy(float fovy)
     294{
     295  this->viewTopFovy = fovy;
     296}
     297
     298void Camera::setViewFrontFovy(float fovy)
     299{
     300  this->viewFrontFovy = fovy;
     301}
     302
     303void Camera::setViewLeftFovy(float fovy)
     304{
     305  this->viewLeftFovy = fovy;
     306}
     307
     308void Camera::setViewRightFovy(float fovy)
     309{
     310  this->viewRightFovy = fovy;
     311}
     312
     313void Camera::setViewBehindFovy(float fovy)
     314{
     315  this->viewBehindFovy = fovy;
     316}
     317
     318void Camera::setViewNormalFovy(float fovy)
     319{
     320  this->viewNormalFovy = fovy;
     321}
     322
     323void Camera::setViewTopDistance(float Distance)
     324{
     325  this->viewTopDistance = Distance;
     326}
     327
     328void Camera::setViewFrontDistance(float Distance)
     329{
     330  this->viewFrontDistance = Distance;
     331}
     332
     333void Camera::setViewLeftDistance(float Distance)
     334{
     335  this->viewLeftDistance = Distance;
     336}
     337
     338void Camera::setViewRightDistance(float Distance)
     339{
     340  this->viewRightDistance = Distance;
     341}
     342
     343void Camera::setViewBehindDistance(float Distance)
     344{
     345  this->viewBehindDistance = Distance;
     346}
     347
     348void Camera::setViewNormalDistance(float Distance)
     349{
     350  this->viewNormalDistance = Distance;
    218351}
    219352
  • branches/playability.merge/src/world_entities/camera.h

    r9869 r10366  
    3636
    3737  Camera();
     38  Camera(const TiXmlElement* root);
    3839  virtual ~Camera();
    3940
     
    4344
    4445  void setAspectRatio(float aspectRatio);
     46  inline float getAspectRatio() {return this->aspectRatio;};
     47
    4548  void setClipRegion(float nearClip, float farClip);
    4649
    4750  /** @param fovy new field of view factor (in degrees) */
    48   void setFovy(float fovy) { this->fovy = fovy; };
     51  inline void setFovy(float fovy)
     52  {
     53    this->fovy = fovy;
     54    this->toFovy = fovy;
     55  };
     56
     57  inline float getFovy() {return this->fovy;};
    4958  /** @param fovy new field of view factor (in degrees) to iterate to */
    5059  void setToFovy(float toFovy) { this->toFovy = toFovy; };
     
    5867  inline float distance(const PNode* node) const { return distance(node->getAbsCoor()); }
    5968
     69  inline void setEventHandling(bool b) {this->eventHandling = b;}
     70  inline bool getEventHandling() {return this->eventHandling;}
     71
    6072  void tick(float dt);
    6173  void apply ();
     
    6476  void process(const Event &event);
    6577
     78  //virtual void loadParams(const TiXmlElement* root);
     79
     80  void              setViewTopFovy(float fovy);
     81  void              setViewLeftFovy(float fovy);
     82  void              setViewRightFovy(float fovy);
     83  void              setViewBehindFovy(float fovy);
     84  void              setViewFrontFovy(float fovy);
     85  void              setViewNormalFovy(float fovy);
     86
     87  void              setViewTopDistance(float Distance);
     88  void              setViewLeftDistance(float Distance);
     89  void              setViewRightDistance(float Distance);
     90  void              setViewBehindDistance(float Distance);
     91  void              setViewFrontDistance(float Distance);
     92  void              setViewNormalDistance(float Distance);
     93
    6694private:
     95
     96  void              init();
     97
    6798  CameraTarget*     target;          //!< The Target of the Camera (where this Camera Looks at)
     99
     100  bool              eventHandling;    //!< True, if the Camera handles the processing of events itself. Set false to overwrite the standard handling.
    68101
    69102  float             fovy;            //!< The field of view Angle (in degrees).
     
    79112  Vector            viewVector;      //!< the direction of the camera view
    80113  Vector            upVector;        //!< direction of the up vector
     114
     115  float             viewTopFovy;
     116  float             viewLeftFovy;
     117  float             viewRightFovy;
     118  float             viewBehindFovy;
     119  float             viewFrontFovy;
     120  float             viewNormalFovy;
     121
     122  float             viewTopDistance;
     123  float             viewLeftDistance;
     124  float             viewRightDistance;
     125  float             viewBehindDistance;
     126  float             viewFrontDistance;
     127  float             viewNormalDistance;
     128 
    81129};
    82130
  • branches/playability.merge/src/world_entities/effects/trail.cc

    r10365 r10366  
    3131#include "debug.h"
    3232
    33 #include "class_id_DEPRECATED.h"
     33
    3434
    3535#define trailAlphaMax 1.0f
  • branches/playability.merge/src/world_entities/effects/wobblegrid.cc

    r10365 r10366  
    2828
    2929
    30 #include "class_id_DEPRECATED.h"
     30
    3131ObjectListDefinition(Wobblegrid);
    3232CREATE_FACTORY(Wobblegrid);
  • branches/playability.merge/src/world_entities/elements/glgui_energywidget.h

    r8988 r10366  
    2626    void setValue(float value);
    2727
     28    inline GLGuiWidget* getNameWidget() {return &this->_name;};
     29    inline GLGuiWidget* getValueWidget() {return &this->_valueText;};
     30    inline GLGuiWidget* getBarWidget() {return &this->_bar;};
     31
    2832  protected:
    2933    virtual void resize();
  • branches/playability.merge/src/world_entities/elements/glgui_radar.cc

    r10317 r10366  
    122122          this->_dotLists[i].positions.push_back(Vector2D(((*it)->getAbsCoor().x - _centerNode->getAbsCoor().x) * this->getSizeX2D() ,
    123123                                                 ((*it)->getAbsCoor().z - _centerNode->getAbsCoor().z) * this->getSizeY2D()  )
    124                                                  / (2.0f * _range));
     124                                                 / (3.0f * _range));
    125125        }
    126126
  • branches/playability.merge/src/world_entities/particles/particle_emitter.h

    r9869 r10366  
    3636  void start();
    3737  void stop();
    38   void tick(float dt);
     38  virtual void tick(float dt);
    3939
    4040  void setSystem(ParticleSystem* system);
     
    7474  float           momentumRandom;    //!< The random variation of the Momentum.
    7575
    76 private:
     76//private:
    7777  ParticleSystem* system;            //!< The ParticleSystem this Emitter Emits into.
    7878  float           saveTime;          //!< The time that was missing by the last Tick (otherwise there would be no emission when framefate is too big).
  • branches/playability.merge/src/world_entities/playable.cc

    r9869 r10366  
    4444
    4545Playable::Playable()
    46     : weaponMan(this),
    47     supportedPlaymodes(Playable::Full3D),
     46    : weaponMan(this)
     47    ,supportedPlaymodes(Playable::Full3D),
    4848    playmode(Playable::Full3D)
    4949{
  • branches/playability.merge/src/world_entities/playable.h

    r9869 r10366  
    7171  void setCameraMode(unsigned int cameraMode = 0);
    7272  bool playmodeSupported(Playable::Playmode playmode) const { return this->supportedPlaymodes & playmode; };
    73   bool setPlaymode(Playable::Playmode playmode);
     73  virtual bool setPlaymode(Playable::Playmode playmode);
    7474  Playable::Playmode getPlaymode() const { return this->playmode; };
    7575  virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f) = 0;
     
    117117  void unregisterEvent(int eventType);
    118118
     119protected:
     120  WeaponManager         weaponMan;          //!< the weapon manager: managing a list of weapon to wepaon-slot mapping
     121  bool                  bFire;              //!< If the Ship is firing.
     122  short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
     123  Playable::Playmode    playmode;           //!< The current playmode.
     124
    119125private:
    120   WeaponManager         weaponMan;          //!< the weapon manager: managing a list of weapon to wepaon-slot mapping
    121126  std::vector<int>      events;             //!< A list of Events, that are captured for this playable
    122127
    123128  Player*               currentPlayer;      //!< The Player currently connected to this Playable (the one that has controll) otherwise NULL
    124129
    125   bool                  bFire;              //!< If the Ship is firing.
    126130  int                   oldFlags;           //!< Used for synchronisation
    127131
     
    131135
    132136  bool                  bDead;
    133   short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
    134   Playable::Playmode    playmode;           //!< The current playmode.
    135137
    136138  float                 enterRadius;        //!< How far one can be away from the Playable to enter it.
  • branches/playability.merge/src/world_entities/player.cc

    r9869 r10366  
    1616#include "player.h"
    1717#include "playable.h"
     18#include "space_ships/space_ship.h"
    1819
    1920#include "event_handler.h"
     
    7374    PRINTF(4)("Enter new Playable\n");
    7475    this->playable = playable;
    75     this->_hud.setEnergyWidget(this->playable->getHealthWidget());
    76     this->_hud.setWeaponManager(&this->playable->getWeaponManager());
     76    this->_hud.setArmorWidget(this->playable->getHealthWidget());
     77    if (dynamic_cast<SpaceShip*>(this->playable) != 0)
     78      this->_hud.setWeaponManager(&this->playable->getWeaponManager(), &dynamic_cast<SpaceShip*>(this->playable)->getWeaponManagerSecondary());
     79    else
     80      this->_hud.setWeaponManager(&this->playable->getWeaponManager());
    7781
    7882    this->playable->setPlayer(this);
     
    9498void Player::weaponConfigChanged()
    9599{
    96   this->_hud.updateWeaponManager();
     100  //this->_hud.updateWeaponManager();
     101
     102  if (dynamic_cast<SpaceShip*>(this->playable) != 0)
     103      this->_hud.setWeaponManager(&this->playable->getWeaponManager(), &dynamic_cast<SpaceShip*>(this->playable)->getWeaponManagerSecondary());
     104    else
     105      this->_hud.setWeaponManager(&this->playable->getWeaponManager());
    97106}
    98107
     
    128137}
    129138
     139
  • branches/playability.merge/src/world_entities/player.h

    r9869 r10366  
    1 /*!
     1 /*!
    22 * @file player.h
    33 * Implements a basic playable WorldEntity
     
    4646  private:
    4747    Playable*         playable;                 //!< The one we controll or NULL if none
    48     Hud               _hud;                      //!< The HUD to be displayed for this Player.
     48    Hud               _hud;                     //!< The HUD to be displayed for this Player.
    4949};
    5050
  • branches/playability.merge/src/world_entities/projectiles/acid_splash.cc

    r10365 r10366  
    3232
    3333
    34 #include "class_id_DEPRECATED.h"
     34
    3535ObjectListDefinition(AcidSplash);
    3636CREATE_FAST_FACTORY_STATIC(AcidSplash);
  • branches/playability.merge/src/world_entities/projectiles/hbolt.cc

    r10365 r10366  
    2929// #include "effects/billboard.h"
    3030#include "space_ships/space_ship.h"
     31#include "npcs/npc.h"
    3132
    32 #include "class_id_DEPRECATED.h"
    3333ObjectListDefinition(HBolt);
    3434CREATE_FAST_FACTORY_STATIC(HBolt);
     
    121121{
    122122  printf("Collision with HBolt\n");
    123   if (this->hitEntity != entity && entity->isA(CL_NPC) || entity == this->target)
     123  if (this->hitEntity != entity && entity->isA(NPC::staticClassID()) || entity == this->target)
    124124    this->destroy( entity );
    125125  this->hitEntity = entity;
  • branches/playability.merge/src/world_entities/projectiles/lbolt.cc

    r10365 r10366  
    2525#include "particles/dot_emitter.h"
    2626#include "particles/sprite_particles.h"
     27#include "npcs/npc.h"
    2728
    2829#include <cassert>
     
    3233
    3334
    34 #include "class_id_DEPRECATED.h"
     35
    3536ObjectListDefinition(LBolt);
    3637CREATE_FAST_FACTORY_STATIC(LBolt);
     
    123124{
    124125  PRINTF(0)("Collision with LBolt\n");
    125   if (this->hitEntity != entity && entity->isA(CL_NPC))
     126  if (this->hitEntity != entity && entity->isA(NPC::staticClassID()))
    126127    this->destroy( entity );
    127128  this->hitEntity = entity;
  • branches/playability.merge/src/world_entities/projectiles/mbolt.cc

    r10365 r10366  
    3636
    3737
    38 #include "class_id_DEPRECATED.h"
     38
    3939ObjectListDefinition(MBolt);
    4040CREATE_FAST_FACTORY_STATIC(MBolt);
     
    4848  this->loadModel("models/projectiles/mbolt.obj",4);
    4949
    50  
     50
    5151  //this->loadModel("models/projectiles/laser.obj");
    5252
     
    7171  this->mat->setDiffuseMap("laser.png",1);
    7272
    73   dynamic_cast<StaticModel*>(this->getModel())->addMaterial(this->mat);
     73  dynamic_cast<StaticModel*>(this->getModel())->addMaterial(*this->mat);
    7474  dynamic_cast<StaticModel*>(this->getModel())->finalize();
    7575
    7676  dynamic_cast<StaticModel*>(this->getModel())->rebuild();
    7777  //this->buildObbTree(4);
    78  
     78
    7979  this->trail = new Trail(6, 4, .1, this);
    8080  //this->trail->setParent( this);
     
    155155  //this->destroy(this);
    156156  this->deactivate();
    157  
     157
    158158  return;
    159159
  • branches/playability.merge/src/world_entities/projectiles/projectile.cc

    r10013 r10366  
    2525#include "playable.h"
    2626
     27#include <cmath>
     28
    2729#include "debug.h"
    2830
     
    4648  this->subscribeReaction( CoRe::CREngine::CR_PHYSICS_FULL_WALK, Playable::staticClassID());
    4749
     50  this->physDamage = 0.0f;
     51  this->elecDamage = 0.0f;
    4852  //this->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
    4953}
     
    6064  */
    6165  //delete this->projectileModel;
     66}
     67
     68Projectile::Projectile (float pDamage, float eDamage, PNode* target) : WorldEntity()
     69{
     70  this->registerObject(this, Projectile::_objectList);
     71
     72  this->lifeCycle = 0.0;
     73  this->lifeSpan = 1.0f; /* sec */
     74  this->removeNode();
     75
     76  /* character attributes */
     77  this->setHealth(1.0f);
     78  this->setDamage(1.0f); // default damage of a projectile set to 100.0 damage points
     79
     80  this->physDamage = pDamage;
     81  this->elecDamage = eDamage;
     82  this->target = target;
     83
     84  //this->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     85}
     86
     87void Projectile::initialize(float pDamage, float eDamage, PNode* target)
     88{
     89  /* character attributes*/
     90  this->physDamage = pDamage;
     91  this->elecDamage = eDamage;
     92  this->target = target;
    6293}
    6394
     
    124155
    125156
     157void Projectile::collidesWith (WorldEntity* target, const Vector& location)
     158{
     159  dynamic_cast<SpaceShip*>(target)->damage(this->getPhysDamage(),this->getElecDamage());
     160//   this->destroy(NULL);
     161  this->destroy(target);
     162}
     163
     164
     165
    126166/**
    127167 * signal tick, time dependent things will be handled here
     
    130170void Projectile::tick (float dt)
    131171{
    132   Vector v = this->velocity * (dt);
    133   this->shiftCoor(v);
    134 
    135172  if (this->tickLifeCycle(dt))
    136173    this->destroy( NULL );
  • branches/playability.merge/src/world_entities/projectiles/projectile.h

    r9869 r10366  
    1212#include "world_entity.h"
    1313#include "loading/fast_factory.h"
     14#include "space_ships/space_ship.h"
    1415
    1516#include "sound_source.h"
     
    2223    Projectile ();
    2324    virtual ~Projectile ();
     25
     26    /** @brief Constructor with variable passing*/
     27    Projectile (float pDamage, float eDamage, PNode* target);
     28    /** @brief for void construction; setting values later - needed for FastFactory*/
     29    virtual void initialize(float pDamage, float eDamage, PNode* target);
    2430
    2531    void setFlightDirection(const Quaternion& flightDirection);
     
    4450    virtual void destroy (WorldEntity* killer);
    4551
     52    virtual void collidesWith (WorldEntity* target, const Vector& location);  //!< collision handler; used against SpaceShip as most target will be
     53
     54
    4655    virtual void tick (float dt);
    4756    /** @brief convenience function
     
    5059    inline bool tickLifeCycle(float dt ) { this->lifeCycle += dt/this->lifeSpan;  return(unlikely(this->lifeCycle >= 1)); }
    5160
     61    inline float getPhysDamage() { return this->physDamage; };
     62    inline float getElecDamage() { return this->elecDamage; };
     63
     64    inline void setPhysDamage( float dmg) {this->physDamage = dmg; };
     65    inline void setElecDamage( float dmg) {this->elecDamage = dmg; };
    5266
    5367  protected:
    5468    // energy
    55     float                  energyMin;                 //!< The minimal Energy a Projectile needs to be emitted.
    56     bool                   bChargeable;               //!< if the Projectile is Charegeable
     69    int                origList;                        //!< FIXME currently a fix around the collision seg fault
     70    float                   energyMin;                //!< The minimal Energy a Projectile needs to be emitted.
     71    bool                    bChargeable;              //!< if the Projectile is Charegeable
    5772
    58     float                  lifeCycle;                 //!< The percentage of the Lifetime done [0-1]
    59     float                  lifeSpan;                  //!< The entire lifespan of the Shoot. in seconds
     73    float                   lifeCycle;                //!< The percentage of the Lifetime done [0-1]
     74    float                   lifeSpan;                 //!< The entire lifespan of the Shoot. in seconds
    6075
    61     Vector                 flightDirection;           //!< DOF direction in which the shoot flighs
     76    float                   physDamage;               //!< damage to shield and armor
     77    float                   elecDamage;               //!< damage to elctronic
     78    float                   turningSpeed;             //!< degrees per tick
    6279
    63     Vector                 velocity;                  //!< velocity of the projectile.
     80    Vector                  flightDirection;          //!< DOF direction in which the shoot flighs
    6481
    65     PNode*                 target;                    //!< A target for guided Weapons.
     82    Vector                  velocity;                 //!< velocity of the projectile.
     83
     84    PNode*                  target;                   //!< A target for guided Weapons.
    6685
    6786    OrxSound::SoundSource  soundSource;
  • branches/playability.merge/src/world_entities/projectiles/spike.cc

    r10365 r10366  
    3232
    3333
    34 #include "class_id_DEPRECATED.h"
     34
    3535ObjectListDefinition(Spike);
    3636CREATE_FAST_FACTORY_STATIC(Spike);
  • branches/playability.merge/src/world_entities/projectiles/spike_ball.cc

    r10365 r10366  
    3232
    3333
    34 #include "class_id_DEPRECATED.h"
     34
    3535ObjectListDefinition(SpikeBall);
    3636CREATE_FAST_FACTORY_STATIC(SpikeBall);
  • branches/playability.merge/src/world_entities/projectiles/swarm_projectile.cc

    r10365 r10366  
    2727#include "debug.h"
    2828
    29 #include "class_id_DEPRECATED.h"
     29
    3030
    3131#include "math/vector.h"
    3232
    33 ObjectListDefinitionID(SwarmProjectile, CL_SWARM_PROJECTILE);
     33ObjectListDefinition(SwarmProjectile);
    3434CREATE_FAST_FACTORY_STATIC(SwarmProjectile);
    3535
     
    167167//   printf("turning angle: %f\ntemp: %f\n", angle, tmp);
    168168
    169   if( fabsf(angle) >  fabsf(tmp) ) 
     169  if( fabsf(angle) >  fabsf(tmp) )
    170170    angle = tmp;
    171171  else
  • branches/playability.merge/src/world_entities/sound_entity.cc

    r10351 r10366  
    1717#include "sound_entity.h"
    1818
     19#include "util/loading/load_param.h"
    1920#include "util/loading/factory.h"
    2021#include "material.h"
     
    4344    this->loadParams(root);
    4445
    45   this->thunderBuffer = OrxSound::ResourceSoundBuffer("sounds/atmosphere/thunder.wav");
     46//  this->thunderBuffer = OrxSound::ResourceSoundBuffer("sounds/atmosphere/thunder.wav");
    4647}
    4748
     
    7374 * @param fileName name of the sound source
    7475 */
    75 void SoundEntity::setSoundFile(const std::string fileName)
     76void SoundEntity::setSoundFile(const std::string& fileName)
    7677{
    7778  this->soundBuffer = OrxSound::ResourceSoundBuffer(fileName);
  • branches/playability.merge/src/world_entities/sound_entity.h

    r10351 r10366  
    2828    virtual void loadParams(const TiXmlElement* root);
    2929
    30     void setSoundFile(const std::string fileName);
     30    void setSoundFile(const std::string& fileName);
    3131
    3232    virtual void activate();
  • branches/playability.merge/src/world_entities/space_ships/space_ship.cc

    r10317 r10366  
    2323
    2424#include "weapons/test_gun.h"
     25#include "weapons/light_blaster.h"
     26#include "weapons/medium_blaster.h"
     27#include "weapons/heavy_blaster.h"
     28#include "weapons/swarm_launcher.h"
     29#include "weapons/spike_launcher.h"
     30#include "weapons/spike_thrower.h"
     31#include "weapons/acid_launcher.h"
     32#include "weapons/boomerang_gun.h"
    2533#include "weapons/turret.h"
    2634#include "weapons/cannon.h"
    2735
     36#include "elements/glgui_energywidgetvertical.h"
     37#include "glgui_bar.h"
     38
    2839#include "particles/dot_emitter.h"
     40#include "particles/emitter_node.h"
    2941#include "particles/sprite_particles.h"
     42#include "effects/trail.h"
     43
     44#include "effects/wobblegrid.h"
    3045
    3146#include "util/loading/factory.h"
     
    4459#include "state.h"
    4560#include "player.h"
     61#include "camera.h"
     62
    4663
    4764#include "util/loading/load_param.h"
     65#include "time.h"
     66
     67#include "track/track.h"
     68#include "math.h"
    4869
    4970
    5071// #include "lib/gui/gl_gui/glgui_bar.h"
    5172// #include "lib/gui/gl_gui/glgui_pushbutton.h"
    52 
    5373
    5474
     
    7090                        ->addMethod("getAbsCoorY", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorY))
    7191                        ->addMethod("getAbsCoorZ", Executor0ret<PNode, lua_State*, float>(&PNode::getAbsCoorZ))
     92                        //->addMethod("setCameraSpeed", Executor1<SpaceShip, lua_State*, float>(&SpaceShip::setCameraSpeed))
    7293                       );
    7394
     
    85106 */
    86107SpaceShip::SpaceShip(const std::string& fileName)
     108    : secWeaponMan(this) //,
     109    //supportedPlaymodes(Playable::Vertical) ,
     110    //playmode(Playable::Vertical)
    87111{
    88112  this->init();
     
    105129*/
    106130SpaceShip::SpaceShip(const TiXmlElement* root)
     131    : secWeaponMan(this) //,
     132    //supportedPlaymodes(Playable::Vertical) ,
     133    //playmode(Playable::Vertical)
    107134{
    108135  this->init();
     136  //this->setParentMode(PNODE_REPARENT_DELETE_CHILDREN);
    109137  if (root != NULL)
    110138    this->loadParams(root);
     
    118146void SpaceShip::init()
    119147{
     148
     149  srand(time(0));   //initialize Random Nomber Generator
     150
    120151  //  this->setRelDir(Quaternion(M_PI, Vector(1,0,0)));
    121152  this->registerObject(this, SpaceShip::_objectList);
    122 
    123153  PRINTF(4)("SPACESHIP INIT\n");
    124 
     154  this->weaponMan.setParentEntity( this);
    125155  //weapons:
    126   Weapon* wpRight = new TestGun(0);
    127   wpRight->setName("testGun Right");
    128   Weapon* wpLeft = new TestGun(1);
    129   wpLeft->setName("testGun Left");
    130   //Weapon* cannon = dynamic_cast<Weapon*>(Factory::fabricate(CL_CANNON));
    131 
    132   //cannon->setName("BFG");
    133 
    134   this->addWeapon(wpLeft, 1, 0);
    135   this->addWeapon(wpRight,1 ,1);
    136   //this->addWeapon(cannon, 0, 6);
    137 
    138   this->getWeaponManager().changeWeaponConfig(1);
    139 
    140   bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = false;
    141 
    142   xMouse = yMouse = 0;
    143   yInvert = 1;
    144   mouseSensitivity = 0.001;
    145   airViscosity = 0.9;
    146   controlVelocityX = 25;
    147   controlVelocityY = 150;
    148   shipInertia = 1.5;
    149   //  cycle = 0.0;
    150 
    151   this->setHealthMax(100);
    152   this->setHealth(80);
    153 
    154   travelSpeed = 0.0;
    155   acceleration = 3;
    156   this->velocity = this->getAbsDirX()*travelSpeed;
    157   this->mouseDir = this->getAbsDir();
    158   this->pitchDir = this->getAbsDir();
    159 
    160   //   GLGuiButton* button = new GLGuiPushButton();
    161   //    button->show();
    162   //    button->setLabel("orxonox");
    163   //    button->setBindNode(this);
    164   //     GLGuiBar* bar = new GLGuiBar();
    165   //     bar->show();
    166   //     bar->setValue(7.0);
    167   //     bar->setMaximum(10);
    168   //     bar->setSize2D( 20, 100);
    169   //     bar->setAbsCoor2D( 10, 200);
     156
     157  Weapon* wpRight1 = new LightBlaster ();
     158  wpRight1->setName( "LightBlaster");
     159  Weapon* wpLeft1 = new LightBlaster ();
     160  wpLeft1->setName( "LightBlaster");
     161
     162  Weapon* wpRight2 = new MediumBlaster ();
     163  wpRight2->setName( "MediumBlaster");
     164  Weapon* wpLeft2 = new MediumBlaster ();
     165  wpLeft2->setName( "MediumBlaster");
     166
     167  Weapon* wpRight3 = new HeavyBlaster (1);
     168  wpRight3->setName( "HeavyBlaster");
     169  Weapon* wpLeft3 = new HeavyBlaster (0);
     170  wpLeft3->setName( "HeavyBlaster");
     171
     172  Weapon* cannon = new SwarmLauncher();
     173  cannon->setName( "SwarmLauncher");
     174
     175  Weapon* spike = new SpikeThrower();
     176  spike->setName( "SpikeThrower" );
     177
     178
     179  Weapon* acid0 = new AcidLauncher();
     180  acid0->setName( "AcidSplasher" );
     181
     182  Weapon* acid1 = new AcidLauncher();
     183  acid1->setName( "AcidSplasher" );
     184
     185
     186  this->weaponMan.addWeapon( wpLeft1, 0, 0);
     187  this->weaponMan.addWeapon( wpRight1, 0, 1);
     188
     189  this->weaponMan.addWeapon( wpLeft2, 1, 2);
     190  this->weaponMan.addWeapon( wpRight2, 1, 3);
     191
     192  this->weaponMan.addWeapon( wpLeft3, 2, 4);
     193  this->weaponMan.addWeapon( wpRight3, 2, 5);
     194/*
     195  this->weaponMan.addWeapon( wpLeft1, 3, 0);
     196  this->weaponMan.addWeapon( wpRight1, 3, 1);
     197
     198  this->weaponMan.addWeapon( wpLeft2, 3, 2);
     199  this->weaponMan.addWeapon( wpRight2, 3, 3);
     200
     201  this->weaponMan.addWeapon( wpLeft3, 3, 4);
     202  this->weaponMan.addWeapon( wpRight3, 3, 5);
     203*/
     204
     205  this->weaponMan.addWeapon( acid0, 3, 0);
     206  this->weaponMan.addWeapon( acid1, 3, 1);
     207
     208
     209  this->secWeaponMan.addWeapon( cannon, 0, 2);
     210  this->secWeaponMan.addWeapon( spike, 1, 3);
     211//   this->secWeaponMan.addWeapon( acid0, 2, 2);
     212//   this->secWeaponMan.addWeapon( acid1, 2, 3);
     213
     214
     215  this->weaponMan.changeWeaponConfig(3);
     216  this->secWeaponMan.changeWeaponConfig(1);
     217
     218  curWeaponPrimary    = 0;
     219  curWeaponSecondary  = 1;
     220
     221  Playable::weaponConfigChanged();
     222
     223  reactorOutput     = 10;
     224
     225  weaponEnergyRegen = 10;       // 10 einheiten pro Sekunde
     226  engineSpeedBase   = 5;
     227  shieldRegen       = 2;
     228
     229  shieldEnergyShare = 0.3;
     230  weaponEnergyShare = 0.3;
     231  engineEnergyShare = 0.4;
     232
     233  shieldCur         = 20;
     234  shieldMax         = 100;
     235  shieldTH          = .2 * shieldMax;   // shield power must be 20% before shield kicks in again
     236
     237  this->setHealth( 20);
     238  this->setHealthMax( 100);
     239
     240  electronicCur = 50;
     241  electronicMax = 50;
     242  electronicRegen   = 3;
     243  electronicTH      = .7 * electronicMax; // 30% of eDamage can be handled by the ship
     244
     245
     246  this->loadModel("models/ships/mantawing.obj");
     247  //this->setVisibiliy(false);
     248
     249  bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false;
     250
     251  this->setHealthMax(shieldMax);
     252  this->setHealth(shieldCur);
     253
     254  this->travelNode = new PNode();
     255
     256  // camera - issue
     257  this->cameraNode.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     258  this->cameraNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE);
     259
     260  // widget handling
     261  /*
     262  this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical();
     263  this->electronicWidget->setDisplayedName(std::string(this->getClassName()) + " Electronics:");
     264  this->electronicWidget->setSize2D(30,400);
     265  this->electronicWidget->setAbsCoor2D(150,200);
     266  this->electronicWidget->shiftDir2D(270);
     267  this->updateElectronicWidget();
     268  this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical();
     269  this->shieldWidget->setDisplayedName(std::string(this->getClassName()) + " Shield:");
     270  this->shieldWidget->setSize2D(30,400);
     271  this->shieldWidget->setAbsCoor2D(200,200);
     272  this->shieldWidget->shiftDir2D(270);
     273  this->updateShieldWidget();
     274  if (this->hasPlayer())
     275  {
     276    State::getPlayer()->hud().setShiledWidget(this->shieldWidget);
     277    State::getPlayer()->hud().setEnergyWidget(this->electronicWidget);
     278  }
     279  */
     280  this->electronicWidget = NULL;
     281  this->shieldWidget = NULL;
    170282
    171283  //add events to the eventlist
     
    177289  //registerEvent(SDLK_e);
    178290  registerEvent(KeyMapper::PEV_FIRE1);
     291  registerEvent(KeyMapper::PEV_FIRE2);                  // Added for secondary weapon support
    179292  registerEvent(KeyMapper::PEV_NEXT_WEAPON);
    180293  registerEvent(KeyMapper::PEV_PREVIOUS_WEAPON);
     
    183296  registerEvent(EV_MOUSE_MOTION);
    184297
    185   this->getWeaponManager().setSlotCount(7);
    186 
    187   this->getWeaponManager().setSlotPosition(0, Vector(-2.6, .1, -3.0));
    188   this->getWeaponManager().setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
    189 
    190   this->getWeaponManager().setSlotPosition(1, Vector(-2.6, .1, 3.0));
    191   this->getWeaponManager().setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
    192 
    193   this->getWeaponManager().setSlotPosition(2, Vector(-1.5, .5, -.5));
    194   this->getWeaponManager().setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
    195 
    196   this->getWeaponManager().setSlotPosition(3, Vector(-1.5, .5, .5));
    197   this->getWeaponManager().setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
    198 
    199   this->getWeaponManager().setSlotPosition(4, Vector(-1.5, -.5, .5));
    200   this->getWeaponManager().setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
    201 
    202   this->getWeaponManager().setSlotPosition(5, Vector(-1.5, -.5, -.5));
    203   this->getWeaponManager().setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
    204   //
    205   this->getWeaponManager().setSlotPosition(6, Vector(-1, 0.0, 0));
    206   this->getWeaponManager().setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
    207   //
    208   //   this->getWeaponManager().setSlotPosition(8, Vector(-2.5, -0.3, -2.0));
    209   //   this->getWeaponManager().setSlotDirection(8, Quaternion(-M_PI, Vector(1,0,0)));
    210   //
    211   //   this->getWeaponManager().setSlotPosition(9, Vector(-2.5, -0.3, 2.0));
    212   //   this->getWeaponManager().setSlotDirection(9, Quaternion(+M_PI, Vector(1,0,0)));:
    213 
    214   this->getWeaponManager().getFixedTarget()->setParent(this);
    215   this->getWeaponManager().getFixedTarget()->setRelCoor(100000,0,0);
    216 
    217   dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false);
    218 
    219   this->burstEmitter = new DotEmitter(200, 0.0, .01);
    220   this->burstEmitter->setParent(this);
    221   this->burstEmitter->setRelCoor(-1, .5, 0);
    222   this->burstEmitter->setName("SpaceShip_Burst_emitter");
    223 
    224   this->burstSystem = new SpriteParticles(1000);
    225   this->burstSystem->addEmitter(this->burstEmitter);
    226   this->burstSystem->setName("SpaceShip_Burst_System");
    227   ((SpriteParticles*)this->burstSystem)->setMaterialTexture("textures/radial-trans-noise.png");
    228   this->burstSystem->setLifeSpan(1.0, .3);
    229   this->burstSystem->setRadius(0.0, 1.0);
    230   this->burstSystem->setRadius(0.05, 1.0);
    231   this->burstSystem->setRadius(.5, .8);
    232   this->burstSystem->setRadius(1.0, 0);
    233   this->burstSystem->setColor(0.0, .7,.7,1,.7);
    234   this->burstSystem->setColor(0.2, 0,0,0.8,.5);
    235   this->burstSystem->setColor(0.5, .5,.5,.8,.8);
    236   this->burstSystem->setColor(1.0, .8,.8,.8,.0);
    237 
    238   registerVar( new SynchronizeableVector( &velocity, &velocity, "velocity", PERMISSION_MASTER_SERVER ) );
    239   registerVar( new SynchronizeableQuaternion( &mouseDir, &mouseDir, "mousedir", PERMISSION_OWNER ) );
    240 
    241   registerVar( new SynchronizeableBool( &bUp, &bUp, "bUp", PERMISSION_OWNER ) );
    242   registerVar( new SynchronizeableBool( &bDown, &bDown, "bDown", PERMISSION_OWNER ) );
     298  this->weaponMan.setParentEntity( this);
     299  this->secWeaponMan.setParentEntity( this);
     300
     301  this->weaponMan.setSlotCount(8);
     302
     303  this->weaponMan.setSlotPosition(0, Vector(0.0, 0, -3.0));
     304  this->weaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
     305
     306  this->weaponMan.setSlotPosition(1, Vector(0.0, 0, 3.0));
     307  this->weaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
     308
     309  this->weaponMan.setSlotPosition(2, Vector(1.0, 0, -1.5));
     310  this->weaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
     311
     312  this->weaponMan.setSlotPosition(3, Vector(1.0, 0, 1.5));
     313  this->weaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
     314
     315  this->weaponMan.setSlotPosition(4, Vector(1.5, 0, .5));
     316  this->weaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
     317
     318  this->weaponMan.setSlotPosition(5, Vector(1.5, 0, -.5));
     319  this->weaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
     320
     321  this->weaponMan.setSlotPosition(6, Vector(0.5, 0, 2.5));
     322  this->weaponMan.setSlotDirection(6, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
     323
     324  this->weaponMan.setSlotPosition(7, Vector(0.5, 0, -2.5));
     325  this->weaponMan.setSlotDirection(7, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
     326
     327  this->secWeaponMan.setSlotPosition(0, Vector(1.5, 0, 0));
     328  this->secWeaponMan.setSlotCapability(0, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
     329
     330  this->secWeaponMan.setSlotPosition(1, Vector(2.6, 0, 3.0));
     331  this->secWeaponMan.setSlotCapability(1, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL);
     332
     333  this->secWeaponMan.setSlotPosition(2, Vector(1.5, 0, -.5));
     334  this->secWeaponMan.setSlotDirection(2, Quaternion(-M_PI_4*.5, Vector(1,0,0)));
     335
     336  this->secWeaponMan.setSlotPosition(3, Vector(1.5, 0, .5));
     337  this->secWeaponMan.setSlotDirection(3, Quaternion(M_PI_4*.5, Vector(1,0,0)));
     338
     339  this->secWeaponMan.setSlotPosition(4, Vector(1.5, 0, .5));
     340  this->secWeaponMan.setSlotDirection(4, Quaternion(-M_PI_4*.5+M_PI, Vector(1,0,0)));
     341
     342  this->secWeaponMan.setSlotPosition(5, Vector(1.5, 0, -.5));
     343  this->secWeaponMan.setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0)));
     344
     345
     346  this->weaponMan.getFixedTarget()->setParent(this);
     347  this->weaponMan.getFixedTarget()->setRelCoor(100000,0,0);
     348
     349
     350  this->secWeaponMan.getFixedTarget()->setParent(this);
     351  this->secWeaponMan.getFixedTarget()->setRelCoor(100000,0,0);
     352  this->secWeaponMan.setRotationSpeed(0);
     353
     354  dynamic_cast<Element2D*>(this->weaponMan.getFixedTarget())->setVisibility( false);
     355
     356
     357  registerVar( new SynchronizeableBool( &bForward, &bForward, "bForward", PERMISSION_OWNER ) );
     358  registerVar( new SynchronizeableBool( &bBackward, &bBackward, "bBackward", PERMISSION_OWNER ) );
    243359  registerVar( new SynchronizeableBool( &bLeft, &bLeft, "bLeft", PERMISSION_OWNER ) );
    244360  registerVar( new SynchronizeableBool( &bRight, &bRight, "bRight", PERMISSION_OWNER ) );
    245   registerVar( new SynchronizeableBool( &bAscend, &bAscend, "bAscend", PERMISSION_OWNER ) );
    246   registerVar( new SynchronizeableBool( &bDescend, &bDescend, "bDescend", PERMISSION_OWNER ) );
    247   registerVar( new SynchronizeableBool( &bRollL, &bRollL, "bRollL", PERMISSION_OWNER ) );
    248   registerVar( new SynchronizeableBool( &bRollR, &bRollR, "bRollR", PERMISSION_OWNER ) );
     361  registerVar( new SynchronizeableFloat( &cameraLook, &cameraLook, "cameraLook", PERMISSION_OWNER ) );
     362  registerVar( new SynchronizeableFloat( &rotation, &rotation, "rotation", PERMISSION_OWNER ) );
     363  registerVar( new SynchronizeableBool( &bFire, &bFire, "bSecFire", PERMISSION_OWNER));
     364  registerVar( new SynchronizeableVector( &velocity, &velocity, "velocity", PERMISSION_MASTER_SERVER ) );
     365
     366  //this->airFriction = 0.5f;
     367  //this->travelDistancePlus = Vector2D(38.0, 43.0);
     368  //this->travelDistanceMinus = Vector2D(-38.0, -43.0);
     369  this->travelDistancePlus = Vector2D(50,50);
     370  this->travelDistanceMinus = Vector2D(-50,-50);
     371  this->isTravelDistanceInit = true;
     372  this->actionWidthPercentage = 1;
     373
     374  this->cameraSpeed = 40;
     375  this->cameraLook = 0.0f;
     376  //this->airFriction = 0.0f;
     377
     378  srand(time(0));  //initaialize RNG
     379
     380  this->travelNode->debugDraw();
     381
     382  this->setSupportedPlaymodes(Playable::Horizontal | Playable::Vertical);
     383
     384  /// FIXME
     385  this->trail = new Trail( 5, 10, .2, this);
     386  this->trail->setTexture( "maps/engine.png");
     387
     388  this->trailL = new Trail( 5, 10, .2, this);
     389  this->trailL->setTexture( "maps/engine.png");
     390
     391  this->trailR = new Trail( 5, 10, .2, this);
     392  this->trailR->setTexture( "maps/engine.png");
     393
     394
     395  this->toList(OM_GROUP_00);
     396
     397  //FIXME Just testaddition to show the wobblegrid
     398/*
     399  this->test  = new Wobblegrid(5);
     400  test->setTexture("maps/blub.png");
     401
     402  test->setAbsCoor( this->getAbsCoor() + Vector(0, 2, 0));
     403  test->setParent( this);
     404*/
     405
    249406}
    250407
     
    257414{
    258415  Playable::loadParams(root);
    259 }
    260 
    261 void SpaceShip::setPlayDirection(const Quaternion& quat, float speed)
    262 {
    263   this->mouseDir = quat;
    264 }
    265 
     416
     417  LoadParam(root, "playmode", this, SpaceShip, setPlaymodeXML);
     418  LoadParam(root, "cameraDistance", this, SpaceShip, setCameraDistance);
     419  LoadParam(root, "cameraFovy", this, SpaceShip, setCameraFovy);
     420  LoadParam(root, "actionWidthPercentage", this, SpaceShip, setActionWidthPercentage);
     421
     422  State::getCamera()->setViewMode(Camera::ViewTop);
     423}
     424
     425
     426void SpaceShip::setPlayDirection(const Quaternion& rot, float speed)
     427{
     428  //this->direction = Quaternion (rot.getHeading(), Vector(0,1,0));
     429}
    266430
    267431void SpaceShip::reset()
    268432{
    269   bUp = bDown = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = false;
    270 
    271   xMouse = yMouse = 0;
     433  bForward = bBackward = bLeft = bRight = bAscend = bDescend = bRollL = bRollR = bFire = bSecFire = false;
     434
     435  //xMouse = yMouse = 0;
    272436
    273437  this->setHealth(80);
     
    278442void SpaceShip::enter()
    279443{
    280   dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true);
    281   this->attachCamera();
     444  this->secWeaponMan.showCrosshair();
     445  this->toList( OM_GROUP_01 );
     446  State::getPlayer()->hud().setRadarCenterNode(this->travelNode);
     447  State::getPlayer()->hud().setOverlayActive(true);
     448  //dynamic_cast <OrxGui::GLGuiEnergyWidgetVertical*> (State::getPlayer()->hud().getArmorWidget())->setDisplayedName("Armor");
     449  //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( true);
     450  //this->attachCamera();
     451 // this->setPlaymode(Playable::Horizontal);
    282452}
    283453
    284454void SpaceShip::leave()
    285455{
    286   dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false);
    287   this->detachCamera();
     456  this->secWeaponMan.hideCrosshair();
     457  this->toList( OM_GROUP_00);
     458  State::getPlayer()->hud().setOverlayActive(false);
     459  State::getCamera()->setEventHandling(true);
     460  State::getPlayer()->hud().setRadarCenterNode(NULL);
     461  //dynamic_cast<Element2D*>(this->secWeaponMan.getFixedTarget())->setVisibility( false);
     462  //this->detachCamera();
    288463}
    289464
     
    294469void SpaceShip::postSpawn ()
    295470{
     471  if(this->hasPlayer())
     472    Playable::postSpawn();
     473
    296474  //setCollision(new CollisionCluster(1.0, Vector(0,0,0)));
    297475}
     
    301479*/
    302480void SpaceShip::leftWorld ()
    303 {}
     481{
     482
     483}
    304484
    305485WorldEntity* ref = NULL;
    306 /**
    307  *  this function is called, when two entities collide
    308  * @param entity: the world entity with whom it collides
    309  *
    310  * Implement behaviour like damage application or other miscellaneous collision stuff in this function
    311  */
    312 void SpaceShip::collidesWith(WorldEntity* entity, const Vector& location)
    313 {
    314 }
    315486
    316487/**
     
    321492  WorldEntity::draw();
    322493
     494  glMatrixMode(GL_MODELVIEW);
     495  glPushMatrix();
     496
     497  float matrix[4][4];
     498  glTranslatef (this->getAbsCoor ().x-1, this->getAbsCoor ().y-.2, this->getAbsCoor ().z);
     499  this->getAbsDir().matrix (matrix);
     500  glMultMatrixf((float*)matrix);
     501  //glScalef(2.0, 2.0, 2.0);  // no double rescale
     502        // FIXME
     503  this->trail->draw();
     504
     505  glTranslatef(0,0,-.5);
     506  this->trailL->draw();
     507
     508  glTranslatef(0,0,1);
     509  this->trailR->draw();
     510
     511  glPopMatrix();
    323512  //this->debug(0);
    324513}
     
    330519void SpaceShip::tick (float time)
    331520{
    332   Playable::tick(time);
    333 
    334   if( ( xMouse != 0 || yMouse != 0 ) && this->getOwner() == SharedNetworkData::getInstance()->getHostID() )
    335   {
    336     if (xMouse > controlVelocityX) xMouse = controlVelocityX;
    337     else if (xMouse < -controlVelocityX) xMouse = -controlVelocityX;
    338     if (yMouse > controlVelocityY) yMouse = controlVelocityY;
    339     else if (yMouse < -controlVelocityY) yMouse = -controlVelocityY;
    340 
    341     pitchDir = (Quaternion(xMouse*mouseSensitivity*0.5, Vector(1,0,0)));
    342 
    343     mouseDir *= (Quaternion(-M_PI/4*xMouse*mouseSensitivity, Vector(0,1,0))*Quaternion(-M_PI/4*yMouse*mouseSensitivity*yInvert, Vector(0,0,1))*pitchDir);
    344     xMouse = yMouse = 0;
    345   }
    346 
    347 
    348   //   if( this != State::getPlayer()->getControllable())
    349   //     return;
    350 
    351   // spaceship controlled movement fire(bool bF){ this->bFire = bF;}
    352   //if (this->getOwner() == this->getHostID())
    353   this->calculateVelocity(time);
    354 
    355 
    356   Vector move = velocity*time;
    357 
    358   //orient the velocity in the direction of the spaceship.
    359   travelSpeed = velocity.len();
    360   velocity += ((this->getAbsDirX())*travelSpeed-velocity)*airViscosity;
    361   velocity = (velocity.getNormalized())*travelSpeed;
    362   this->burstEmitter->setEmissionRate(travelSpeed);
    363   this->burstEmitter->setEmissionVelocity(travelSpeed*.5, travelSpeed *.1);
     521  // Playable::tick(time);
     522
     523 // this->test->tick(time);
     524
     525  // Own Tick Setup, as a different fire routine is used on the weapon manager
     526  this->weaponMan.tick(time);
     527  this->secWeaponMan.tick(time);
     528
     529  if( this->systemFailure() )
     530    bFire = bSecFire = false;
     531
     532  // fire reqeust/release for primary weapons
     533  if( this->bFire)
     534    this->weaponMan.fire();
     535  else
     536    this->weaponMan.releaseFire();
     537
     538  // fire reqeust/release for secondary weapons
     539  if( this->bSecFire)
     540    this->secWeaponMan.fire();
     541  else
     542    this->secWeaponMan.releaseFire();
     543
     544  // Tracktick
     545  if(this->entityTrack)
     546    this->entityTrack->tick(time);
     547
     548
     549  // Shield Regeneration and other regular calculations on the ship
     550  this->regen(time);
     551
     552  // Weapon Regeneration and other regular calculations on the ship
     553  this->weaponRegen(time);
     554
     555  // current engine speed output
     556  this->engineSpeedCur = this->engineSpeedBase + this->reactorOutput * this->engineEnergyShare;
     557
     558  // calculation of maxSpeed and acceleration:
     559  this->travelSpeed = this->engineSpeedCur * 5;
     560  this->acceleration = this->travelSpeed * 2;
     561
     562  this->movement(time);
     563
     564   // TRYING TO FIX PNode.
     565  this->cameraNode.setAbsCoorSoft(this->getAbsCoor() + Vector(0.0f, 5.0f, 0.0f), 30.0f);
     566  this->cameraNode.setRelDirSoft(this->getAbsDir(), 30.0f);
     567
     568
     569  this->velocity  = (this->getAbsCoor() - this->oldPos) / time;
     570  this->oldPos    = this->getAbsCoor();
     571
     572//FIXME
     573  this->trail->tick(time);
     574  this->trailL->tick(time);
     575  this->trailR->tick(time);
     576
     577  if (!this->isTravelDistanceInit)
     578  {
     579    this->updateTravelDistance();
     580    //this->isTravelDistanceInit = true;
     581  }
    364582
    365583  //orient the spaceship in direction of the mouse
     584  /*
    366585  rotQuat = Quaternion::quatSlerp( this->getAbsDir(), mouseDir, 0.5);//fabsf(time)*shipInertia);
    367586  if (this->getAbsDir().distance(rotQuat) > 0.00000000000001)
    368587    this->setAbsDir( rotQuat);
    369588  //this->setAbsDirSoft(mouseDir,5);
    370 
    371   // this is the air friction (necessary for a smooth control)
    372   if(travelSpeed >= 120) velocity -= velocity.getNormalized()*travelSpeed*travelSpeed*0.0001;
    373   else if (travelSpeed <= 80) velocity -= velocity.getNormalized()*travelSpeed*0.001;
    374 
    375   //other physics (gravity)
    376   //if(travelSpeed < 120)
    377   //move += Vector(0,-1,0)*60*time + Vector(0,1,0)*travelSpeed/2*time;
    378 
    379   //hoover effect
    380   //cycle += time;
    381   //this->shiftCoor(Vector(0,1,0)*cos(this->cycle*2.0)*0.02);
    382 
    383   //readjust
    384   //if (this->getAbsDirZ().y > 0.1) this->shiftDir(Quaternion(time*0.3, Vector(1,0,0)));
    385   //else if (this->getAbsDirZ().y < -0.1) this->shiftDir(Quaternion(-time*0.3, Vector(1,0,0)));
    386 
    387   //SDL_WarpMouse(GraphicsEngine::getInstance()->getResolutionX()/2, GraphicsEngine::getInstance()->getResolutionY()/2);
    388 
     589  */
     590  /*
    389591  this->shiftCoor(move);
     592  */
    390593
    391594  //   PRINTF(0)("id of %s is: %i\n", this->getName(), this->getOMListNumber());
    392595
    393 }
    394 
    395 /**
    396  *  calculate the velocity
    397  * @param time the timeslice since the last frame
    398 */
    399 void SpaceShip::calculateVelocity (float time)
    400 {
    401   Vector accel(0.0, 0.0, 0.0);
    402   /*
    403   Vector rot(0.0, 0.0, 0.0); // wird ben�igt fr Helicopter
    404   */
    405   //float rotVal = 0.0;
    406   /* FIXME: calculating the direction and orthDirection every timeSlice is redundant! save it somewhere */
    407   /* calculate the direction in which the craft is heading  */
    408 
    409   //Plane plane(Vector(0,1,0), Vector(0,0,0));
    410 
    411   if( this->bUp )
    412   {
    413     //this->shiftCoor(this->getAbsDirX());
    414     //accel += (this->getAbsDirX())*2;
    415     accel += (this->getAbsDirX())*acceleration;
    416 
    417   }
    418 
    419   if( this->bDown )
    420   {
    421     //this->shiftCoor((this->getAbsDirX())*-1);
    422     //accel -= (this->getAbsDirX())*2;
    423     //if(velocity.len() > 50)
    424     accel -= (this->getAbsDirX())*0.5*acceleration;
    425 
    426 
    427 
    428   }
    429 
    430   if( this->bLeft/* > -this->getRelCoor().z*2*/)
    431   {
    432     this->shiftDir(Quaternion(time, Vector(0,1,0)));
    433     //    accel -= rightDirection;
    434     //velocityDir.normalize();
    435     //rot +=Vector(1,0,0);
    436     //rotVal -= .4;
    437   }
    438   if( this->bRight /* > this->getRelCoor().z*2*/)
    439   {
    440     this->shiftDir(Quaternion(-time, Vector(0,1,0)));
    441 
    442     //    accel += rightDirection;
    443     //velocityDir.normalize();
    444     //rot += Vector(1,0,0);
    445     //rotVal += .4;
    446   }
    447 
    448 
    449   if( this->bRollL /* > -this->getRelCoor().z*2*/)
    450   {
    451     mouseDir *= Quaternion(-time*2, Vector(1,0,0));
    452     //    accel -= rightDirection;
    453     //velocityDir.normalize();
    454     //rot +=Vector(1,0,0);
    455     //rotVal -= .4;
    456   }
    457   if( this->bRollR /* > this->getRelCoor().z*2*/)
    458   {
    459     mouseDir *= Quaternion(time*2, Vector(1,0,0));
    460 
    461     //    accel += rightDirection;
    462     //velocityDir.normalize();
    463     //rot += Vector(1,0,0);
    464     //rotVal += .4;
    465   }
    466   if (this->bAscend )
    467   {
    468     this->shiftDir(Quaternion(time, Vector(0,0,1)));
    469 
    470     //    accel += upDirection;
    471     //velocityDir.normalize();
    472     //rot += Vector(0,0,1);
    473     //rotVal += .4;
    474   }
    475   if (this->bDescend )
    476   {
    477     this->shiftDir(Quaternion(-time, Vector(0,0,1)));
    478 
    479     //    accel -= upDirection;
    480     //velocityDir.normalize();
    481     //rot += Vector(0,0,1);
    482     //rotVal -= .4;
    483   }
    484 
    485   velocity += accel*time*10;
    486   //rot.normalize();
    487   //this->setRelDirSoft(Quaternion(rotVal, rot), 5);
    488596}
    489597
     
    493601void SpaceShip::process(const Event &event)
    494602{
    495   Playable::process(event);
     603  //Playable::process(event);
    496604
    497605  if( event.type == KeyMapper::PEV_LEFT)
    498     this->bRollL = event.bPressed;
     606    this->bLeft = event.bPressed;
    499607  else if( event.type == KeyMapper::PEV_RIGHT)
    500     this->bRollR = event.bPressed;
     608  {
     609    this->bRight = event.bPressed;
     610    printf("ShipCoorX: %f \n", this->getRelCoor().x);
     611  }
    501612  else if( event.type == KeyMapper::PEV_FORWARD)
    502     this->bUp = event.bPressed; //this->shiftCoor(0,.1,0);
     613  {
     614    this->bForward = event.bPressed; //this->shiftCoor(0,.1,0);
     615
     616  }
    503617  else if( event.type == KeyMapper::PEV_BACKWARD)
    504     this->bDown = event.bPressed; //this->shiftCoor(0,-.1,0);
     618    this->bBackward = event.bPressed; //this->shiftCoor(0,-.1,0);
     619  else if( event.type == KeyMapper::PEV_FIRE2)
     620    this->bSecFire = event.bPressed;
     621  else if( event.type == KeyMapper::PEV_FIRE1)
     622    this->bFire = event.bPressed;
     623  else if( event.type == KeyMapper::PEV_NEXT_WEAPON && event.bPressed)
     624  {
     625    this->nextWeaponConfig();
     626  }
     627  else if ( event.type == KeyMapper::PEV_PREVIOUS_WEAPON && event.bPressed)
     628    this->previousWeaponConfig();
     629
     630  if (!(State::getCamera()->getEventHandling()))
     631  {
     632    if( event.type == KeyMapper::PEV_VIEW0)
     633    {
     634      State::getCamera()->setViewMode(Camera::ViewNormal);
     635      State::getCameraTargetNode()->setParent(this);
     636      State::getCamera()->setParent(this);
     637    }
     638    else if( event.type == KeyMapper::PEV_VIEW1)
     639    {
     640      State::getCamera()->setViewMode(Camera::ViewBehind);
     641      State::getCameraTargetNode()->setParent(this);
     642      State::getCamera()->setParent(this);
     643    }
     644    else if( event.type == KeyMapper::PEV_VIEW2)
     645    {
     646      State::getCamera()->setViewMode(Camera::ViewFront);
     647      State::getCameraTargetNode()->setParent(this);
     648      State::getCamera()->setParent(this);
     649    }
     650    else if( event.type == KeyMapper::PEV_VIEW3)
     651    {
     652      State::getCamera()->setViewMode(Camera::ViewLeft);
     653      State::getCameraTargetNode()->setParent(this);
     654      State::getCamera()->setParent(this);
     655    }
     656    else if( event.type == KeyMapper::PEV_VIEW4)
     657    {
     658      State::getCamera()->setViewMode(Camera::ViewRight);
     659      State::getCameraTargetNode()->setParent(this);
     660      State::getCamera()->setParent(this);
     661    }
     662    else if( event.type == KeyMapper::PEV_VIEW5)
     663    {
     664      State::getCamera()->setViewMode(Camera::ViewTop);
     665      State::getCameraTargetNode()->setParent(this->travelNode);
     666      State::getCamera()->setParent(this->travelNode);
     667    }
     668  }
     669
     670
     671  /*
    505672  else if( event.type == EV_MOUSE_MOTION)
    506673  {
     674
    507675    this->xMouse += event.xRel;
    508676    this->yMouse += event.yRel;
    509677  }
     678  */
    510679}
    511680
    512681void SpaceShip::destroy( WorldEntity* killer )
    513682{
    514   PRINTF(0)("spaceship destroy\n");
     683  if(this->hasPlayer())
     684    Playable::destroy( killer);
     685
     686  PRINTF(5)("spaceship destroy\n");
     687
     688  EmitterNode* node  = NULL;
     689  DotEmitter* emitter = NULL;
     690  SpriteParticles*  explosionParticles  = NULL;
     691
     692  explosionParticles = new SpriteParticles(200);
     693  explosionParticles->setName("SpaceShipExplosionParticles");
     694  explosionParticles->setLifeSpan(.2, .3);
     695  explosionParticles->setRadius(0.0, 10.0);
     696  explosionParticles->setRadius(.5, 6.0);
     697  explosionParticles->setRadius(1.0, 3.0);
     698  explosionParticles->setColor(0.0, 1,1,1,.9);
     699  explosionParticles->setColor(0.1,  1,1,0,.9);
     700  explosionParticles->setColor(0.5, .8,.4,0,.5);
     701  explosionParticles->setColor(1.0, .2,.2,.2,.5);
     702
     703
     704  emitter = new DotEmitter( 2000, 70, 360);
     705  //emitter->setSpread( 0, M_2_PI);
     706  emitter->setEmissionRate( 200.0);
     707  //emitter->setEmissionVelocity( 200.0);
     708  //emitter->setSystem( explosionParticles);
     709  //emitter->setAbsCoor( this->getAbsCoor());
     710
     711  node  = new EmitterNode( .1f);
     712  node->setupParticle( emitter, explosionParticles);
     713  node->setAbsDir( this->getAbsDir());
     714  node->setVelocity( this->getVelocity() * .9f);
     715  node->setAbsCoor( this->getAbsCoor());
     716  if( !node->start())
     717    PRINTF(0)("Explosion node not correctly started!");
     718/*
     719  PNode* node          = new PNode();
     720  node->setAbsCoor(this->getAbsCoor());
     721  Explosion* explosion = new Explosion();
     722  explosion->explode( node, Vector(5,5,5));
     723*/
     724/*
     725  if( this->hasPlayer())
     726  {
     727        this->setAbsCoor(Vector(-10000,10000,10000));
     728        this->hide();
     729  }
     730  else
     731  {*/
     732    this->setAbsCoor( this->getAbsCoor() + Vector(100,0,0) + Vector(1,0,0) * VECTOR_RAND(150).dot(Vector(1,0,0)));
     733  //}
     734
    515735}
    516736
    517737void SpaceShip::respawn( )
    518738{
    519   toList( OM_PLAYERS );
    520 }
    521 
    522 
    523 
    524 
     739  Playable::respawn();
     740}
     741
     742
     743void SpaceShip::damage(float pDamage, float eDamage){
     744  PRINTF(5)("ship hit for (%f,%f) \n",pDamage,eDamage);
     745
     746  if( this->shieldActive) {
     747    if( this->shieldCur > pDamage) {
     748      this->shieldCur = this->shieldCur - pDamage;
     749    }
     750    else { // shield <= pDamage
     751      this->shieldCur -=pDamage;
     752      this->shieldActive = false; //shield collapses
     753      pDamage += this->shieldCur;
     754      if( !this->shieldActive) {
     755        this->armorCur -= pDamage / 2; // remaining damages hits armor at half rate
     756        this->electronicCur -= eDamage;
     757      }
     758    }
     759  }
     760  else {
     761    this->armorCur = this->armorCur - pDamage;
     762    this->electronicCur = this->electronicCur - eDamage;
     763  }
     764  if( this->armorCur <= 0) { /* FIXME implement shipcrash*/ }
     765    this->destroy(this);
     766
     767  updateElectronicWidget();
     768  updateShieldWidget();
     769
     770  this->setHealth( this->armorCur);
     771}
     772
     773
     774void SpaceShip::regen(float time){
     775  float tmp;
     776  if (this->armorCur != this->armorMax || this->armorRegen != 0){
     777    tmp = this->armorCur + this->armorRegen * time;
     778    if ( tmp > electronicMax)
     779      this->armorCur = this->armorMax;
     780    else
     781      this->armorCur = tmp;
     782  }
     783  if (this->shieldCur != this->shieldMax || this->shieldRegen != 0){
     784    tmp =  this->shieldCur + (this->shieldRegen + this->reactorOutput * this->shieldEnergyShare) * time;
     785    if( tmp > shieldMax)
     786      this->shieldCur = this->shieldMax;
     787    else
     788      this->shieldCur = tmp;
     789    this->shieldActive = ( this->shieldActive || this->shieldCur > shieldTH);
     790
     791    updateShieldWidget();
     792  }
     793
     794  this->setHealth( this->shieldCur);      // FIXME currently just to test share system
     795
     796  if (this->electronicCur != this->electronicMax || this->electronicRegen != 0){
     797    tmp = this->electronicCur + this->electronicRegen * time;
     798    if ( tmp > electronicMax)
     799      this->electronicCur = this->electronicMax;
     800    else
     801      this->electronicCur = tmp;
     802
     803    updateElectronicWidget();
     804  }
     805
     806}
     807
     808
     809/**
     810 * Weapon regeneration
     811 * does not use any reactor capacity, as it wouldn't work in a consistent way.
     812 */
     813void SpaceShip::weaponRegen(float time)
     814{
     815  float energy  = ( this->reactorOutput * this->weaponEnergyShare + this->weaponEnergyRegen) * time;
     816  Weapon* weapon;
     817  for( unsigned int i=0; i < this->weaponMan.getSlotCount(); i++)
     818  {
     819    weapon = this->weaponMan.getWeapon(i);
     820    if( weapon != NULL && weapon->isActive())
     821    {
     822      weapon->increaseEnergy( energy);
     823    }
     824
     825  }
     826  // weaponMan.increaseAmmunition( weapon, energy);
     827}
     828
     829
     830void SpaceShip::enterPlaymode(Playable::Playmode playmode)
     831{
     832  switch(playmode)
     833  {
     834    case Playable::Full3D:
     835      /*
     836      if (State::getCameraNode != NULL)
     837      {
     838        Vector absCoor = this->getAbsCoor();
     839        this->setParent(PNode::getNullParent());
     840        this->setAbsCoor(absCoor);
     841        State::getCameraNode()->setParentSoft(&this->cameraNode);
     842        State::getCameraNode()->setRelCoorSoft(-10, 0,0);
     843        State::getCameraTargetNode()->setParentSoft(&this->cameraNode);
     844        State::getCameraTargetNode()->setRelCoorSoft(100, 0,0);
     845
     846      }
     847      */
     848      //break;
     849
     850      break;
     851    case Playable::Horizontal:
     852      if (State::getCameraNode != NULL)
     853      {
     854        this->debugNode(1);
     855        this->travelNode->debugNode(1);
     856
     857        this->travelNode->setAbsCoor(this->getAbsCoor());
     858        this->travelNode->updateNode(0.01f);
     859
     860        this->isTravelDistanceInit = false;
     861
     862        if(this->entityTrack)
     863           this->travelNode->setParent(this->entityTrack->getTrackNode());
     864
     865        this->setParent(this->travelNode);
     866        this->setRelCoor(0,0,0);
     867
     868        State::getCameraNode()->setParentSoft(this->travelNode);
     869        //State::getCameraNode()->setParentSoft(this);
     870        //State::getCameraNode()->setRelCoorSoft(-0.01, 40, 0);
     871        State::getCameraTargetNode()->setParentSoft(this->travelNode);
     872        //State::getCameraTargetNode()->setParentSoft(this);
     873        //State::getCameraTargetNode()->setRelCoorSoft(0,0,0);
     874        this->setCameraMode(Camera::ViewTop);
     875        State::getCamera()->setEventHandling(false);
     876        registerEvent(KeyMapper::PEV_VIEW0);
     877        registerEvent(KeyMapper::PEV_VIEW1);
     878        registerEvent(KeyMapper::PEV_VIEW2);
     879        registerEvent(KeyMapper::PEV_VIEW3);
     880        registerEvent(KeyMapper::PEV_VIEW4);
     881        registerEvent(KeyMapper::PEV_VIEW5);
     882
     883        State::getCamera()->setParentMode(PNODE_ALL);
     884
     885        //this->updateTravelDistance();
     886
     887        this->debugNode(1);
     888        this->travelNode->debugNode(1);
     889      }
     890      break;
     891
     892    default:
     893      PRINTF(2)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName());
     894  }
     895}
     896
     897/**
     898 * @brief calculate the velocity
     899 * @param time the timeslice since the last frame
     900*/
     901
     902void SpaceShip::movement (float dt)
     903{
     904  //by releasing the buttons, the velocity decreases with airCoeff*Acceleration. Should be strong enough so
     905  //the ship doesn't slide too much.
     906  float airCoeff = 2.5;
     907  float pi = 3.14;
     908
     909  switch(this->getPlaymode())
     910  {
     911    case Playable::Horizontal:
     912    {
     913      // these routines will change the travel movement into zero in a short amout of time, if the player
     914      // doesn't press any buttons.
     915      if (this->travelVelocity.x >= 0)
     916      {
     917        if (this->travelVelocity.x > airCoeff*this->acceleration * dt)
     918          this->travelVelocity.x -= airCoeff* this->acceleration * dt;
     919        else
     920          this->travelVelocity.x = 0;
     921      }
     922      else
     923      {
     924        if (this->travelVelocity.x < -airCoeff*this->acceleration * dt)
     925          this->travelVelocity.x += airCoeff* this->acceleration * dt;
     926        else
     927          this->travelVelocity.x = 0;
     928      }
     929      if (this->travelVelocity.z >= 0)
     930      {
     931        if (this->travelVelocity.z > airCoeff*this->acceleration * dt)
     932          this->travelVelocity.z -= airCoeff* this->acceleration * dt;
     933        else
     934          this->travelVelocity.z = 0;
     935      }
     936      else
     937      {
     938        if (this->travelVelocity.z < -airCoeff*this->acceleration * dt)
     939          this->travelVelocity.z += airCoeff* this->acceleration * dt;
     940        else
     941          this->travelVelocity.z = 0;
     942      }
     943
     944      // this will evite, that the ship moves outside the travelDistance- borders,when the player releases all buttons
     945      // and its continuing to slide a bit.
     946      Vector oldCoor = this->getRelCoor();
     947      if (this->getRelCoor().x > this->travelDistancePlus.x) this->setRelCoor(this->travelDistancePlus.x, oldCoor.y, oldCoor.z);
     948      if (this->getRelCoor().x < this->travelDistanceMinus.x) this->setRelCoor(this->travelDistanceMinus.x, oldCoor.y, oldCoor.z);
     949      if (this->getRelCoor().z > this->travelDistancePlus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistancePlus.y);
     950      if (this->getRelCoor().z < this->travelDistanceMinus.y) this->setRelCoor(oldCoor.x, oldCoor.y, this->travelDistanceMinus.y);
     951
     952      if( this->systemFailure() )
     953        bForward = bBackward = bLeft = bRight = false;
     954
     955      if( this->bForward )
     956      {
     957        //printf("ShipCoorX: %f \n", this->getRelCoor().x);
     958        if(this->getRelCoor().x < this->travelDistancePlus.x)
     959        {
     960          if (this->travelVelocity.x < this->travelSpeed)
     961          {
     962            this->travelVelocity.x += (airCoeff + 1.0)*this->acceleration*dt;
     963          }
     964          else
     965          {
     966            this->travelVelocity.x = this->travelSpeed;
     967          }
     968        }
     969        else
     970        {
     971          this->travelVelocity.x = 0.0f;
     972        }
     973      }
     974
     975      if( this->bBackward )
     976      {
     977        if(this->getRelCoor().x > this->travelDistanceMinus.x)
     978        {
     979          if (this->travelVelocity.x > -this->travelSpeed)
     980          {
     981            this->travelVelocity.x -= (airCoeff + 1.0)*this->acceleration*dt;
     982          }
     983          else
     984          {
     985            this->travelVelocity.x = -this->travelSpeed;
     986          }
     987        }
     988        else
     989        {
     990          this->travelVelocity.x = 0.0f;
     991        }
     992      }
     993
     994      if( this->bLeft)
     995      {
     996        if(this->getRelCoor().z > this->travelDistanceMinus.y)
     997        {
     998          if (this->travelVelocity.z > -this->travelSpeed)
     999          {
     1000            this->travelVelocity.z -= (airCoeff + 1.0)*this->acceleration*dt;
     1001          }
     1002          else
     1003          {
     1004            this->travelVelocity.z = -this->travelSpeed;
     1005          }
     1006        }
     1007        else
     1008        {
     1009          this->travelVelocity.z = 0.0f;
     1010        }
     1011        this->setRelDirSoft(Quaternion(-pi/6, Vector(1,0,0)), 6);
     1012      }
     1013
     1014      if( this->bRight)
     1015      {
     1016        //printf("ShipCoorZ: %f \n", this->getRelCoor().z);
     1017        if(this->getRelCoor().z < this->travelDistancePlus.y)
     1018        {
     1019          if (this->travelVelocity.z < this->travelSpeed)
     1020          {
     1021            this->travelVelocity.z += (airCoeff + 1.0)*this->acceleration*dt;
     1022          }
     1023          else
     1024          {
     1025            this->travelVelocity.z = this->travelSpeed;
     1026          }
     1027        }
     1028        else
     1029        {
     1030          this->travelVelocity.z = 0.0f;
     1031        }
     1032        this->setRelDirSoft(Quaternion(pi/6, Vector(1,0,0)), 6);
     1033      }
     1034      if (!this->bRight && !this->bLeft)
     1035      {
     1036        this->setRelDirSoft(Quaternion(0, Vector(1,0,0)), 6);
     1037      }
     1038
     1039    //normalisation of the vectors (vector sum must be <= travelspeed)
     1040    float xzNorm = sqrt(pow(this->travelVelocity.x, 2) + pow(this->travelVelocity.z, 2));
     1041    if (xzNorm > this->travelSpeed)
     1042    {
     1043      this->travelVelocity.x = this->travelVelocity.x/xzNorm * this->travelSpeed;
     1044      this->travelVelocity.z = this->travelVelocity.z/xzNorm * this->travelSpeed;
     1045    }
     1046
     1047    //this moves camera and ship along the travel path.
     1048    if(!this->entityTrack)
     1049       this->travelNode->shiftCoor(Vector(this->cameraSpeed * dt, 0, 0));
     1050
     1051    break;
     1052    }
     1053    case Playable::Vertical:
     1054      break;
     1055    default:
     1056      PRINTF(4)("Playmode %s Not Implemented in %s\n", Playable::playmodeToString(this->getPlaymode()).c_str(), this->getClassCName());
     1057  }
     1058   //set new coordinates calculated through key- events.
     1059  this->shiftCoor (this->travelVelocity * dt);
     1060}
     1061
     1062void SpaceShip::setPlaymodeXML(const std::string& playmode)
     1063{
     1064  this->setPlaymode(Playable::stringToPlaymode(playmode));
     1065}
     1066
     1067/**
     1068 * @brief jumps to the next WeaponConfiguration
     1069 */
     1070void SpaceShip::nextWeaponConfig()
     1071{
     1072  PRINTF(0)("Requested next weapon config!\n");
     1073  this->weaponMan.nextWeaponConfig();
     1074  Playable::weaponConfigChanged();
     1075}
     1076
     1077/**
     1078 * @brief moves to the last WeaponConfiguration
     1079 */
     1080void SpaceShip::previousWeaponConfig()
     1081{
     1082  this->curWeaponPrimary    = (this->curWeaponPrimary + 1) % 3;
     1083  this->weaponMan.changeWeaponConfig(this->curWeaponPrimary);
     1084  Playable::weaponConfigChanged();
     1085}
     1086
     1087void SpaceShip::hit( float damage, WorldEntity* killer)
     1088{
     1089  this->damage(killer->getDamage(),0);
     1090}
     1091
     1092void SpaceShip::updateElectronicWidget()
     1093{
     1094  if (this->electronicWidget != NULL)
     1095  { //if it exists already: update it
     1096     this->electronicWidget->setMaximum(this->electronicMax);
     1097     this->electronicWidget->setValue(this->electronicCur);
     1098  }
     1099  else
     1100  { //create the widget
     1101    this->electronicWidget = new OrxGui::GLGuiEnergyWidgetVertical();
     1102    this->electronicWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1));
     1103    //this->electronicWidget->setDisplayedName("Electronics:");
     1104    //this->electronicWidget->setSize2D(100,20);
     1105    //this->electronicWidget->setAbsCoor2D(150,200);
     1106    this->updateElectronicWidget();
     1107    if (this->hasPlayer())
     1108      State::getPlayer()->hud().setEnergyWidget(this->electronicWidget);
     1109  }
     1110}
     1111
     1112void SpaceShip::updateShieldWidget()
     1113{
     1114  if (this->shieldWidget != NULL)
     1115  {
     1116    this->shieldWidget->setMaximum(this->shieldMax);
     1117    this->shieldWidget->setValue(this->shieldCur);;
     1118  }
     1119  else
     1120  {
     1121    this->shieldWidget = new OrxGui::GLGuiEnergyWidgetVertical();
     1122    this->shieldWidget->getBarWidget()->setChangedValueColor(Color(1,0,0,1));
     1123    //this->shieldWidget->setDisplayedName("Shield:");
     1124    //his->shieldWidget->setSize2D(100,20);
     1125    //this->shieldWidget->setAbsCoor2D(200,200);
     1126    this->updateShieldWidget();
     1127    if (this->hasPlayer())
     1128      State::getPlayer()->hud().setShiledWidget(this->shieldWidget);
     1129  }
     1130}
     1131
     1132void SpaceShip::setCameraDistance(float dist)
     1133{
     1134  State::getCamera()->setViewTopDistance(dist);
     1135}
     1136
     1137void SpaceShip::setCameraFovy(float fovy)
     1138{
     1139  State::getCamera()->setViewTopFovy(fovy);
     1140}
     1141
     1142void SpaceShip::updateTravelDistance()
     1143{
     1144  float x = 1.25 * this->actionWidthPercentage * fabsf(State::getCamera()->getAbsCoor().y) * tan(State::getCamera()->getFovy()*M_PI /360.0);
     1145  float y = x / State::getCamera()->getAspectRatio() / this->actionWidthPercentage;
     1146  //State::getCamera()->setAbsCoor(-5, 1000, 0);
     1147
     1148
     1149  //State::getCamera()->getAbsCoor().print();
     1150  //printf("CameraRelCoorY: %f \n", State::getCamera()->getRelCoor().y);
     1151
     1152  //printf("x: %f, y: %f \n", x, y);
     1153  this->travelDistancePlus = Vector2D(y, x);
     1154  this->travelDistanceMinus = Vector2D(-y, -x);
     1155
     1156  State::getPlayer()->hud().setOverlayPercentage(100-int(100*this->actionWidthPercentage));
     1157  PRINTF(0)("TravelDistance has been updated\n");
     1158  this->isTravelDistanceInit = true;
     1159}
     1160
     1161void SpaceShip::setActionWidthPercentage(int i)
     1162{
     1163  if (i>100) i=100;
     1164  if (i<0) i=0;
     1165  this->actionWidthPercentage = i/100.0;
     1166
     1167  if (this->hasPlayer())
     1168    this->isTravelDistanceInit = false;
     1169};
  • branches/playability.merge/src/world_entities/space_ships/space_ship.h

    r9869 r10366  
    22 * @file space_ship.h
    33 * Implements the Control of a Spaceship
     4 * Space Ships are the core class for all types of ships in Orxonox
     5 * By default is on OM_GROUP_00
     6 * If player boards the ship, it is moved to OM_GROUP_01
    47 */
    58
     
    1619class ParticleEmitter;
    1720class ParticleSystem;
     21class Trail;
     22class Wobblegrid;
    1823
    1924class SpaceShip : public Playable
     
    2934
    3035    virtual void setPlayDirection(const Quaternion& rot, float speed = 0.0f);
     36    /*
     37    void setTravelHeight(float travelHeight);
     38    void setTravelDistance(const Vector2D& distance);
     39    void setTravelDistance(float x, float y);
     40    */
     41
     42    //void setAirFriction(float friction) { this->airFriction = friction; };
    3143
    3244    virtual void enter();
     
    4153    virtual void respawn();
    4254
    43     virtual void collidesWith(WorldEntity* entity, const Vector& location);
     55    inline Vector getVelocity() { return this->velocity; };
     56
    4457    virtual void tick(float time);
    4558    virtual void draw() const;
    4659
    4760    virtual void process(const Event &event);
     61//    virtual void hit (WorldEntity* entity, float damage);
     62
     63    inline WeaponManager& getWeaponManagerSecondary() { return this->secWeaponMan; };
     64
     65    //Functions for GUI
     66    inline float getShieldCur() { return this->shieldCur; };        //!< returns current shield value
     67    inline float getShieldMax() { return this->shieldMax; };        //!< returns maximum shield value
     68
     69    inline float getArmorCur() { return this->armorCur; };          //!< returns current armor value
     70    inline float getArmorMax() { return this->armorMax; };          //!< returns current armor value
     71
     72    inline float getElectronicCur() { return this->electronicCur; }; //!< returns current electronic value
     73    inline float getElectronicMax() { return this->electronicMax; }; //!< returns current electronic value
     74
     75    inline PNode* getTravelNode() { return this->travelNode; };
     76
     77    //damage handler
     78    virtual void damage(float pDamage, float eDamage);  //!< pDamage physical damage, eDamage electronic damage
     79
     80    //included by Michel:
     81    virtual void enterPlaymode(Playable::Playmode playmode);
     82    void setPlaymodeXML(const std::string& playmode); //recieves the playmode from a string (useful for script implementation)
     83    void setActionWidthPercentage(int i);
     84    void updateTravelDistance();
     85    virtual void movement (float dt);
     86
     87    //
     88
     89    void nextWeaponConfig();
     90    void previousWeaponConfig();
     91
     92    virtual void hit(float damage, WorldEntity* killer);
    4893
    4994  private:
    5095    void init();
    5196
    52     void calculateVelocity(float time);
    53 
    54     bool                  bUp;                //!< up button pressed.
    55     bool                  bDown;              //!< down button pressed.
     97    //void calculateVelocity(float time);
     98
     99    void regen(float time);  //!< handler for shield and electronic regeneration
     100
     101    void weaponRegen(float time);   //!< weapon energy regeneration
     102
     103    inline bool systemFailure() {  return (this->electronicCur < float(rand())/float(RAND_MAX) * this->electronicTH); };
     104
     105    void updateElectronicWidget();
     106    void updateShieldWidget();
     107
     108    //WeaponManager         weaponMan;      //!< the primary weapon manager: managing a list of energy weapons to wepaon-slot mapping
     109    WeaponManager         secWeaponMan;       //!< the secondary weapon manager: managing a list of special weapons to weapon-slot mapping
     110    short                 supportedPlaymodes; //!< What Playmodes are Supported in this Playable.
     111    Playable::Playmode    playmode;           //!< The current playmode.
     112
     113    //ship atributes
     114    float       shieldCur;          //!< current shield
     115    float       shieldMax;          //!< maximum shield
     116    float       shieldEnergyShare;  //!< percentage of reactor output
     117    float       shieldRegen;        //!< shield regeneration rate per second
     118    float       shieldTH;           //!< shield threshhold for reactivation
     119    bool        shieldActive;       //!< wheather the shield is working
     120    OrxGui::GLGuiEnergyWidgetVertical* shieldWidget; //!< holds the widget that shows the shield bar
     121
     122    float       armorCur;           //!< current armor
     123    float       armorMax;           //!< maximum armor
     124    float       armorRegen;         //!< armor regeneration per tick (usable on bioships?)
     125    //note that the armor widget is set on the health- widget in world- entity (see in player.cc)
     126
     127    float       electronicCur;      //!< current electronic
     128    float       electronicMax;      //!< maximum electronic
     129    float       electronicRegen;    //!< electronic regenration rate per tick
     130    float       electronicTH;       //!< Threshhold for electronic failure
     131    OrxGui::GLGuiEnergyWidgetVertical* electronicWidget; //!< holds the widget that shows the electronic bar
     132
     133    float       engineSpeedCur;     //!< speed output for movement = speed base + energy share part
     134    float       engineSpeedBase;    //!< speed base
     135    int         enginePowerConsume; //!< energy needed
     136    float       engineEnergyShare;  //!< percentage of reactor output
     137
     138    int         weaponEnergySlot;   //!< number of energy weapon slots
     139    int         weaponEnergyUsed;
     140    float       weaponEnergyShare;
     141    float       weaponEnergyRegen;
     142    int         weaponSpecialSlot;  //!< number of special weapon slots
     143    int         weaponSpecialUsed;
     144
     145    float       reactorOutput;      //!< reactor output
     146    float       reactorCapacity;    //!< reactor capacity
     147
     148    int         curWeaponPrimary;   //!< current primary weapon config
     149    int         curWeaponSecondary; //!< current secondary weapon config
     150
     151    bool                  bForward;                //!< up button pressed.
     152    bool                  bBackward;              //!< down button pressed.
    56153    bool                  bLeft;              //!< left button pressed.
    57154    bool                  bRight;             //!< right button pressed.
    58155    bool                  bAscend;            //!< ascend button pressed.
    59156    bool                  bDescend;           //!< descend button presses.
    60 //    bool                  bFire;              //!< fire button pressed.(moved to playable)
    61157    bool                  bRollL;             //!< rolling button pressed (left)
    62158    bool                  bRollR;             //!< rolling button pressed (right)
    63 
     159    bool                  bSecFire;           //!< second fire button pressed
     160
     161    /*
    64162    float                 xMouse;             //!< mouse moved in x-Direction
    65163    float                 yMouse;             //!< mouse moved in y-Direction
     
    68166    int                   controlVelocityX;
    69167    int                   controlVelocityY;
    70 //    float                 cycle;              //!< hovercycle
     168    */
    71169
    72170    Vector                velocity;           //!< the velocity of the player.
    73     Vector                oldVelocity;        //!< the velocity the player had last synced
     171    Vector                oldPos;
     172
     173// 2D-traveling
     174    PNode*                travelNode;
     175    float                 travelSpeed;        //!< the current speed of the Ship (to make soft movement)
     176    Vector                travelVelocity;     //!< object internal velocity vector for relative movement to the track node
     177    Vector2D              travelDistancePlus;     //!< Travel-Distance away from the TravelNode
     178    Vector2D              travelDistanceMinus;
     179    bool                  isTravelDistanceInit;
     180
     181    float                 actionWidthPercentage;
     182
     183// Camera
     184    PNode                 cameraNode;
     185    float                 cameraLook;
     186    float                 rotation;
     187    float                 cameraSpeed;
     188
     189    void                  setCameraDistance(float dist);
     190    void                  setCameraFovy(float fovy);
     191
     192    /*
    74193    Quaternion            mouseDir;           //!< the direction where the player wants to fly
    75194    Quaternion            oldMouseDir;        //!< the direction where the player wanted to fly
     
    77196    Quaternion            rotQuat;
    78197    Quaternion            pitchDir;
    79     float                 travelSpeed;        //!< the current speed of the player (to make soft movement)
    80     float                 acceleration;       //!< the acceleration of the player.
    81 
    82     float                 airViscosity;
     198    float                 dogdeSpeed;        //!< the dogde Speed of the ship.
     199    */
     200
     201    //Quaternion            direction;          //!< the direction of the ship.
     202    float                 acceleration;       //!< the acceleration of the ship.
     203    //float                 airFriction;        //!< AirFriction.
     204    //float                 airViscosity;
    83205
    84206    byte                  oldMask;            //!< used for synchronisation
    85207
    86     ParticleEmitter*      burstEmitter;
    87     ParticleSystem*       burstSystem;
     208    Trail*                trail;              //!< Burst trail
     209    Trail*                trailL;              //!< Burst trail
     210    Trail*                trailR;              //!< Burst trail
     211
     212
    88213};
    89214
  • branches/playability.merge/src/world_entities/space_ships/spacecraft_2d.cc

    r10317 r10366  
    273273{
    274274  dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true);
    275   this->setPlaymode(this->getPlaymode());
     275//   this->setPlaymode(this->getPlaymode());
     276  this->setPlaymode(Playable::Horizontal);
     277  this->setTravelSpeed(10.0f);
    276278}
    277279
  • branches/playability.merge/src/world_entities/space_ships/spacecraft_2d.h

    r9869 r10366  
    6666    float                 acceleration;       //!< the acceleration of the Spacecraft2D.
    6767    float                 airFriction;        //!< AirFriction.
    68 
    6968    float                 airViscosity;
    7069
  • branches/playability.merge/src/world_entities/test_entity.cc

    r10114 r10366  
    8686}
    8787
     88void TestEntity::draw() const
     89{
     90//   if(!mediaLoaded)
     91//     false;
    8892
     93  glPushAttrib(GL_ENABLE_BIT);
     94  glDisable(GL_LIGHTING);
     95//   glDisable(GL_BLEND);
     96//
     97//   glEnable(GL_TEXTURE_2D);
     98//   glBindTexture(GL_TEXTURE_2D, media_container->getFrameTexture(counter));
     99
     100  glPushMatrix();
     101 /* glTranslatef (this->getAbsCoor ().x,
     102                this->getAbsCoor ().y,
     103                this->getAbsCoor ().z);
     104  glRotatef(axis, 0.0f, 1.0f, 0.0f);*/
     105//PRINTF(0)("axis: %f\n", axis);
     106
     107  glColor3f(1.0, 0, 0);
     108
     109  glBegin(GL_QUADS);
     110    glVertex3f( 0.0f, -100.0f, 0.0f);
     111//     glTexCoord2f(1.0f, 1.0f);
     112    glVertex3f( 0.0f,  -100.0f , 2000.0f);
     113//     glTexCoord2f(0.0f, 1.0f);
     114    glVertex3f( 10000.0f,  -100.0f , 2000.0f );
     115//     glTexCoord2f(0.0f, 0.0f);
     116    glVertex3f( 10000.0f, -100.0f, 0.0f );
     117//     glTexCoord2f(1.0f, 0.0f);
     118   
     119  glEnd();
     120
     121  glPopMatrix();
     122  glPopAttrib();
     123}
    89124
    90125/**
     
    98133
    99134
    100 /**
    101  *
    102  */
    103 void TestEntity::draw() const
    104 {
    105 
    106 }
    107135
    108136
  • branches/playability.merge/src/world_entities/test_entity2.cc

    r10365 r10366  
    3636
    3737
    38 #include "class_id_DEPRECATED.h"
     38
    3939ObjectListDefinition(TestEntity2);
    4040CREATE_FACTORY(TestEntity2);
  • branches/playability.merge/src/world_entities/weapons/acid_launcher.cc

    r10365 r10366  
    3333#include "util/loading/factory.h"
    3434
    35 #include "class_id_DEPRECATED.h"
     35
    3636
    3737using namespace std;
  • branches/playability.merge/src/world_entities/weapons/medium_blaster.cc

    r10365 r10366  
    1111#include "loading/fast_factory.h"
    1212
    13 //#include "class_id_DEPRECATED.h"
     13//
    1414//ObjectListDefinition(MediumBlaster);
    1515CREATE_FACTORY(MediumBlaster);
  • branches/playability.merge/src/world_entities/weapons/spike_launcher.cc

    r10365 r10366  
    3434#include "util/loading/factory.h"
    3535
    36 #include "class_id_DEPRECATED.h"
     36
    3737
    3838using namespace std;
  • branches/playability.merge/src/world_entities/weapons/spike_thrower.cc

    r10365 r10366  
    3535#include "util/loading/factory.h"
    3636
    37 #include "class_id_DEPRECATED.h"
     37
    3838
    3939using namespace std;
  • branches/playability.merge/src/world_entities/weapons/swarm_launcher.cc

    r10365 r10366  
    3434#include "util/loading/factory.h"
    3535
    36 #include "class_id_DEPRECATED.h"
     36
    3737
    3838using namespace std;
    3939
    40 ObjectListDefinitionID(SwarmLauncher, CL_SWARM_LAUNCHER);
     40ObjectListDefinition(SwarmLauncher);
    4141CREATE_FACTORY(SwarmLauncher);
    4242
     
    155155      if (pj == NULL)
    156156        return;
    157      
     157
    158158      fired = true;
    159159      pj->setVelocity(this->getVelocity()+(this->getAbsDir().apply(Vector(1,0,0))*115.0 + VECTOR_RAND(10)));
  • branches/playability.merge/src/world_entities/weapons/weapon.cc

    r9869 r10366  
    3333#include "resource_sound_buffer.h"
    3434
    35 #include "elements/glgui_energywidget.h"
     35#include "elements/glgui_energywidgetvertical.h"
    3636
    3737ObjectListDefinition(Weapon);
     
    119119  }
    120120
    121   this->soundSource = new OrxSound::SoundSource(this);       //< Every Weapon has exacty one SoundSource.
    122   this->emissionPoint.setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
    123   this->emissionPoint.setName("EmissionPoint");
    124   this->emissionPoint.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     121  this->soundSource = new OrxSound::SoundSource(this);       //< Every Weapon has exacty one SoundSource
     122
     123  this->barrels = 1;
     124  this->segs = 1;
     125
     126  this->shootAnim = new Animation3D**[this->getBarrels()];
     127  for (int i = 0; i < this->getBarrels(); i++)
     128    this->shootAnim[i] = new Animation3D* [this->getSegs()];
     129
     130  this->emissionPoint = new PNode*[this->barrels];
     131  for(int i = 0; i < this->barrels; i++){
     132    this->emissionPoint[i] = new PNode;
     133    this->emissionPoint[i]->setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
     134    this->emissionPoint[i]->setName("EmissionPoint");
     135    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     136  }
    125137
    126138  this->defaultTarget = NULL;                      //< Nothing is Targeted by default.
     
    145157
    146158/**
     159 * needed, if there are more than one barrel or segments
     160 */
     161void Weapon::init2()
     162{
     163  if (this->barrels == 1 && this->segs == 1)
     164    return;
     165
     166  delete this->emissionPoint[0];
     167  delete this->emissionPoint;
     168  delete this->shootAnim[0];
     169  delete this->shootAnim;
     170
     171  this->shootAnim = new Animation3D**[this->barrels];
     172  this->emissionPoint = new PNode*[this->barrels];
     173  for(int i = 0; i < this->barrels; i++){
     174    this->emissionPoint[i] = new PNode;
     175    this->emissionPoint[i]->setParent(this);             //< One EmissionPoint, that is a PNode connected to the weapon. You can set this to the exitting point of the Projectiles
     176    this->emissionPoint[i]->setName("EmissionPoint");
     177    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
     178    this->shootAnim[i] = new Animation3D* [this->segs];
     179  }
     180}
     181
     182/**
     183 * deconstructor for init2
     184 */
     185void Weapon::deconstr()
     186{
     187  for(int i = 0; i < this->barrels; i++) {
     188    delete this->emissionPoint[i];
     189    for (int j = 0; j < this->segs; j++)
     190      delete this->shootAnim[i][j];
     191    delete this->shootAnim[i];
     192  }
     193
     194  delete this->emissionPoint;
     195  delete this->shootAnim;
     196}
     197
     198/**
    147199 * loads the Parameters of a Weapon
    148200 * @param root the XML-Element to load the Weapons settings from
     
    154206  LoadParam(root, "projectile", this, Weapon, setProjectileTypeC)
    155207  .describe("Sets the name of the Projectile to load onto the Entity");
    156 
     208/*
    157209  LoadParam(root, "emission-point", this, Weapon, setEmissionPoint)
    158   .describe("Sets the Point of emission of this weapon");
     210  .describe("Sets the Point of emission of this weapon (1: EmmsionVector; 2: EmissionPoint)");*/
    159211
    160212  LoadParam(root, "state-duration", this, Weapon, setStateDuration)
     
    253305 * @param point the Point relative to the mass-point of the Weapon
    254306 */
     307void Weapon::setEmissionPoint(const Vector& point, int barrel)
     308{
     309  this->emissionPoint[barrel]->setRelCoor(point);
     310}
     311
    255312void Weapon::setEmissionPoint(const Vector& point)
    256313{
    257   this->emissionPoint.setRelCoor(point);
    258 }
    259 
     314  this->emissionPoint[0]->setRelCoor(point);
     315}
    260316
    261317/**
     
    315371}
    316372
     373Animation3D* Weapon::getAnimation(int barrel, int seg, PNode* node)
     374{
     375  if (barrel >= this->getBarrels() || seg >= this->getSegs()) // if the state is not known
     376    return NULL;
     377
     378  if (unlikely(this->shootAnim[barrel][seg] == NULL)) // if the animation does not exist yet create it.
     379  {
     380    if (likely(node != NULL))
     381      return this->shootAnim[barrel][seg] = new Animation3D(node);
     382    else
     383    {
     384//       PRINTF(2)("Node not defined for the Creation of the 3D-animation of state %s\n", stateToChar(state));
     385      return NULL;
     386    }
     387  }
     388  else
     389    return this->shootAnim[barrel][seg];
     390}
     391
    317392OrxGui::GLGuiWidget* Weapon::getEnergyWidget()
    318393{
    319   if (this->energyWidget == NULL)
    320   {
    321     this->energyWidget = new OrxGui::GLGuiEnergyWidget();
    322     this->energyWidget->setDisplayedName(this->getClassCName());
     394  if ( this->energyWidget == NULL)
     395  {
     396    this->energyWidget = new OrxGui::GLGuiEnergyWidgetVertical();
     397    //this->energyWidget->setDisplayedName(this->getClassCName());
    323398    this->energyWidget->setSize2D( 20, 100);
    324399    this->energyWidget->setMaximum(this->getEnergyMax());
     
    352427  if (likely(this->isActive()))
    353428  {
     429    /** Disabled for releaseFire() from WM*/
    354430    if (this->requestedAction != WA_NONE)
    355431      return;
     
    378454  {
    379455    this->energy += energyToAdd;
     456    this->updateWidgets();
    380457    return 0.0;
    381458  }
     
    383460  {
    384461    this->energy += maxAddEnergy;
     462    this->updateWidgets();
    385463    return energyToAdd - maxAddEnergy;
    386464  }
     465 
    387466}
    388467
     
    431510    break;
    432511    default:
    433     PRINTF(2)("Action %s Not Implemented yet \n", Weapon::actionToChar(action));
     512    PRINTF(5)("Action %s Not Implemented yet \n", Weapon::actionToChar(action));
    434513    return false;
    435514  }
     
    507586bool Weapon::fireW()
    508587{
     588//   printf("fireW Weapon\n");
    509589  //if (likely(this->currentState != WS_INACTIVE))
    510590  if (this->minCharge <= this->energy)
     
    513593    if (this->soundBuffers[WA_SHOOT].loaded())
    514594      this->soundSource->play(this->soundBuffers[WA_SHOOT]);
    515     this->updateWidgets();
    516595    // fire
    517596    this->energy -= this->minCharge;
     
    519598    // setting up for the next state
    520599    this->enterState(WS_SHOOTING);
     600    this->updateWidgets();
    521601  }
    522602  else  // reload if we still have the charge
     
    538618      unlikely(this->energy + this->ammoContainer->getStoredEnergy() < this->minCharge))
    539619  {
    540     this->requestAction(WA_DEACTIVATE);
     620    //this->requestAction(WA_DEACTIVATE);
    541621    this->execute();
    542622    return false;
  • branches/playability.merge/src/world_entities/weapons/weapon.h

    r9869 r10366  
    126126
    127127    // EMISSION
     128    /** keeping old functions*/
     129    void setEmissionPoint(const Vector& point, int barrel);
    128130    void setEmissionPoint(const Vector& point);
    129131    /** @see void setEmissionPoint(const Vector& point); */
     132    inline void setEmissionPoint(float x, float y, float z, int barrel) { this->setEmissionPoint(Vector(x, y, z), barrel); };
    130133    inline void setEmissionPoint(float x, float y, float z) { this->setEmissionPoint(Vector(x, y, z)); };
    131134    /** @returns the absolute Position of the EmissionPoint */
    132     inline const Vector& getEmissionPoint() const { return this->emissionPoint.getAbsCoor(); };
     135    inline const Vector& getEmissionPoint(int barrel) const { return this->emissionPoint[barrel]->getAbsCoor(); };
     136    inline const Vector& getEmissionPoint() const { return this->emissionPoint[0]->getAbsCoor(); };
     137
    133138
    134139    inline void setDefaultTarget(PNode* defaultTarget) { this->defaultTarget = defaultTarget; };
     
    158163
    159164    Animation3D* getAnimation(WeaponState state, PNode* node = NULL);
     165    Animation3D* getAnimation(int barrel, int seg, PNode* node);
    160166    Animation3D* copyAnimation(WeaponState from, WeaponState to);
    161167
     
    169175    bool check() const;
    170176    void debug() const;
     177
     178    inline int getBarrels() {return this->barrels; };
     179    inline int getSegs() { return this->segs; };
     180    inline void setBarrels(int barrels) { this->barrels = barrels; };
     181    inline void setSegs(int segs) { this->segs = segs; };
     182
     183    inline Animation3D* getShootAnim(int barrel, int seg) { return this->shootAnim[barrel][seg]; };
     184    inline void setShootAnim(int barrel, int seg, PNode* component) { this->shootAnim[barrel][seg] = this->getAnimation(barrel, seg, component); };
     185
     186    void init2();
     187    void deconstr();
    171188
    172189  protected:
     
    184201    static WeaponState   charToState(const std::string& state);
    185202    static const char*   stateToChar(WeaponState state);
     203
     204
    186205
    187206  private:
     
    214233    float                maxCharge;                        //!< The maximal energy to be loaded onto one projectile (this is only availible if chargeable is enabled)
    215234
    216     OrxGui::GLGuiEnergyWidget* energyWidget;
     235    OrxGui::GLGuiEnergyWidgetVertical* energyWidget;
    217236
    218237    PNode*               defaultTarget;                    //!< A target for targeting Weapons.
     
    230249    OrxSound::SoundBuffer  soundBuffers[WA_ACTION_COUNT];   //!< SoundBuffers for all actions @see WeaponAction.
    231250
    232     PNode                  emissionPoint;                   //!< The point, where the projectiles are emitted. (this is coppled with the Weapon by default)
     251    PNode**                emissionPoint;                   //!< The point, where the projectiles are emitted. (this is coppled with the Weapon by default)
    233252
    234253    bool                   hideInactive;                    //!< Hides the Weapon if it is inactive
     
    237256    ClassID                projectile;                      //!< the projectile used for this weapon (since they should be generated via macro and the FastFactory, only the ClassID must be known.)
    238257    FastFactory*           projectileFactory;               //!< A factory, that produces and handles the projectiles.
     258
     259    int                    barrels;                         //!< # of barrels
     260    int                    segs;                             //!< # of segments, one barrel has
     261    Animation3D***         shootAnim;
     262
    239263  };
    240264
  • branches/playability.merge/src/world_entities/weapons/weapon_manager.cc

    r9869 r10366  
    103103
    104104  this->currentConfigID = 0;
    105   this->slotCount = 2;
     105  this->slotCount = WM_MAX_SLOTS;
    106106  //this->weaponChange;
    107107
     
    114114  this->crossHairSizeAnim->addKeyFrame(100, .05, ANIM_LINEAR);
    115115  this->crossHairSizeAnim->addKeyFrame(50, .01, ANIM_LINEAR);
     116
     117  this->hideCrosshair();
     118
     119  this->bFire = false;
     120}
     121
     122void WeaponManager::showCrosshair()
     123{
     124  this->crosshair->setVisibility( true);
     125}
     126
     127void WeaponManager::hideCrosshair()
     128{
     129  this->crosshair->setVisibility( false);
     130}
     131
     132void WeaponManager::setRotationSpeed(float speed)
     133{
     134  this->crosshair->setRotationSpeed(speed);
    116135}
    117136
     
    300319    if (this->parentEntity->isA(Playable::staticClassID()))
    301320      dynamic_cast<Playable*>(this->parentEntity)->weaponConfigChanged();
     321   
    302322    weapon->setDefaultTarget(this->crosshair);
    303323  }
     
    317337
    318338/**
    319  * @brief does the same as the funtion inclreaseAmmunition, added four your convenience
     339 * @brief does the same as the funtion increaseAmmunition, added four your convenience
    320340 * @param weapon, the Weapon to read the ammo-info about.
    321341 * @param ammo how much ammo to add.
    322342 */
    323 float WeaponManager::inclreaseAmmunition(const Weapon* weapon, float ammo)
     343float WeaponManager::increaseAmmunition(const Weapon* weapon, float ammo)
    324344{
    325345  assert (weapon != NULL);
     
    400420  this->currentConfigID = weaponConfig;
    401421  PRINTF(4)("Changing weapon configuration: to %i\n", this->currentConfigID);
     422
    402423  for (int i = 0; i < WM_MAX_SLOTS; i++)
    403424    this->currentSlotConfig[i].nextWeapon = this->configs[currentConfigID][i];
     
    410431void WeaponManager::fire()
    411432{
     433//   printf("firing WM: ");
    412434  Weapon* firingWeapon;
    413435  for(int i = 0; i < this->slotCount; i++)
    414436  {
     437//     printf("%i ", i);
     438          firingWeapon = this->currentSlotConfig[i].currentWeapon;
     439      if( firingWeapon != NULL && firingWeapon->getCurrentState() == WS_SHOOTING) continue;
     440          if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT);
     441  }
     442//   printf("\n");
     443  /*
     444        this->crosshair->setRotationSpeed(500);
     445        this->crossHairSizeAnim->replay();
     446  */
     447}
     448
     449/**
     450 * triggers fire of all weapons in the current weaponconfig
     451 */
     452void WeaponManager::releaseFire()
     453{
     454  Weapon* firingWeapon;
     455  for(int i = 0; i < this->slotCount; i++)
     456  {
    415457    firingWeapon = this->currentSlotConfig[i].currentWeapon;
    416     if( firingWeapon != NULL) firingWeapon->requestAction(WA_SHOOT);
    417   }
     458    if( firingWeapon != NULL) firingWeapon->requestAction(WA_NONE);
     459  }
     460
     461  /*
    418462  this->crosshair->setRotationSpeed(500);
    419463  this->crossHairSizeAnim->replay();
    420 }
    421 
     464  */
     465}
    422466
    423467/**
     
    429473  Weapon* tickWeapon;
    430474
     475
    431476  for(int i = 0; i < this->slotCount; i++)
    432477  {
    433 /*
    434     NICE LITTLE DEBUG FUNCTION
    435        if (this->currentSlotConfig[i].currentWeapon != NULL || this->currentSlotConfig[i].nextWeapon != NULL)
     478
     479    //NICE LITTLE DEBUG FUNCTION
     480    /*   if (this->currentSlotConfig[i].currentWeapon != NULL || this->currentSlotConfig[i].nextWeapon != NULL)
    436481      printf("%p %p\n", this->currentSlotConfig[i].currentWeapon, this->currentSlotConfig[i].nextWeapon);*/
    437482
     
    455500        }
    456501      }
    457 
    458502      // switching to next Weapon
    459503      tickWeapon = this->currentSlotConfig[i].currentWeapon = this->currentSlotConfig[i].nextWeapon;
     504     
    460505      if (tickWeapon != NULL)
    461506      {
    462            //        if (this->parent != NULL)
    463           tickWeapon->toList(this->parentEntity->getOMListNumber());
     507        //if (this->parent != NULL)
     508        tickWeapon->toList(this->parentEntity->getOMListNumber());
    464509        tickWeapon->requestAction(WA_ACTIVATE);
    465510        this->currentSlotConfig[i].position.activateNode();
  • branches/playability.merge/src/world_entities/weapons/weapon_manager.h

    r9869 r10366  
    6060    void loadWeapons(const TiXmlElement* root);
    6161
     62    void showCrosshair();
     63    void hideCrosshair();
     64    void setRotationSpeed(float speed);
     65
    6266    void setSlotCount(unsigned int slotCount);
    6367    unsigned int getSlotCount() const { return this->slotCount; };
     
    9195
    9296    float increaseAmmunition(const ClassID& projectileType, float ammo);
    93     float inclreaseAmmunition(const Weapon* weapon, float ammo);
     97    float increaseAmmunition(const Weapon* weapon, float ammo);
    9498
    9599    /** @returns a fixed target namely the Crosshair's 3D position */
     
    99103    //! @TODO: implement this function (maybe also in Weapon itself)
    100104    void releaseFire();
     105    //inline void setFire() { this->bFire = true; };
    101106
    102107    void tick(float dt);
     
    127132
    128133    std::vector<CountPointer<AmmoContainer> > ammo;                   //!< Containers
     134
     135    bool                    bFire;
    129136};
    130137
  • branches/playability.merge/src/world_entities/world_entity.cc

    r10314 r10366  
    3232
    3333#include "util/loading/load_param.h"
     34#include "loading/load_param_xml.h"
     35#include "util/loading/factory.h"
     36
    3437#include "obb_tree.h"
    3538
    3639#include "elements/glgui_energywidget.h"
     40#include "elements/glgui_energywidgetvertical.h"
    3741
    3842#include "state.h"
     
    4448#include "kill.h"
    4549#include "debug.h"
     50
     51#include "track/track.h"
    4652
    4753#include "projectiles/projectile.h"
     
    8692  this->_bOnGround = false;
    8793
     94  // Track of this entity
     95  this->entityTrack = NULL;
     96
    8897  // registering default reactions:
    8998  this->subscribeReaction(CoRe::CREngine::CR_OBJECT_DAMAGE, Projectile::staticClassID());
     
    148157  .describe("the fileName of the object information file (optional)");
    149158
     159  // Entity Attributes
    150160  LoadParam(root, "maxHealth", this, WorldEntity, setHealthMax)
    151161  .describe("The Maximum health that can be loaded onto this entity")
     
    157167
    158168  LoadParam(root, "list", this, WorldEntity, toListS);
     169
     170
     171  // Track
     172  LoadParamXML(root, "Track", this, WorldEntity, addTrack)
     173   .describe("creates and adds a track to this WorldEntity");
     174}
     175
     176
     177/**
     178 * this functions adds a track to this workd entity. This can be usefull, if you like this WE to follow a some waypoints.
     179 * here the track is created and further initializing left for the Track itself
     180 */
     181void WorldEntity::addTrack(const TiXmlElement* root)
     182{
     183  // The problem we have is most likely here. The track should be constructed WITH the XML-Code
     184  this->entityTrack = new Track(root);
     185  this->setParent(this->entityTrack->getTrackNode());
     186  this->entityTrack->getTrackNode()->setParentMode(PNODE_ALL);
     187  /*LOAD_PARAM_START_CYCLE(root, element);
     188  {
     189    PRINTF(4)("element is: %s\n", element->Value());
     190    Factory::fabricate(element);
     191  }
     192  LOAD_PARAM_END_CYCLE(element);*/
     193 
     194
    159195}
    160196
     
    613649*/
    614650void WorldEntity::tick(float time)
    615 {}
     651{
     652}
    616653
    617654
     
    652689      this->models[0]->draw();
    653690    }
     691   
     692    //if (this->entityTrack)
     693       //this->entityTrack->drawGraph(0.02);
    654694
    655695    //     if( this->aabbNode != NULL)
     
    721761  if (this->healthWidget == NULL)
    722762  {
    723     this->healthWidget = new OrxGui::GLGuiEnergyWidget();
    724     this->healthWidget->setDisplayedName(std::string(this->getClassName()) + " Energy:");
    725     this->healthWidget->setSize2D(30,400);
    726     this->healthWidget->setAbsCoor2D(10,100);
     763    this->healthWidget = new OrxGui::GLGuiEnergyWidgetVertical();
     764    //this->healthWidget->setDisplayedName("Health");
     765    //this->healthWidget->setSize2D(100,20);
     766    //this->healthWidget->setAbsCoor2D(100,200);
    727767
    728768    this->updateHealthWidget();
     
    773813void WorldEntity::hit(float damage, WorldEntity* killer)
    774814{
     815
    775816  this->decreaseHealth(damage);
    776817
  • branches/playability.merge/src/world_entities/world_entity.h

    r10314 r10366  
    2525// FORWARD DECLARATION
    2626namespace OrxSound { class SoundBuffer; class SoundSource; }
    27 namespace OrxGui { class GLGuiWidget; class GLGuiBar; class GLGuiEnergyWidget; };
     27namespace OrxGui { class GLGuiWidget; class GLGuiBar; class GLGuiEnergyWidget; class GLGuiEnergyWidgetVertical; };
    2828namespace CoRe { class Collision; }
    2929
     
    3232class AABBTreeNode;
    3333class Model;
     34class Track;
     35class TiXmlElement;
    3436
    3537class ObjectInformationFile;
     
    156158  void increaseHealthMax(float increaseHealth);
    157159  OrxGui::GLGuiWidget* getHealthWidget();
    158   bool hasHealthWidget() const { return this->healthWidget; };
     160  bool hasHealthWidget() const { return this->healthWidget != NULL; };
    159161
    160162  virtual void varChangeHandler( std::list<int> & id );
     
    185187private:
    186188  void updateHealthWidget();
     189  void addTrack(const TiXmlElement* root);
    187190
    188191
     
    192195  float                   health;             //!< The Energy of this Entity, if the Entity has any energy at all.
    193196  float                   healthMax;          //!< The Maximal energy this entity can take.
    194   OrxGui::GLGuiEnergyWidget* healthWidget;    //!< The Slider (if wanted).
     197  OrxGui::GLGuiEnergyWidgetVertical* healthWidget;    //!< The Slider (if wanted).
    195198
    196199  std::vector<Model*>     models;             //!< The model that should be loaded for this entity.
     
    235238protected:
    236239  Vector                  velocity;                        //!< speed of the entity
     240  Track*                  entityTrack;                     //!< this is the track this entity follows (or NULL if none)
    237241
    238242};
Note: See TracChangeset for help on using the changeset viewer.