void BinaryConverter::LoadAnimations(Serializer::Reader &rd) { //load channels and PRS keys const Uint32 numAnims = rd.Int32(); for (Uint32 i = 0; i < numAnims; i++) { const std::string animName = rd.String(); const double duration = rd.Double(); Animation *anim = new Animation(animName, duration); const Uint32 numChans = rd.Int32(); for (Uint32 j = 0; j < numChans; j++) { const std::string tgtName = rd.String(); MatrixTransform* tgtNode = dynamic_cast<MatrixTransform*>(m_model->m_root->FindNode(tgtName)); anim->m_channels.push_back(AnimationChannel(tgtNode)); auto& chan = anim->m_channels.back(); for (Uint32 numKeys = rd.Int32(); numKeys > 0; numKeys--) { const double ktime = rd.Double(); const vector3f kpos = rd.Vector3f(); chan.positionKeys.push_back(PositionKey(ktime, kpos)); } for (Uint32 numKeys = rd.Int32(); numKeys > 0; numKeys--) { const double ktime = rd.Double(); const Quaternionf krot = rd.RdQuaternionf(); chan.rotationKeys.push_back(RotationKey(ktime, krot)); } for (Uint32 numKeys = rd.Int32(); numKeys > 0; numKeys--) { const double ktime = rd.Double(); const vector3f kscale = rd.Vector3f(); chan.scaleKeys.push_back(ScaleKey(ktime, kscale)); } } m_model->m_animations.push_back(anim); } }
void Missile::Load(Serializer::Reader &rd, Space *space) { Ship::Load(rd, space); m_ownerIndex = rd.Int32(); m_power = rd.Int32(); m_armed = 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 Player::Load(Serializer::Reader &rd, Space *space) { Pi::player = this; Ship::Load(rd, space); MarketAgent::Load(rd); m_killCount = rd.Int32(); m_knownKillCount = rd.Int32(); }
void Missile::Load(Serializer::Reader &rd) { Ship::Load(rd); m_ownerIndex = rd.Int32(); m_targetIndex = rd.Int32(); m_distToTarget = rd.Double(); m_power = rd.Int32(); }
void Projectile::Load(Serializer::Reader &rd, Space *space) { Body::Load(rd, space); m_baseVel = rd.Vector3d(); m_dirVel = rd.Vector3d(); m_age = rd.Float(); m_type = rd.Int32(); m_parentIndex = rd.Int32(); }
void Player::Load(Serializer::Reader &rd) { Pi::player = this; Ship::Load(rd); m_flightControlState = static_cast<FlightControlState>(rd.Int32()); m_setSpeed = rd.Double(); m_killCount = rd.Int32(); m_knownKillCount = rd.Int32(); }
void Projectile::Load(Serializer::Reader &rd, Space *space) { Body::Load(rd, space); for (int i=0; i<16; i++) m_orient[i] = rd.Double(); m_baseVel = rd.Vector3d(); m_dirVel = rd.Vector3d(); m_age = rd.Float(); m_type = rd.Int32(); m_parentIndex = rd.Int32(); }
void PlayerShipController::Load(Serializer::Reader &rd) { m_flightControlState = static_cast<FlightControlState>(rd.Int32()); m_setSpeed = rd.Double(); m_lowThrustPower = rd.Float(); //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 Planet::Load(Serializer::Reader &rd) { Body::Load(rd); pos = rd.Vector3d(); sbody = Serializer::LookupSystemBody(rd.Int32()); Init(); }
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); } }
Space::Space(Game *game, Serializer::Reader &rd, double at_time) : m_game(game) , m_frameIndexValid(false) , m_bodyIndexValid(false) , m_sbodyIndexValid(false) , m_bodyNearFinder(this) #ifndef NDEBUG , m_processingFinalizationQueue(false) #endif { m_starSystem = StarSystem::Unserialize(rd); const SystemPath &path = m_starSystem->GetPath(); RebuildSystemBodyIndex(); Serializer::Reader section = rd.RdSection("Frames"); m_rootFrame.reset(Frame::Unserialize(section, this, 0, at_time)); RebuildFrameIndex(); Uint32 nbodies = rd.Int32(); for (Uint32 i = 0; i < nbodies; i++) m_bodies.push_back(Body::Unserialize(rd, this)); RebuildBodyIndex(); Frame::PostUnserializeFixup(m_rootFrame.get(), this); for (Body* b : m_bodies) b->PostLoadFixup(this); GenSectorCache(&path); }
void ScannerWidget::Load(Serializer::Reader &rd) { m_mode = ScannerMode(rd.Int32()); m_currentRange = rd.Float(); m_manualRange = rd.Float(); m_targetRange = rd.Float(); }
AICommand::AICommand(Serializer::Reader &rd, CmdName name) { m_cmdName = name; m_fuelEconomy = rd.Float(); m_shipIndex = rd.Int32(); m_child = Load(rd); }
Body *Body::Unserialize(Serializer::Reader &_rd, Space *space) { Serializer::Reader rd = _rd.RdSection("Body"); Body *b = 0; Object::Type type = Object::Type(rd.Int32()); switch (type) { case Object::STAR: b = new Star(); break; case Object::PLANET: b = new Planet(); break; case Object::SPACESTATION: b = new SpaceStation(); break; case Object::SHIP: b = new Ship(); break; case Object::PLAYER: b = new Player(); break; case Object::MISSILE: b = new Missile(); break; case Object::PROJECTILE: b = new Projectile(); break; case Object::CARGOBODY: b = new CargoBody(); break; case Object::HYPERSPACECLOUD: b = new HyperspaceCloud(); break; default: assert(0); } b->Load(rd, space); return b; }
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(); }
BBAdvert BBAdvert::Load(Serializer::Reader &rd) { std::string luaMod = rd.String(); int luaRef = rd.Int32(); std::string desc = rd.String(); return BBAdvert(luaMod, luaRef, desc); }
void Sfx::Load(Serializer::Reader &rd) { m_pos = rd.Vector3d(); m_vel = rd.Vector3d(); m_age = rd.Float(); m_type = static_cast<Sfx::TYPE>(rd.Int32()); }
Space::Space(Game *game, Serializer::Reader &rd) : m_game(game) , m_frameIndexValid(false) , m_bodyIndexValid(false) , m_sbodyIndexValid(false) , m_background(Pi::renderer) , m_bodyNearFinder(this) #ifndef NDEBUG , m_processingFinalizationQueue(false) #endif { m_starSystem = StarSystem::Unserialize(rd); m_background.Refresh(m_starSystem->GetSeed()); RebuildSystemBodyIndex(); Serializer::Reader section = rd.RdSection("Frames"); m_rootFrame.Reset(Frame::Unserialize(section, this, 0)); RebuildFrameIndex(); Uint32 nbodies = rd.Int32(); for (Uint32 i = 0; i < nbodies; i++) m_bodies.push_back(Body::Unserialize(rd, this)); RebuildBodyIndex(); Frame::PostUnserializeFixup(m_rootFrame.Get(), this); for (BodyIterator i = m_bodies.begin(); i != m_bodies.end(); ++i) (*i)->PostLoadFixup(this); }
void CargoBody::Load(Serializer::Reader &rd, Space *space) { DynamicBody::Load(rd, space); m_type = static_cast<Equip::Type>(rd.Int32()); Init(); m_hitpoints = rd.Float(); }
void CollMesh::Load(Serializer::Reader &rd) { m_aabb.max = rd.Vector3d(); m_aabb.min = rd.Vector3d(); m_aabb.radius = rd.Double(); m_geomTree = new GeomTree(rd); const Uint32 numDynGeomTrees = rd.Int32(); m_dynGeomTrees.reserve(numDynGeomTrees); for (Uint32 it = 0; it < numDynGeomTrees; ++it) { m_dynGeomTrees.push_back(new GeomTree(rd)); } m_totalTris = rd.Int32(); }
void TerrainBody::Load(Serializer::Reader &rd, Space *space) { Body::Load(rd, space); m_pos = rd.Vector3d(); SBody *sbody = space->GetSBodyByIndex(rd.Int32()); InitTerrainBody(sbody); }
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); }
ShipCpanel::ShipCpanel(Serializer::Reader &rd, Graphics::Renderer *r): Gui::Fixed(float(Gui::Screen::GetWidth()), 80) { m_scanner = new ScannerWidget(r, rd); InitObject(); m_camButton->SetActiveState(rd.Int32()); }
void ShipFlavour::Load(Serializer::Reader &rd) { id = rd.String(); price = rd.Int32(); regid = rd.String(); LoadLmrMaterial(rd, &primaryColor); LoadLmrMaterial(rd, &secondaryColor); }
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)); }
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(); }
/* * Should have initialised with EquipSet(ShipType::Type) first */ void EquipSet::Load(Serializer::Reader &rd) { const int numSlots = rd.Int32(); assert(numSlots <= Equip::SLOT_MAX); for (int i=0; i<numSlots; i++) { const int numItems = rd.Int32(); for (int j=0; j<numItems; j++) { if (j < signed(equip[i].size())) { equip[i][j] = static_cast<Equip::Type>(rd.Int32()); } else { // equipment slot sizes have changed. just // dump the difference rd.Int32(); } } } onChange.emit(); }
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(); }
void Sfx::Unserialize(Serializer::Reader &rd, Frame *f) { int numActive = rd.Int32(); if (numActive) { f->m_sfx = new Sfx[MAX_SFX_PER_FRAME]; for (int i=0; i<numActive; i++) { f->m_sfx[i].Load(rd); } } }