| 7 | { |
| 8 | |
| 9 | void Map::Save( SaveStream& save_stream ) const |
| 10 | { |
| 11 | // Random generator. |
| 12 | save_stream.WriteUInt32( random_generator_->GetInnerState() ); |
| 13 | |
| 14 | // Dynamic walls |
| 15 | save_stream.WriteUInt32( static_cast<uint32_t>( dynamic_walls_.size() ) ); |
| 16 | for( const DynamicWall& wall : dynamic_walls_ ) |
| 17 | { |
| 18 | save_stream.WriteVec2( wall.vert_pos[0] ); |
| 19 | save_stream.WriteVec2( wall.vert_pos[1] ); |
| 20 | save_stream.WriteVec2( wall.vert_move_speed[0] ); |
| 21 | save_stream.WriteVec2( wall.vert_move_speed[1] ); |
| 22 | save_stream.WriteFloat( wall.z ); |
| 23 | save_stream.WriteUInt8( wall.texture_id ); |
| 24 | save_stream.WriteBool( wall.mortal ); |
| 25 | } |
| 26 | |
| 27 | // Procedures |
| 28 | save_stream.WriteUInt32( static_cast<uint32_t>( procedures_.size() ) ); |
| 29 | for( const ProcedureState& procedure_state : procedures_ ) |
| 30 | { |
| 31 | save_stream.WriteBool( procedure_state.locked ); |
| 32 | save_stream.WriteBool( procedure_state.first_message_printed ); |
| 33 | save_stream.WriteUInt32( static_cast<uint32_t>( procedure_state.movement_state ) ); |
| 34 | save_stream.WriteFloat( procedure_state.movement_stage ); |
| 35 | save_stream.WriteTime( procedure_state.last_state_change_time ); |
| 36 | } |
| 37 | |
| 38 | // Map end flag |
| 39 | save_stream.WriteBool( map_end_triggered_ ); |
| 40 | |
| 41 | // Static models |
| 42 | save_stream.WriteUInt32( static_cast<uint32_t>( static_models_.size() ) ); |
| 43 | for( const StaticModel& model : static_models_ ) |
| 44 | { |
| 45 | // TODO - add save-load methods for vectors |
| 46 | save_stream.WriteVec3( model.pos ); |
| 47 | save_stream.WriteVec2( model.move_speed ); |
| 48 | save_stream.WriteFloat( model.baze_z ); |
| 49 | save_stream.WriteFloat( model.angle ); |
| 50 | save_stream.WriteUInt8( model.model_id ); |
| 51 | save_stream.WriteInt32( model.health ); |
| 52 | save_stream.WriteUInt32( static_cast<uint32_t>(model.animation_state) ); |
| 53 | save_stream.WriteTime( model.animation_start_time ); |
| 54 | save_stream.WriteUInt32( model.animation_start_frame ); |
| 55 | save_stream.WriteUInt32( model.current_animation_frame ); |
| 56 | save_stream.WriteBool( model.picked ); |
| 57 | save_stream.WriteBool( model.mortal ); |
| 58 | save_stream.WriteBool( model.switch_activated ); |
| 59 | |
| 60 | // Save optional rotating light |
| 61 | save_stream.WriteBool( model.linked_rotating_light != nullptr ); |
| 62 | if( model.linked_rotating_light != nullptr ) |
| 63 | { |
| 64 | save_stream.WriteTime( model.linked_rotating_light->start_time ); |
| 65 | save_stream.WriteTime( model.linked_rotating_light->end_time ); |
| 66 | save_stream.WriteFloat( model.linked_rotating_light->radius ); |
nothing calls this directly
no test coverage detected