Index: code/branches/FICN/src/orxonox/AIClass.h
===================================================================
--- code/branches/FICN/src/orxonox/AIClass.h	(revision 597)
+++ code/branches/FICN/src/orxonox/AIClass.h	(revision 597)
@@ -0,0 +1,99 @@
+#ifndef AI_Class
+#define AI_Class
+
+#include <Ogre.h>
+#include <OgreVector3.h>
+#include <OgreMath.h>
+
+#include <iostream>
+
+
+#endif
+
+using namespace std;
+using namespace Ogre;
+
+class AIPilot {
+
+
+  /*
+  TASKS:                                                                         Requirements:
+
+    - Change actual Speed to required Speed                                          - Speed as Vector3 , spaceship(?) -> pilot attached to it or vice versa (?)
+    - Open fire, if allowed                                                          - Status of the fleet commander -> allowed to fire , fly etc.
+    - differ friend, ally and enemy                                                  - Lists of ships + who controls them
+    - report ship status to fleet commander                                          - Call own ship status -> ammo, damage etc.
+
+
+
+  */
+
+  public:
+    Vector3 speed;
+
+
+
+  //default constructor
+  AIPilot() {
+     speed = (1,0,0);
+  }
+
+  Vector3 steer(Vector3 reqSpeed) {
+    Quaternion sRotation = speed.getRotationTo(reqSpeed);
+    Radian rollarc = sRotation.getRoll();
+    Radian pitcharc = sRotation.getPitch();
+    Radian yawarc = sRotation.getYaw();
+    return Vector3((float)rollarc.valueRadians(), (float)pitcharc.valueRadians(), (float)yawarc.valueRadians());
+  }
+
+
+
+};
+
+class AIFleetCommander : public  AIPilot {
+
+
+  /*
+  TASKS:                                                                       Requirements:
+
+    - Same tasks as AI_Pilot (only if shipcontrol)                                   - Same as AI_Pilot
+    - Calculate required Speed for any ship in Fleet                                 - Knows all calculation functions
+    - Request fleet status and report to commander                                   - Better list of all ships -> more data for fleet ships
+
+
+
+  */
+
+  public:
+
+
+  //default constructor
+  AIFleetCommander() {
+
+  }
+
+
+
+};
+
+class AICommander : public  AIFleetCommander {
+
+
+  /*
+  TASKS:                                                                     Requirements:
+
+    - Decide on general tactics                                                      - List of general fleet status + all possible information on enemies
+    - Save and load tactical data (?)                                                - files with tactical data, e.g. success of strategy etc.
+
+
+
+  */
+
+  //default constructor
+  AICommander() {
+
+  }
+
+
+
+};
Index: code/branches/FICN/src/orxonox/Arrival.h
===================================================================
--- code/branches/FICN/src/orxonox/Arrival.h	(revision 597)
+++ code/branches/FICN/src/orxonox/Arrival.h	(revision 597)
@@ -0,0 +1,88 @@
+
+// Arrival Class
+
+
+#ifndef Arrival_Class
+#define Arrical_Class
+
+#include <Ogre.h>
+#include <OgreVector3.h>
+
+
+#include <iostream>
+
+
+#endif
+
+using namespace std;
+using namespace Ogre;
+
+class Arrival {
+
+  public:
+    Vector3 location;  // locationvector of the element
+    Vector3 speed;  // speedvector of the element
+    Vector3 acceleration;  // accelerationvector of the element
+    Vector3 target;  //target to arrive
+    int accelerationForwards;  //from steering-interface
+    int MaxSpeed;  //from steering-interface
+
+
+  Arrival() {
+    acceleration = (0,0,0);
+    speed = (0,0,0);
+    location = (0,0,0);
+    target = (0,0,0);
+  }
+
+  Arrival(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
+    acceleration = acceleration_;
+    speed = speed_;
+    location = location_;
+    target = target_;
+  }
+
+  void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, Vector3 target_) {
+    acceleration = acceleration_;
+    speed = speed_;
+    location = location_;
+    target = target_;
+  }
+
+  void setTarget(Vector3 target_) {
+    setValues(this.location, this.speed, this.acceleration, target_);
+  }
+
+  Vector3 getDirection() {
+    Vector3 direction = target-location;
+  }
+
+  double relativeDirectApproach() {
+    // Maxspeed / accelerationForwards = time needed to break with max acceleration
+    // 2*getDistance()length/(MaxSpeed/accelerationForwards)^2 = required acceleration to arrive at the target with speed = 0
+    return (accelerationForwards / (2*getDirection().length / (MaxSpeed/accelerationForwards)^2) );
+  }
+
+  void Approach() {
+    Quaternion rotation = (0,0,0,0);
+    if (relativeDirectApproach() > 1) {
+      float length = speed.length();
+      speed = (speed+getDirection());
+      speed.normalise();
+      speed = speed*length; 
+      if (relativeDirectApproach > 4) {
+        //accelerate
+      }
+      else {
+        // speed will stay constant
+      }
+
+
+    }
+    else {
+
+
+    }
+
+  }
+}
