MCPcopy Create free account
hub / github.com/Panzerschrek/Chasm-Reverse / TryActivateProcedure

Method TryActivateProcedure

PanzerChasm/server/map.cpp:2046–2122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2044}
2045
2046void Map::TryActivateProcedure(
2047 unsigned int procedure_number,
2048 const Time current_time,
2049 Player& player,
2050 MessagesSender& messages_sender )
2051{
2052 // Hack for bad PROCEDURE.XX files, specially for map06
2053 if( procedure_number >= procedures_.size() )
2054 return;
2055
2056 const MapData::Procedure& procedure= map_data_->procedures[ procedure_number ];
2057 ProcedureState& procedure_state= procedures_[ procedure_number ];
2058
2059 // Abort reverse movement if check_back.
2060 // TODO - if player tries activate procedure, not revert in and left in BackWait state.
2061 if( procedure.check_back &&
2062 procedure_state.movement_state == ProcedureState::MovementState::ReverseMovement )
2063 {
2064 float dt_s;
2065 if( procedure.speed > 0.0f )
2066 dt_s=
2067 std::max(
2068 1.0f / ( procedure.speed * GameConstants::procedures_speed_scale ) -
2069 ( current_time - procedure_state.last_state_change_time ).ToSeconds(),
2070 0.0f );
2071 else
2072 dt_s= 0.0f;
2073
2074 procedure_state.last_state_change_time= current_time - Time::FromSeconds( dt_s );
2075 procedure_state.movement_state= ProcedureState::MovementState::Movement;
2076 return;
2077 }
2078
2079 // TODO - make activation filter better.
2080 if( !player.TryActivateProcedure( procedure_number, current_time ) )
2081 return;
2082
2083 const bool have_necessary_keys=
2084 ( !procedure. red_key_required || player.HaveRedKey() ) &&
2085 ( !procedure.green_key_required || player.HaveGreenKey() ) &&
2086 ( !procedure. blue_key_required || player.HaveBlueKey() );
2087
2088 if(
2089 // Can open if have keys, procedure not locked.
2090 // All proceduras are unlocked in deathmatch.
2091 ( ( have_necessary_keys && !procedure_state.locked ) || game_rules_ == GameRules::Deathmatch ) &&
2092 procedure_state.movement_state == ProcedureState::MovementState::None )
2093 {
2094 ActivateProcedure( procedure_number, current_time );
2095
2096 if( procedure.on_message_number != 0u )
2097 {
2098 Messages::TextMessage text_message;
2099 text_message.text_message_number= procedure.on_message_number;
2100 messages_sender.SendUnreliableMessage( text_message );
2101 }
2102 } // if activated
2103

Callers

nothing calls this directly

Calls 5

ToSecondsMethod · 0.80
HaveRedKeyMethod · 0.80
HaveGreenKeyMethod · 0.80
HaveBlueKeyMethod · 0.80
SendUnreliableMessageMethod · 0.80

Tested by

no test coverage detected