Index: /branches/vs-enhencements/src/util/track/track.cc
===================================================================
--- /branches/vs-enhencements/src/util/track/track.cc	(revision 10640)
+++ /branches/vs-enhencements/src/util/track/track.cc	(revision 10641)
@@ -255,10 +255,10 @@
        {
            Vector tmp = this->calcPos();
-    
-    
+
+
            Vector dV = tmp - this->trackNode->getAbsCoor();
            float dx = speed * dt;
            float ratio = dx / dV.len();
-    
+
            if( dt > 0.0f)
            {
@@ -267,10 +267,10 @@
            }
            tmp = this->calcPos();
-    
+
            Vector v(0.0, 1.0, 0.0);
            Quaternion quat = Quaternion(this->calcDir(), v);
            Quaternion q(-PI/2, v);
            quat = quat * q;
-    
+
            // move trackNode of the track
            this->trackNode->shiftCoor(tmp - this->trackNode->getAbsCoor());
Index: /branches/vs-enhencements/src/util/track/track.h
===================================================================
--- /branches/vs-enhencements/src/util/track/track.h	(revision 10640)
+++ /branches/vs-enhencements/src/util/track/track.h	(revision 10641)
@@ -43,8 +43,8 @@
    float                 duration;             //!< The time used to cross this Track (curve).
    float                 endTime;              //!< The time at which this Track ends.
-   float                 width;                //!< Th width of the Path. This tells the Player(s), how far he(they) can go to the left/right.
-   float                 height;
-   float                 depth;
-   float                 stretch;
+   float                 width;                //!< The width of the action box, next to the player.
+   float                 height;               //!< The Height of the action box, next to the player 
+   float                 depth;                //!< Depth of the action box
+   float                 stretch;              //!< multiplyer between w/h at player and w/h at far end of the action box
 
    int                   nodeCount;            //!< The count of points this Track has.
Index: /branches/vs-enhencements/src/world_entities/WorldEntities.am
===================================================================
--- /branches/vs-enhencements/src/world_entities/WorldEntities.am	(revision 10640)
+++ /branches/vs-enhencements/src/world_entities/WorldEntities.am	(revision 10641)
@@ -33,4 +33,5 @@
                 world_entities/weapons/spike_thrower.cc \
                 world_entities/weapons/acid_launcher.cc \
+                world_entities/weapons/rf_cannon.cc \
                 \
                 world_entities/projectiles/lbolt.cc \
@@ -184,4 +185,5 @@
                 weapons/spike_thrower.h \
                 weapons/acid_launcher.h \
+                weapons/rf_cannon.h \
                 \
                 projectiles/lbolt.h \
Index: /branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc
===================================================================
--- /branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc	(revision 10640)
+++ /branches/vs-enhencements/src/world_entities/space_ships/space_ship.cc	(revision 10641)
@@ -26,4 +26,5 @@
 #include "weapons/medium_blaster.h"
 #include "weapons/heavy_blaster.h"
+#include "weapons/rf_cannon.h"
 #include "weapons/swarm_launcher.h"
 #include "weapons/spike_thrower.h"
@@ -161,4 +162,9 @@
   wpLeft1->setName( "LightBlaster");
 
+//   Weapon* wpRight1 = new RFCannon ();
+  wpRight1->setName( "RFCannon");
+//   Weapon* wpLeft1 = new RFCannon ();
+  wpLeft1->setName( "RFCannon");
+
   Weapon* wpRight2 = new MediumBlaster ();
   wpRight2->setName( "MediumBlaster");
@@ -173,14 +179,4 @@
   Weapon* cannon = new SwarmLauncher();
   cannon->setName( "SwarmLauncher");
-/*
-  Weapon* spike = new SpikeThrower();
-  spike->setName( "SpikeThrower" );
-
-
-  Weapon* acid0 = new AcidLauncher();
-  acid0->setName( "AcidSplasher" );
-
-  Weapon* acid1 = new AcidLauncher();
-  acid1->setName( "AcidSplasher" );*/
 
 
@@ -1177,5 +1173,5 @@
 
   State::getPlayer()->hud().setOverlayPercentage(100-int(100*this->actionWidthPercentage));
-  PRINTF(0)("TravelDistance has been updated\n");
+//   PRINTF(0)("TravelDistance has been updated\n");
   this->isTravelDistanceInit = true;
 }
