MCPcopy Create free account
hub / github.com/deathkiller/jazz2-native / RollbackLevelState

Method RollbackLevelState

Sources/Jazz2/Multiplayer/MpLevelHandler.cpp:5492–5523  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5490 }
5491
5492 void MpLevelHandler::RollbackLevelState()
5493 {
5494 _eventMap->RollbackToCheckpoint();
5495 _tileMap->RollbackToCheckpoint();
5496
5497 // Synchronize tilemap
5498 {
5499 // TODO: Use deflate compression here?
5500 MemoryStream packet(40 * 1024);
5501 _tileMap->SerializeResumableToStream(packet);
5502 _networkManager->SendTo([this](const Peer& peer) {
5503 auto peerDesc = _networkManager->GetPeerDescriptor(peer);
5504 return (peerDesc && peerDesc->LevelState >= PeerLevelState::LevelSynchronized);
5505 }, NetworkChannel::Main, (std::uint8_t)ServerPacketType::SyncTileMap, packet);
5506 }
5507
5508 for (auto& actor : _actors) {
5509 // Despawn all actors that were created after the last checkpoint
5510 if (actor->_spawnFrames > _checkpointFrames && !actor->GetState(Actors::ActorState::PreserveOnRollback)) {
5511 if ((actor->_state & (Actors::ActorState::IsCreatedFromEventMap | Actors::ActorState::IsFromGenerator)) != Actors::ActorState::None) {
5512 Vector2i originTile = actor->_originTile;
5513 if ((actor->_state & Actors::ActorState::IsFromGenerator) == Actors::ActorState::IsFromGenerator) {
5514 _eventMap->ResetGenerator(originTile.X, originTile.Y);
5515 }
5516
5517 _eventMap->Deactivate(originTile.X, originTile.Y);
5518 }
5519
5520 actor->_state |= Actors::ActorState::IsDestroyed;
5521 }
5522 }
5523 }
5524
5525 void MpLevelHandler::CalculatePositionInRound(bool forceSend)
5526 {

Callers

nothing calls this directly

Calls 7

SendToMethod · 0.80
ResetGeneratorMethod · 0.80
RollbackToCheckpointMethod · 0.45
GetPeerDescriptorMethod · 0.45
GetStateMethod · 0.45
DeactivateMethod · 0.45

Tested by

no test coverage detected