//////////////////////////////////////////////////////////////////////////////// /// Load Earth and Moon simulation scene //////////////////////////////////////////////////////////////////////////////// void FWAS_LoadScene_EarthMoon(FWAS* simulator) { EVDS_OBJECT* root; EVDS_OBJECT* solar_system; simulator->log(FWAS_INFO,"FWAS_SetScene_EarthMoon: loading default scene"); EVDS_System_GetRootInertialSpace(simulator->system,&root); EVDS_Object_LoadFromString(root, "<EVDS version=\"35\">" " <object name=\"Earth_Inertial_Space\" type=\"propagator_rk4\">" " <object name=\"Earth\" type=\"planet\">" " <parameter name=\"gravity.mu\">3.9860044e14</parameter>" //m3 sec-2 " <parameter name=\"geometry.radius\">6378.145e3</parameter>" //m " <parameter name=\"information.period\">86164.10</parameter>" //sec " <parameter name=\"is_static\">1</parameter>" " </object>" " </object>" "</EVDS>",&solar_system); EVDS_Object_Initialize(solar_system,1); }
//////////////////////////////////////////////////////////////////////////////// /// @brief Initialize the system and return pointer to a new EVDS_SYSTEM structure. /// /// EVDS threading system will be initialized with the first EVDS_System_Create call. At /// least one system must be created to make use of threading functions. /// /// Example /// ~~~{.c} /// EVDS_SYSTEM* system; /// EVDS_System_Create(&system); /// ~~~ /// /// @param[out] p_system A pointer to new data structure will be written here /// /// @returns Error code, pointer to system object /// @retval EVDS_OK Everything created successfully /// @retval EVDS_ERROR_BAD_PARAMETER "p_system" is null /// @retval EVDS_ERROR_MEMORY Error while allocating a data structure //////////////////////////////////////////////////////////////////////////////// int EVDS_System_Create(EVDS_SYSTEM** p_system) { EVDS_OBJECT* inertial_space; EVDS_SYSTEM* system; if (!p_system) return EVDS_ERROR_BAD_PARAMETER; //Create new system system = (EVDS_SYSTEM*)malloc(sizeof(EVDS_SYSTEM)); *p_system = system; if (!system) return EVDS_ERROR_MEMORY; memset(system,0,sizeof(EVDS_SYSTEM)); //Initialize threading and locks #ifndef EVDS_SINGLETHREADED SIMC_Thread_Initialize(); SIMC_List_Create(&system->deleted_objects,1); system->cleanup_working = SIMC_Lock_Create(); #endif //Set system to realtime by default system->time = EVDS_REALTIME; //Data structures SIMC_List_Create(&system->object_types,1); SIMC_List_Create(&system->objects,1); SIMC_List_Create(&system->solvers,1); //FIXME SIMC_List_Create(&system->databases,1); //Create root inertial space EVDS_Object_Create(system,0,&inertial_space); EVDS_Object_Initialize(inertial_space,1); system->inertial_space = inertial_space; //Load built-in databases EVDS_System_DatabaseFromString(system,EVDS_Internal_Database); //FIXME return EVDS_OK; }