00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 #include "space/spacecraft.hpp"
00035 
00036 using namespace gsgl;
00037 using namespace gsgl::data;
00038 using namespace gsgl::math;
00039 using namespace gsgl::scenegraph;
00040 using namespace gsgl::physics;
00041 
00042 namespace periapsis
00043 {
00044 
00045     namespace space
00046     {
00047 
00048         BROKER_DEFINE_CREATOR(periapsis::space::spacecraft);
00049 
00050 
00051         spacecraft_module::spacecraft_module(const config_record & obj_config)
00052             : vehicle_module(obj_config)
00053         {
00054         } 
00055 
00056 
00057         spacecraft_module::~spacecraft_module()
00058         {
00059         } 
00060 
00061 
00062         
00063 
00064         spacecraft::spacecraft(const config_record & obj_config)
00065             : vehicle(obj_config)
00066         {
00067         } 
00068 
00069 
00070         spacecraft::~spacecraft()
00071         {
00072         } 
00073 
00074 
00075         void spacecraft::init(gsgl::scenegraph::context *c)
00076         {
00077             vehicle::init(c);
00078         } 
00079 
00080 
00081         void spacecraft::draw(gsgl::scenegraph::context *c)
00082         {
00083             vehicle::draw(c);
00084         } 
00085 
00086 
00087         static int accel = 0;
00088 
00089 
00090         void spacecraft::update(gsgl::scenegraph::context *c)
00091         {
00092             vehicle::update(c);
00093 
00094             double delta = c->cur_time - c->start_time;
00095 
00096             if (delta > 5 && delta < 10)
00097                 accel = 1;
00098             else if (delta > 15 && delta < 20)
00099                 accel = 2;
00100             else if (delta > 25 && delta < 30)
00101                 accel = 3;
00102             else
00103                 accel = 0;
00104         } 
00105 
00106 
00107         void spacecraft::cleanup(gsgl::scenegraph::context *c)
00108         {
00109             vehicle::cleanup(c);
00110         } 
00111 
00112 
00113         void spacecraft::calculate_force_and_torque(const double & t, math::vector & force, math::vector & torque)
00114         {
00115             switch (accel)
00116             {
00117             case 1:
00118                 force = vector(0, 0, 0);
00119                 torque = vector(1000, 0, 0);
00120                 break;
00121             case 2:
00122                 force = vector(0, 0, 0);
00123                 torque = vector(0, 1000, 0);
00124                 break;
00125             case 3:
00126                 force = vector(0, 0, 0);
00127                 torque = vector(0, 0, 1000);
00128                 break;
00129             case 0:
00130             default:
00131                 force = vector::ZERO;
00132                 torque = vector::ZERO;
00133                 break;
00134             }
00135         } 
00136 
00137 
00138     } 
00139 
00140 }