void HyperspaceCloud::Load(Serializer::Reader &rd, Space *space) { Body::Load(rd, space); m_vel = rd.Vector3d(); m_birthdate = rd.Double(); m_due = rd.Double(); m_isArrival = rd.Bool(); if (rd.Bool()) { m_ship = static_cast<Ship*>(Body::Unserialize(rd, space)); } }
void BinaryConverter::LoadMaterials(Serializer::Reader &rd) { for (Uint32 numMats = rd.Int32(); numMats > 0; numMats--) { MaterialDefinition m(""); m.name = rd.String(); m.tex_diff = rd.String(); m.tex_spec = rd.String(); m.tex_glow = rd.String(); m.tex_ambi = rd.String(); m.tex_norm = rd.String(); m.diffuse = rd.Color4UB(); m.specular = rd.Color4UB(); m.ambient = rd.Color4UB(); m.emissive = rd.Color4UB(); m.shininess = rd.Int16(); m.opacity = rd.Int16(); m.alpha_test = rd.Bool(); m.unlit = rd.Bool(); m.use_pattern = rd.Bool(); if (m.use_pattern) m_patternsUsed = true; ConvertMaterialDefinition(m); } }
void Body::Load(Serializer::Reader &rd, Space *space) { m_frame = space->GetFrameByIndex(rd.Int32()); m_label = rd.String(); m_dead = rd.Bool(); m_hasDoubleFrame = rd.Bool(); }
void ModelBody::Load(Serializer::Reader &rd, Space *space) { Body::Load(rd, space); m_isStatic = rd.Bool(); m_colliding = rd.Bool(); SetModel(rd.String().c_str()); m_model->Load(rd); }
void Body::Load(Serializer::Reader &rd) { m_frame = Serializer::LookupFrame(rd.Int32()); m_label = rd.String(); m_onscreen = rd.Bool(); m_projectedPos = rd.Vector3d(); m_dead = rd.Bool(); m_hasDoubleFrame = rd.Bool(); }
AIParagonCmdGoTo::AIParagonCmdGoTo(Serializer::Reader &rd) : AICommand(rd, CMD_PARAGON_GOTO) { m_targetFrameIndex = rd.Int32(); m_targetPosition = rd.Vector3d(); m_toTransit = rd.Bool(); if(Game::s_loadedGameVersion >= 77) { // Save game upgrade: 76 -> 77 m_targetOrient = matrix3x3d::FromVectors( rd.Vector3d(), rd.Vector3d(), rd.Vector3d()); m_startPO.pos = rd.Vector3d(); m_startPO.xaxis = rd.Vector3d(); m_startPO.yaxis = rd.Vector3d(); m_startPO.zaxis = rd.Vector3d(); m_endPO.pos = rd.Vector3d(); m_endPO.xaxis = rd.Vector3d(); m_endPO.yaxis = rd.Vector3d(); m_endPO.zaxis = rd.Vector3d(); m_speedLimit = rd.Double(); m_arrivalSpeed = rd.Double(); m_mode = static_cast<EGoToMode>(rd.Int32()); } }
void SpaceStation::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); MarketAgent::Load(rd); int num = rd.Int32(); if (num > Equip::TYPE_MAX) throw SavedGameCorruptException(); for (int i=0; i<Equip::TYPE_MAX; i++) { m_equipmentStock[i] = 0; } for (int i=0; i<num; i++) { m_equipmentStock[i] = static_cast<Equip::Type>(rd.Int32()); } // load shityard int numShipsForSale = rd.Int32(); for (int i=0; i<numShipsForSale; i++) { ShipFlavour s; s.Load(rd); m_shipsOnSale.push_back(s); } for (int i=0; i<MAX_DOCKING_PORTS; i++) { m_shipDocking[i].shipIndex = rd.Int32(); m_shipDocking[i].stage = rd.Int32(); m_shipDocking[i].stagePos = rd.Float(); m_shipDocking[i].fromPos = rd.Vector3d(); m_shipDocking[i].fromRot = rd.RdQuaternionf(); m_openAnimState[i] = rd.Float(); m_dockAnimState[i] = rd.Float(); } m_bbCreated = rd.Bool(); m_lastUpdatedShipyard = rd.Double(); m_sbody = space->GetSystemBodyByIndex(rd.Int32()); m_numPoliceDocked = rd.Int32(); InitStation(); }
void Missile::Load(Serializer::Reader &rd, Space *space) { Ship::Load(rd, space); m_ownerIndex = rd.Int32(); m_power = rd.Int32(); m_armed = rd.Bool(); }
void NavLights::Load(Serializer::Reader &rd) { m_time = rd.Float(); m_enabled = rd.Bool(); RefCountedPtr<Graphics::Material> mat; for (LightIterator it = m_lights.begin(); it != m_lights.end(); ++it) { Uint8 c = rd.Byte(); it->billboard->SetMaterial(get_material(c)); } }
SectorView::SectorView(Serializer::Reader &rd) { InitDefaults(); m_pos.x = m_posMovingTo.x = rd.Float(); m_pos.y = m_posMovingTo.y = rd.Float(); m_pos.z = m_posMovingTo.z = rd.Float(); m_rotX = m_rotXMovingTo = rd.Float(); m_rotZ = m_rotZMovingTo = rd.Float(); m_zoom = m_zoomMovingTo = rd.Float(); m_inSystem = rd.Bool(); m_current = SystemPath::Unserialize(rd); m_selected = SystemPath::Unserialize(rd); m_hyperspaceTarget = SystemPath::Unserialize(rd); m_matchTargetToSelection = rd.Bool(); m_selectionFollowsMovement = rd.Bool(); m_detailBoxVisible = rd.Byte(); InitObject(); }
void PlayerShipController::Load(Serializer::Reader &rd) { m_flightControlState = static_cast<FlightControlState>(rd.Int32()); m_setSpeed = rd.Double(); m_lowThrustPower = rd.Float(); m_rotationDamping = rd.Bool(); //figure out actual bodies in PostLoadFixup - after Space body index has been built m_combatTargetIndex = rd.Int32(); m_navTargetIndex = rd.Int32(); m_setSpeedTargetIndex = rd.Int32(); }
void Body::Load(Serializer::Reader &rd, Space *space) { m_frame = space->GetFrameByIndex(rd.Int32()); m_label = rd.String(); Properties().Set("label", m_label); m_dead = rd.Bool(); m_pos = rd.Vector3d(); for (int i=0; i<9; i++) m_orient[i] = rd.Double(); m_physRadius = rd.Double(); m_clipRadius = rd.Double(); }
void DynamicBody::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); m_force = rd.Vector3d(); m_torque = rd.Vector3d(); m_vel = rd.Vector3d(); m_angVel = rd.Vector3d(); m_mass = rd.Double(); m_massRadius = rd.Double(); m_angInertia = rd.Double(); m_isMoving = rd.Bool(); }
void SpaceStation::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); MarketAgent::Load(rd); int num = rd.Int32(); if (num > Equip::TYPE_MAX) throw SavedGameCorruptException(); for (int i=0; i<Equip::TYPE_MAX; i++) { m_equipmentStock[i] = 0; } for (int i=0; i<num; i++) { m_equipmentStock[i] = static_cast<Equip::Type>(rd.Int32()); } // load shityard int numShipsForSale = rd.Int32(); for (int i=0; i<numShipsForSale; i++) { ShipType::Id id(rd.String()); std::string regId(rd.String()); SceneGraph::ModelSkin skin; skin.Load(rd); ShipOnSale sos(id, regId, skin); m_shipsOnSale.push_back(sos); } for (int i=0; i<MAX_DOCKING_PORTS; i++) { m_shipDocking[i].shipIndex = rd.Int32(); m_shipDocking[i].stage = rd.Int32(); m_shipDocking[i].stagePos = rd.Float(); m_shipDocking[i].fromPos = rd.Vector3d(); m_shipDocking[i].fromRot = rd.RdQuaternionf(); } m_dockingLock = rd.Bool(); m_bbCreated = rd.Bool(); m_lastUpdatedShipyard = rd.Double(); m_sbody = space->GetSystemBodyByIndex(rd.Int32()); m_numPoliceDocked = rd.Int32(); InitStation(); m_navLights->Load(rd); }
void DynamicBody::Load(Serializer::Reader &rd) { ModelBody::Load(rd); for (int i=0; i<16; i++) m_orient[i] = rd.Double(); m_oldOrient = m_orient; m_force = rd.Vector3d(); m_torque = rd.Vector3d(); m_vel = rd.Vector3d(); m_angVel = rd.Vector3d(); m_mass = rd.Double(); m_massRadius = rd.Double(); m_angInertia = rd.Double(); m_enabled = rd.Bool(); }
void Ship::Load(Serializer::Reader &rd, Space *space) { DynamicBody::Load(rd, space); // needs fixups m_angThrusters = rd.Vector3d(); m_thrusters = rd.Vector3d(); m_wheelTransition = rd.Int32(); m_wheelState = rd.Float(); m_launchLockTimeout = rd.Float(); m_testLanded = rd.Bool(); m_flightState = FlightState(rd.Int32()); m_alertState = AlertState(rd.Int32()); m_lastFiringAlert = rd.Double(); m_hyperspace.dest = SystemPath::Unserialize(rd); m_hyperspace.countdown = rd.Float(); for (int i=0; i<ShipType::GUNMOUNT_MAX; i++) { m_gunState[i] = rd.Int32(); m_gunRecharge[i] = rd.Float(); m_gunTemperature[i] = rd.Float(); } m_ecmRecharge = rd.Float(); m_shipFlavour.Load(rd); m_type = &ShipType::types[m_shipFlavour.id]; m_dockedWithPort = rd.Int32(); m_dockedWithIndex = rd.Int32(); m_equipment.InitSlotSizes(m_shipFlavour.id); m_equipment.Load(rd); Init(); m_stats.hull_mass_left = rd.Float(); // must be after Init()... m_stats.shield_mass_left = rd.Float(); if(rd.Int32()) m_curAICmd = AICommand::Load(rd); else m_curAICmd = 0; m_aiMessage = AIError(rd.Int32()); SetFuel(rd.Double()); m_stats.fuel_tank_mass_left = GetShipType().fuelTankMass * GetFuel(); m_reserveFuel = rd.Double(); UpdateStats(); // this is necessary, UpdateStats() in Ship::Init has wrong values of m_thrusterFuel after Load m_controller = 0; const ShipController::Type ctype = static_cast<ShipController::Type>(rd.Int32()); if (ctype == ShipController::PLAYER) SetController(new PlayerShipController()); else SetController(new ShipController()); m_controller->Load(rd); m_equipment.onChange.connect(sigc::mem_fun(this, &Ship::OnEquipmentChange)); }
SectorView::SectorView(Serializer::Reader &rd) { InitDefaults(); m_pos.x = m_posMovingTo.x = rd.Float(); m_pos.y = m_posMovingTo.y = rd.Float(); m_pos.z = m_posMovingTo.z = rd.Float(); m_rotX = m_rotXMovingTo = rd.Float(); m_rotZ = m_rotZMovingTo = rd.Float(); m_zoom = m_zoomMovingTo = rd.Float(); // XXX I have no idea if this is correct, // I just copied it from the one other place m_zoomClamped is set m_zoomClamped = Clamp(m_zoom, 1.f, FAR_LIMIT); m_inSystem = rd.Bool(); m_current = SystemPath::Unserialize(rd); m_selected = SystemPath::Unserialize(rd); m_hyperspaceTarget = SystemPath::Unserialize(rd); m_matchTargetToSelection = rd.Bool(); m_selectionFollowsMovement = rd.Bool(); m_detailBoxVisible = rd.Byte(); InitObject(); }
void SpaceStation::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); m_oldAngDisplacement = 0.0; int num = rd.Int32(); if (num > Equip::TYPE_MAX) throw SavedGameCorruptException(); const Uint32 numShipDocking = rd.Int32(); m_shipDocking.reserve(numShipDocking); for (Uint32 i=0; i<numShipDocking; i++) { m_shipDocking.push_back(shipDocking_t()); shipDocking_t &sd = m_shipDocking.back(); sd.shipIndex = rd.Int32(); sd.stage = rd.Int32(); sd.stagePos = rd.Float(); sd.fromPos = rd.Vector3d(); sd.fromRot = rd.RdQuaternionf(); } // retrieve each of the bay groupings const Uint32 numBays = rd.Int32(); mBayGroups.reserve(numBays); for (Uint32 i=0; i<numBays; i++) { mBayGroups.push_back(SpaceStationType::SBayGroup()); SpaceStationType::SBayGroup &bay = mBayGroups.back(); bay.minShipSize = rd.Int32(); bay.maxShipSize = rd.Int32(); bay.inUse = rd.Bool(); const Uint32 numBayIds = rd.Int32(); bay.bayIDs.reserve(numBayIds); for (Uint32 j=0; j<numBayIds; j++) { const Uint32 ID = rd.Int32(); bay.bayIDs.push_back(ID); } } m_sbody = space->GetSystemBodyByIndex(rd.Int32()); m_numPoliceDocked = rd.Int32(); m_doorAnimationStep = rd.Double(); m_doorAnimationState = rd.Double(); InitStation(); m_navLights->Load(rd); }
void Shields::Load(Serializer::Reader &rd) { m_enabled = rd.Bool(); const Uint32 NumShields = rd.Int32(); assert(NumShields == m_shields.size()); for (Uint32 iRead = 0; iRead < NumShields; iRead++ ) { const Uint8 r = rd.Byte(); const Uint8 g = rd.Byte(); const Uint8 b = rd.Byte(); const std::string name = rd.String(); for (ShieldIterator it = m_shields.begin(); it != m_shields.end(); ++it) { if(name==it->m_mesh->GetName()) { it->m_colour = Color3ub(r, g, b); break; } } } }
void Ship::Load(Serializer::Reader &rd) { DynamicBody::Load(rd); // needs fixups m_angThrusters = rd.Vector3d(); m_thrusters = rd.Vector3d(); m_wheelTransition = rd.Int32(); m_wheelState = rd.Float(); m_launchLockTimeout = rd.Float(); m_testLanded = rd.Bool(); m_flightState = FlightState(rd.Int32()); m_alertState = AlertState(rd.Int32()); m_lastFiringAlert = rd.Float(); m_hyperspace.dest = SystemPath::Unserialize(rd); m_hyperspace.countdown = rd.Float(); for (int i=0; i<ShipType::GUNMOUNT_MAX; i++) { m_gunState[i] = rd.Int32(); m_gunRecharge[i] = rd.Float(); m_gunTemperature[i] = rd.Float(); } m_ecmRecharge = rd.Float(); m_shipFlavour.Load(rd); m_dockedWithPort = rd.Int32(); m_dockedWithIndex = rd.Int32(); m_equipment.InitSlotSizes(m_shipFlavour.type); m_equipment.Load(rd); Init(); m_stats.hull_mass_left = rd.Float(); // must be after Init()... m_stats.shield_mass_left = rd.Float(); if(rd.Int32()) m_curAICmd = AICommand::Load(rd); else m_curAICmd = 0; m_equipment.onChange.connect(sigc::mem_fun(this, &Ship::OnEquipmentChange)); }
Game::Game(Serializer::Reader &rd) : m_timeAccel(TIMEACCEL_PAUSED), m_requestedTimeAccel(TIMEACCEL_PAUSED), m_forceTimeAccel(false) { // signature check for (Uint32 i = 0; i < strlen(s_saveStart)+1; i++) if (rd.Byte() != s_saveStart[i]) throw SavedGameCorruptException(); // version check rd.SetStreamVersion(rd.Int32()); Output("savefile version: %d\n", rd.StreamVersion()); if (rd.StreamVersion() != s_saveVersion) { Output("can't load savefile, expected version: %d\n", s_saveVersion); throw SavedGameWrongVersionException(); } // XXX This must be done after loading sectors once we can change them in game Pi::FlushCaches(); Serializer::Reader section; // Preparing the Lua stuff LuaRef::InitLoad(); Pi::luaSerializer->InitTableRefs(); // galaxy generator section = rd.RdSection("GalaxyGen"); std::string genName = section.String(); GalaxyGenerator::Version genVersion = section.Int32(); if (genName != Pi::GetGalaxy()->GetGeneratorName() || genVersion != Pi::GetGalaxy()->GetGeneratorVersion()) { if (!Pi::CreateGalaxy(genName, genVersion)) { Output("can't load savefile, unsupported galaxy generator %s, version %d\n", genName.c_str(), genVersion); throw SavedGameWrongVersionException(); } } // game state section = rd.RdSection("Game"); m_time = section.Double(); m_state = State(section.Int32()); m_wantHyperspace = section.Bool(); m_hyperspaceProgress = section.Double(); m_hyperspaceDuration = section.Double(); m_hyperspaceEndTime = section.Double(); // space, all the bodies and things section = rd.RdSection("Space"); m_space.reset(new Space(this, section, m_time)); m_player.reset(static_cast<Player*>(m_space->GetBodyByIndex(section.Int32()))); assert(!m_player->IsDead()); // Pioneer does not support necromancy // space transition state section = rd.RdSection("HyperspaceClouds"); // hyperspace clouds being brought over from the previous system Uint32 nclouds = section.Int32(); for (Uint32 i = 0; i < nclouds; i++) m_hyperspaceClouds.push_back(static_cast<HyperspaceCloud*>(Body::Unserialize(section, 0))); // system political stuff section = rd.RdSection("Polit"); Polit::Unserialize(section); // views LoadViews(rd); // lua section = rd.RdSection("LuaModules"); Pi::luaSerializer->Unserialize(section); Pi::luaSerializer->UninitTableRefs(); LuaRef::UninitLoad(); // signature check for (Uint32 i = 0; i < strlen(s_saveEnd)+1; i++) if (rd.Byte() != s_saveEnd[i]) throw SavedGameCorruptException(); EmitPauseState(IsPaused()); }
void SpaceStation::Load(Serializer::Reader &rd, Space *space) { ModelBody::Load(rd, space); MarketAgent::Load(rd); int num = rd.Int32(); if (num > Equip::TYPE_MAX) throw SavedGameCorruptException(); for (int i=0; i<Equip::TYPE_MAX; i++) { m_equipmentStock[i] = 0; } for (int i=0; i<num; i++) { m_equipmentStock[i] = static_cast<Equip::Type>(rd.Int32()); } // load shityard int numShipsForSale = rd.Int32(); for (int i=0; i<numShipsForSale; i++) { ShipType::Id id(rd.String()); std::string regId(rd.String()); SceneGraph::ModelSkin skin; skin.Load(rd); ShipOnSale sos(id, regId, skin); m_shipsOnSale.push_back(sos); } const int32_t numShipDocking = rd.Int32(); m_shipDocking.reserve(numShipDocking); for (int i=0; i<numShipDocking; i++) { m_shipDocking.push_back(shipDocking_t()); shipDocking_t &sd = m_shipDocking.back(); sd.shipIndex = rd.Int32(); sd.stage = rd.Int32(); sd.stagePos = rd.Float(); sd.fromPos = rd.Vector3d(); sd.fromRot = rd.RdQuaternionf(); } // retrieve each of the bay groupings const int32_t numBays = rd.Int32(); mBayGroups.reserve(numBays); for (int32_t i=0; i<numBays; i++) { mBayGroups.push_back(SpaceStationType::SBayGroup()); SpaceStationType::SBayGroup &bay = mBayGroups.back(); bay.minShipSize = rd.Int32(); bay.maxShipSize = rd.Int32(); bay.inUse = rd.Bool(); const int32_t numBayIds = rd.Int32(); bay.bayIDs.reserve(numBayIds); for (int32_t j=0; j<numBayIds; j++) { const int32_t ID = rd.Int32(); bay.bayIDs.push_back(ID); } } m_bbCreated = rd.Bool(); m_lastUpdatedShipyard = rd.Double(); m_sbody = space->GetSystemBodyByIndex(rd.Int32()); m_numPoliceDocked = rd.Int32(); m_doorAnimationStep = rd.Double(); m_doorAnimationState = rd.Double(); InitStation(); m_navLights->Load(rd); }
Game::Game(Serializer::Reader &rd) : m_timeAccel(TIMEACCEL_PAUSED), m_requestedTimeAccel(TIMEACCEL_PAUSED), m_forceTimeAccel(false) { // signature check for (Uint32 i = 0; i < strlen(s_saveStart)+1; i++) if (rd.Byte() != s_saveStart[i]) throw SavedGameCorruptException(); // version check rd.SetStreamVersion(rd.Int32()); Output("savefile version: %d\n", rd.StreamVersion()); if (rd.StreamVersion() != s_saveVersion) { Output("can't load savefile, expected version: %d\n", s_saveVersion); throw SavedGameWrongVersionException(); } // XXX This must be done after loading sectors once we can change them in game Pi::FlushCaches(); Serializer::Reader section; // game state section = rd.RdSection("Game"); m_time = section.Double(); m_state = State(section.Int32()); m_wantHyperspace = section.Bool(); m_hyperspaceProgress = section.Double(); m_hyperspaceDuration = section.Double(); m_hyperspaceEndTime = section.Double(); // space, all the bodies and things section = rd.RdSection("Space"); m_space.reset(new Space(this, section, m_time)); m_player.reset(static_cast<Player*>(m_space->GetBodyByIndex(section.Int32()))); // space transition state section = rd.RdSection("HyperspaceClouds"); // hyperspace clouds being brought over from the previous system Uint32 nclouds = section.Int32(); for (Uint32 i = 0; i < nclouds; i++) m_hyperspaceClouds.push_back(static_cast<HyperspaceCloud*>(Body::Unserialize(section, 0))); // system political stuff section = rd.RdSection("Polit"); Polit::Unserialize(section); // views LoadViews(rd); // lua section = rd.RdSection("LuaModules"); Pi::luaSerializer->Unserialize(section); // signature check for (Uint32 i = 0; i < strlen(s_saveEnd)+1; i++) if (rd.Byte() != s_saveEnd[i]) throw SavedGameCorruptException(); }
void ModelBody::Load(Serializer::Reader &rd, Space *space) { Body::Load(rd, space); m_isStatic = rd.Bool(); m_colliding = rd.Bool(); }