void Ship::SaveToJson(Json::Value &jsonObj, Space *space) { DynamicBody::SaveToJson(jsonObj, space); Json::Value shipObj(Json::objectValue); // Create JSON object to contain ship data. m_skin.SaveToJson(shipObj); VectorToJson(shipObj, m_angThrusters, "ang_thrusters"); VectorToJson(shipObj, m_thrusters, "thrusters"); shipObj["wheel_transition"] = m_wheelTransition; shipObj["wheel_state"] = FloatToStr(m_wheelState); shipObj["launch_lock_timeout"] = FloatToStr(m_launchLockTimeout); shipObj["test_landed"] = m_testLanded; shipObj["flight_state"] = int(m_flightState); shipObj["alert_state"] = int(m_alertState); shipObj["last_firing_alert"] = DoubleToStr(m_lastFiringAlert); // XXX make sure all hyperspace attrs and the cloud get saved Json::Value hyperspaceDestObj(Json::objectValue); // Create JSON object to contain hyperspace destination data. m_hyperspace.dest.ToJson(hyperspaceDestObj); shipObj["hyperspace_destination"] = hyperspaceDestObj; // Add hyperspace destination object to ship object. shipObj["hyperspace_countdown"] = FloatToStr(m_hyperspace.countdown); Json::Value gunArray(Json::arrayValue); // Create JSON array to contain gun data. for (int i = 0; i<ShipType::GUNMOUNT_MAX; i++) { Json::Value gunArrayEl(Json::objectValue); // Create JSON object to contain gun. gunArrayEl["state"] = m_gun[i].state; gunArrayEl["recharge"] = FloatToStr(m_gun[i].recharge); gunArrayEl["temperature"] = FloatToStr(m_gun[i].temperature); gunArray.append(gunArrayEl); // Append gun object to array. } shipObj["guns"] = gunArray; // Add gun array to ship object. shipObj["ecm_recharge"] = FloatToStr(m_ecmRecharge); shipObj["ship_type_id"] = m_type->id; shipObj["docked_with_port"] = m_dockedWithPort; shipObj["index_for_body_docked_with"] = space->GetIndexForBody(m_dockedWith); shipObj["hull_mass_left"] = FloatToStr(m_stats.hull_mass_left); shipObj["shield_mass_left"] = FloatToStr(m_stats.shield_mass_left); shipObj["shield_cooldown"] = FloatToStr(m_shieldCooldown); if (m_curAICmd) m_curAICmd->SaveToJson(shipObj); shipObj["ai_message"] = int(m_aiMessage); shipObj["thruster_fuel"] = DoubleToStr(m_thrusterFuel); shipObj["reserve_fuel"] = DoubleToStr(m_reserveFuel); shipObj["controller_type"] = static_cast<int>(m_controller->GetType()); m_controller->SaveToJson(shipObj, space); m_navLights->SaveToJson(shipObj); shipObj["name"] = m_shipName; jsonObj["ship"] = shipObj; // Add ship object to supplied object. }
void Frame::ToJson(Json::Value &jsonObj, Frame *f, Space *space) { Json::Value frameObj(Json::objectValue); // Create JSON object to contain frame data. frameObj["flags"] = f->m_flags; frameObj["radius"] = DoubleToStr(f->m_radius); frameObj["label"] = f->m_label; VectorToJson(frameObj, f->m_pos, "pos"); frameObj["ang_speed"] = DoubleToStr(f->m_angSpeed); MatrixToJson(frameObj, f->m_initialOrient, "init_orient"); frameObj["index_for_system_body"] = space->GetIndexForSystemBody(f->m_sbody); frameObj["index_for_astro_body"] = space->GetIndexForBody(f->m_astroBody); Json::Value childFrameArray(Json::arrayValue); // Create JSON array to contain child frame data. for (Frame* kid : f->GetChildren()) { Json::Value childFrameArrayEl(Json::objectValue); // Create JSON object to contain child frame. Frame::ToJson(childFrameArrayEl, kid, space); childFrameArray.append(childFrameArrayEl); // Append child frame object to array. } frameObj["child_frames"] = childFrameArray; // Add child frame array to frame object. SfxManager::ToJson(frameObj, f); jsonObj["frame"] = frameObj; // Add frame object to supplied object. }
void DynamicBody::SaveToJson(Json::Value &jsonObj, Space *space) { ModelBody::SaveToJson(jsonObj, space); Json::Value dynamicBodyObj(Json::objectValue); // Create JSON object to contain dynamic body data. VectorToJson(dynamicBodyObj, m_force, "force"); VectorToJson(dynamicBodyObj, m_torque, "torque"); VectorToJson(dynamicBodyObj, m_vel, "vel"); VectorToJson(dynamicBodyObj, m_angVel, "ang_vel"); dynamicBodyObj["mass"] = DoubleToStr(m_mass); dynamicBodyObj["mass_radius"] = DoubleToStr(m_massRadius); dynamicBodyObj["ang_inertia"] = DoubleToStr(m_angInertia); dynamicBodyObj["is_moving"] = m_isMoving; jsonObj["dynamic_body"] = dynamicBodyObj; // Add dynamic body object to supplied object. }
void SpaceStation::SaveToJson(Json::Value &jsonObj, Space *space) { ModelBody::SaveToJson(jsonObj, space); Json::Value spaceStationObj(Json::objectValue); // Create JSON object to contain space station data. Json::Value shipDockingArray(Json::arrayValue); // Create JSON array to contain ship docking data. for (Uint32 i = 0; i<m_shipDocking.size(); i++) { Json::Value shipDockingArrayEl(Json::objectValue); // Create JSON object to contain ship docking. shipDockingArrayEl["index_for_body"] = space->GetIndexForBody(m_shipDocking[i].ship); shipDockingArrayEl["stage"] = m_shipDocking[i].stage; shipDockingArrayEl["stage_pos"] = DoubleToStr(m_shipDocking[i].stagePos); // stagePos is a double but was saved as a float in pre-JSON system for some reason (saved as double here). VectorToJson(shipDockingArrayEl, m_shipDocking[i].fromPos, "from_pos"); QuaternionToJson(shipDockingArrayEl, m_shipDocking[i].fromRot, "from_rot"); shipDockingArray.append(shipDockingArrayEl); // Append ship docking object to array. } spaceStationObj["ship_docking"] = shipDockingArray; // Add ship docking array to space station object. // store each of the port details and bay IDs Json::Value portArray(Json::arrayValue); // Create JSON array to contain port data. for (Uint32 i = 0; i < m_ports.size(); i++) { Json::Value portArrayEl(Json::objectValue); // Create JSON object to contain port. portArrayEl["min_ship_size"] = m_ports[i].minShipSize; portArrayEl["max_ship_size"] = m_ports[i].maxShipSize; portArrayEl["in_use"] = m_ports[i].inUse; Json::Value bayArray(Json::arrayValue); // Create JSON array to contain bay data. for (Uint32 j = 0; j<m_ports[i].bayIDs.size(); j++) { Json::Value bayArrayEl(Json::objectValue); // Create JSON object to contain bay. bayArrayEl["bay_id"] = m_ports[i].bayIDs[j].first; bayArrayEl["name"] = m_ports[i].bayIDs[j].second; bayArray.append(bayArrayEl); // Append bay object to array. } portArrayEl["bays"] = bayArray; // Add bay array to port object. portArray.append(portArrayEl); // Append port object to array. } spaceStationObj["ports"] = portArray; // Add port array to space station object. spaceStationObj["index_for_system_body"] = space->GetIndexForSystemBody(m_sbody); spaceStationObj["door_animation_step"] = DoubleToStr(m_doorAnimationStep); spaceStationObj["door_animation_state"] = DoubleToStr(m_doorAnimationState); m_navLights->SaveToJson(spaceStationObj); jsonObj["space_station"] = spaceStationObj; // Add space station object to supplied object. }
void Body::SaveToJson(Json::Value &jsonObj, Space *space) { Json::Value bodyObj(Json::objectValue); // Create JSON object to contain body data. Properties().SaveToJson(bodyObj); bodyObj["index_for_frame"] = space->GetIndexForFrame(m_frame); bodyObj["label"] = m_label; bodyObj["dead"] = m_dead; VectorToJson(bodyObj, m_pos, "pos"); MatrixToJson(bodyObj, m_orient, "orient"); bodyObj["phys_radius"] = DoubleToStr(m_physRadius); bodyObj["clip_radius"] = DoubleToStr(m_clipRadius); jsonObj["body"] = bodyObj; // Add body object to supplied object. }