| 178 | } |
| 179 | |
| 180 | Map::Map( |
| 181 | const DifficultyType difficulty, |
| 182 | const GameRules game_rules, |
| 183 | const MapDataConstPtr& map_data, |
| 184 | LoadStream& load_stream, |
| 185 | const GameResourcesConstPtr& game_resources, |
| 186 | MapEndCallback map_end_callback ) |
| 187 | : difficulty_(difficulty) |
| 188 | , game_rules_(game_rules) |
| 189 | , map_data_(map_data) |
| 190 | , game_resources_(game_resources) |
| 191 | , map_end_callback_( std::move( map_end_callback ) ) |
| 192 | , random_generator_( std::make_shared<LongRand>() ) |
| 193 | , collision_index_( map_data ) |
| 194 | { |
| 195 | PC_ASSERT( map_data_ != nullptr ); |
| 196 | PC_ASSERT( game_resources_ != nullptr ); |
| 197 | |
| 198 | // Random generator. |
| 199 | uint32_t rand_state; |
| 200 | load_stream.ReadUInt32( rand_state ); |
| 201 | random_generator_->SetInnerState( rand_state ); |
| 202 | |
| 203 | // Dynamic walls |
| 204 | unsigned int dynamic_walls_count; |
| 205 | load_stream.ReadUInt32( dynamic_walls_count ); |
| 206 | PC_ASSERT( dynamic_walls_count == map_data_->dynamic_walls.size() ); |
| 207 | dynamic_walls_.resize( dynamic_walls_count ); |
| 208 | for( DynamicWall& wall : dynamic_walls_ ) |
| 209 | { |
| 210 | load_stream.ReadVec2( wall.vert_pos[0] ); |
| 211 | load_stream.ReadVec2( wall.vert_pos[1] ); |
| 212 | load_stream.ReadVec2( wall.vert_move_speed[0] ); |
| 213 | load_stream.ReadVec2( wall.vert_move_speed[1] ); |
| 214 | load_stream.ReadFloat( wall.z ); |
| 215 | load_stream.ReadUInt8( wall.texture_id ); |
| 216 | load_stream.ReadBool( wall.mortal ); |
| 217 | } |
| 218 | |
| 219 | // Procedures |
| 220 | unsigned int procedures_count; |
| 221 | load_stream.ReadUInt32( procedures_count ); |
| 222 | PC_ASSERT( procedures_count == map_data_->procedures.size() ); |
| 223 | procedures_.resize( procedures_count ); |
| 224 | for( ProcedureState& procedure_state : procedures_ ) |
| 225 | { |
| 226 | load_stream.ReadBool( procedure_state.locked ); |
| 227 | load_stream.ReadBool( procedure_state.first_message_printed ); |
| 228 | unsigned int movement_state; |
| 229 | load_stream.ReadUInt32( movement_state ); |
| 230 | procedure_state.movement_state= static_cast<ProcedureState::MovementState>( movement_state ); |
| 231 | load_stream.ReadFloat( procedure_state.movement_stage ); |
| 232 | load_stream.ReadTime( procedure_state.last_state_change_time ); |
| 233 | } |
| 234 | |
| 235 | // Map end flag |
| 236 | load_stream.ReadBool( map_end_triggered_ ); |
| 237 |
nothing calls this directly
no test coverage detected