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

Method Tick

PanzerChasm/server/map.cpp:1009–1834  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1007}
1008
1009void Map::Tick( const Time current_time, const Time last_tick_delta )
1010{
1011 const Time prev_tick_time= current_time - last_tick_delta;
1012 const unsigned int death_ticks=
1013 static_cast<unsigned int>( GameConstants::death_ticks_per_second * current_time .ToSeconds() ) -
1014 static_cast<unsigned int>( GameConstants::death_ticks_per_second * prev_tick_time.ToSeconds() );
1015
1016 const float last_tick_delta_s= last_tick_delta.ToSeconds();
1017
1018 // Update state of procedures
1019 for( unsigned int p= 0u; p < procedures_.size(); p++ )
1020 {
1021 const MapData::Procedure& procedure= map_data_->procedures[p];
1022 ProcedureState& procedure_state= procedures_[p];
1023
1024 const Time time_since_last_state_change= current_time - procedure_state.last_state_change_time;
1025 const float new_stage=
1026 procedure.speed > 0.0f
1027 ? ( time_since_last_state_change.ToSeconds() * procedure.speed * GameConstants::procedures_speed_scale )
1028 : 1.0f;
1029
1030 // Check map end
1031 if( procedure_state.movement_state != ProcedureState::MovementState::None &&
1032 procedure.end_delay_s > 0.0f &&
1033 time_since_last_state_change.ToSeconds() >= procedure.end_delay_s )
1034 map_end_triggered_= true;
1035
1036 switch( procedure_state.movement_state )
1037 {
1038 case ProcedureState::MovementState::None:
1039 break;
1040
1041 case ProcedureState::MovementState::StartWait:
1042 if( time_since_last_state_change.ToSeconds() >= procedure.start_delay_s )
1043 {
1044 ActivateProcedureSwitches( procedure, true, current_time );
1045 DoProcedureImmediateCommands( procedure, current_time );
1046 EmitProcedureSound( procedure );
1047 procedure_state.movement_state= ProcedureState::MovementState::Movement;
1048 procedure_state.movement_stage= 0.0f;
1049 procedure_state.last_state_change_time= current_time;
1050 }
1051 else
1052 procedure_state.movement_stage= new_stage;
1053 break;
1054
1055 case ProcedureState::MovementState::Movement:
1056 if( new_stage >= 1.0f )
1057 {
1058 // TODO - do it at the end of movement?
1059 // Maybe, do this at end of reverse-movement?
1060 DoProcedureDeactivationCommands( procedure );
1061
1062 procedure_state.movement_state= ProcedureState::MovementState::BackWait;
1063 procedure_state.movement_stage= 0.0f;
1064 procedure_state.last_state_change_time= current_time;
1065 }
1066 else

Callers 2

LoopMethod · 0.45
LoopMethod · 0.45

Calls 15

GetNormalForWallFunction · 0.85
CollideWithSquareFunction · 0.85
CollideCircleWithSquareFunction · 0.85
ToSecondsMethod · 0.80
HasInfiniteSpeedMethod · 0.80
MonsterIdMethod · 0.80
RandMethod · 0.80
SetPositionMethod · 0.80
IsNoclipMethod · 0.80

Tested by

no test coverage detected