| 2469 | } |
| 2470 | |
| 2471 | void Map::ReturnProcedure( const unsigned int procedure_number, const Time current_time ) |
| 2472 | { |
| 2473 | PC_ASSERT( procedure_number < map_data_->procedures.size() ); |
| 2474 | |
| 2475 | const MapData::Procedure& procedure= map_data_->procedures[ procedure_number ]; |
| 2476 | ProcedureState& procedure_state= procedures_[ procedure_number ]; |
| 2477 | |
| 2478 | if( procedure_state.locked ) |
| 2479 | return; |
| 2480 | |
| 2481 | switch( procedure_state.movement_state ) |
| 2482 | { |
| 2483 | case ProcedureState::MovementState::None: |
| 2484 | case ProcedureState::MovementState::ReverseMovement: |
| 2485 | break; |
| 2486 | |
| 2487 | case ProcedureState::MovementState::StartWait: |
| 2488 | procedure_state.movement_state= ProcedureState::MovementState::None; |
| 2489 | break; |
| 2490 | |
| 2491 | case ProcedureState::MovementState::Movement: |
| 2492 | { |
| 2493 | procedure_state.movement_state= ProcedureState::MovementState::ReverseMovement; |
| 2494 | float dt_s; |
| 2495 | if( procedure.speed > 0.0f ) |
| 2496 | dt_s= |
| 2497 | std::max( |
| 2498 | 1.0f / ( procedure.speed * GameConstants::procedures_speed_scale ) - |
| 2499 | ( current_time - procedure_state.last_state_change_time ).ToSeconds(), |
| 2500 | 0.0f ); |
| 2501 | else |
| 2502 | dt_s= 0.0f; |
| 2503 | procedure_state.last_state_change_time= current_time - Time::FromSeconds(dt_s); |
| 2504 | } |
| 2505 | break; |
| 2506 | |
| 2507 | case ProcedureState::MovementState::BackWait: |
| 2508 | procedure_state.movement_state= ProcedureState::MovementState::ReverseMovement; |
| 2509 | procedure_state.last_state_change_time= current_time; |
| 2510 | break; |
| 2511 | }; |
| 2512 | } |
| 2513 | |
| 2514 | void Map::ProcessWind( const MapData::Procedure::ActionCommand& command, bool activate ) |
| 2515 | { |