Index: /branches/vs-enhencements/src/world_entities/weapons/rf_cannon.cc
===================================================================
--- /branches/vs-enhencements/src/world_entities/weapons/rf_cannon.cc	(revision 10641)
+++ /branches/vs-enhencements/src/world_entities/weapons/rf_cannon.cc	(revision 10641)
@@ -0,0 +1,179 @@
+/*
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004-2006 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   ### File Specific
+   main-programmer:  Nicolas Schlumberger
+   co-programmer:
+
+*/
+
+#include "rf_cannon.h"
+#include "world_entities/projectiles/projectile.h"
+
+#include "world_entity.h"
+#include "static_model.h"
+#include "weapon_manager.h"
+#include "util/loading/factory.h"
+
+#include "animation3d.h"
+
+#include "loading/fast_factory.h"
+
+#include "elements/glgui_energywidgetvertical.h"
+
+CREATE_FACTORY(RFCannon);
+/**
+ * Standard constructor
+ */
+RFCannon::RFCannon ()
+ : Weapon()
+{
+    this->init();
+}
+
+RFCannon::RFCannon (const TiXmlElement* root = NULL)
+ : Weapon()
+{
+    this->init();
+    if (root != NULL)
+      this->loadParams(root);
+}
+
+/**
+ * Default destructor
+ */
+RFCannon::~RFCannon()
+{
+  for (int i = 0; i < this->getBarrels(); i++)
+    delete [] this->objComp[i];
+
+  delete [] this->emissionPoint;
+  delete [] this->objComp;
+}
+
+void RFCannon::loadParams(const TiXmlElement* root)
+{
+  Weapon::loadParams(root);
+}
+
+void RFCannon::init()
+{
+
+  this->loadModel("models/guns/rf_cannon.obj", 0.3);
+
+
+  this->setStateDuration(WS_SHOOTING, 0.1);  // 10 Schuss pro Sekunde
+  this->setStateDuration(WS_RELOADING, 0);
+  this->setStateDuration(WS_ACTIVATING, .5);
+  this->setStateDuration(WS_DEACTIVATING, 1);
+
+  this->setEnergyMax(500);
+  this->increaseEnergy(500);
+
+  this->setActionSound(WA_SHOOT, "sounds/guns/laser.wav");
+  this->setActionSound(WA_RELOAD, "sounds/spawn/alien_generator.wav");
+
+  this->setCapability(WTYPE_ALLDIRS | WTYPE_DIRECTIONAL | WTYPE_LIGHT);
+  this->setProjectileTypeC("LBolt");
+  this->prepareProjectiles(100);
+
+  this->setBarrels(4);
+  this->setSegs(1);
+  this->activeBarrel = 0;
+
+  this->objComp = new PNode**[this->getBarrels()];
+  this->emissionPoint = new PNode*[this->getBarrels()];
+  for (int i = 0; i < this->getBarrels(); i++) {
+    this->objComp[i] = new PNode* [this->getSegs()];
+    this->emissionPoint[i] = new PNode;
+    this->emissionPoint[i]->setParent(this);
+    this->emissionPoint[i]->setName("EmissionPoint");
+    this->emissionPoint[i]->addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT);
+    for(int j = 0; j < this->getSegs(); j++) {
+      this->objComp[i][j] = new PNode;
+    }
+  }
+
+  this->emissionPoint[0]->setRelCoor(Vector(1.02, 0.0, 0.15));
+  this->emissionPoint[1]->setRelCoor(Vector(1.02, 0.09, 0.0));
+  this->emissionPoint[2]->setRelCoor(Vector(1.02, 0.0, -0.15));
+  this->emissionPoint[3]->setRelCoor(Vector(1.02, -0.09, 0.0));
+
+  Animation3D* animation2 = this->getAnimation(WS_ACTIVATING, this);
+  Animation3D* animation3 = this->getAnimation(WS_DEACTIVATING, this);
+
+  animation2->setInfinity(ANIM_INF_CONSTANT);
+  animation3->setInfinity(ANIM_INF_CONSTANT);
+
+  animation2->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+  animation2->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+
+  animation3->addKeyFrame(Vector(0.0, 0.0, 0.0), Quaternion(), 0.5, ANIM_LINEAR, ANIM_NULL);
+  animation3->addKeyFrame(Vector(0.0, -1.0, 0.0), Quaternion(), 0.3, ANIM_LINEAR, ANIM_NULL);
+}
+
+void RFCannon::fire()
+{
+  for (int i = 0; i < this->getBarrels(); i++){
+    Projectile* pj =  this->getProjectile();
+    if (pj == NULL)
+      return;
+
+    // set the owner
+    pj->setOwner(this->getOwner());
+
+    pj->setParent(PNode::getNullParent());
+
+    pj->setVelocity(this->getAbsDir().apply(Vector(0,1,0))*190);
+
+    pj->setAbsCoor(this->emissionPoint[this->activeBarrel]->getAbsCoor());
+    pj->setAbsDir(this->getAbsDir());
+    pj->activate();
+
+    this->activeBarrel = (this->activeBarrel + 1) % this->getBarrels();
+  }
+}
+
+/**
+ *  this activates the weapon
+*/
+void RFCannon::activate()
+{
+}
+
+/**
+ *  this deactivates the weapon
+*/
+void RFCannon::deactivate()
+{
+}
+
+void RFCannon::draw() const
+{
+  glMatrixMode(GL_MODELVIEW);
+  glPushMatrix();
+    glTranslatef (this->getAbsCoor ().x, this->getAbsCoor ().y, this->getAbsCoor ().z);
+    Vector tmpRot = this->getAbsDir().getSpacialAxis();
+    glRotatef (this->getAbsDir().getSpacialAxisAngle(), tmpRot.x, tmpRot.y, tmpRot.z );
+    static_cast<StaticModel*>(this->getModel())->draw();
+  glPopMatrix();
+
+}
+
+void RFCannon::tick(float dt)
+{
+  if (!Weapon::tickW(dt))
+    return;
+  if (this->energyWidget != NULL && !this->isEnergyWidgetInitialized)
+  {
+    this->energyWidget->setDisplayedImage("textures/gui/gui_light_bolt.png");
+    this->setEnergyWidgetInitialized(true);
+  }
+}
Index: /branches/vs-enhencements/src/world_entities/weapons/rf_cannon.h
===================================================================
--- /branches/vs-enhencements/src/world_entities/weapons/rf_cannon.h	(revision 10641)
+++ /branches/vs-enhencements/src/world_entities/weapons/rf_cannon.h	(revision 10641)
@@ -0,0 +1,39 @@
+#ifndef RF_CANNON_H
+#define RF_CANNON_H
+
+
+#include "weapon.h"
+
+/**
+ *  Light Blaster class
+ */
+class RFCannon : public Weapon
+{
+  //ObjectListDeclaration(RFCannon);
+  public:
+    RFCannon ();
+    RFCannon (const TiXmlElement* root);
+    virtual ~RFCannon();
+
+    void init();
+    virtual void loadParams(const TiXmlElement* root);
+
+    virtual void activate();
+    virtual void deactivate();
+
+    virtual void fire();
+
+    virtual void tick(float dt);
+
+    virtual void draw() const;
+
+  private:
+    PNode*** objComp;
+    Animation3D*** shootAnim;
+
+    PNode** emissionPoint;
+
+    int activeBarrel;
+};
+
+#endif
