private void Multiplayer_ModMessageReceived(object sender, ModMessageReceivedEventArgs e) { if (e.FromModID != ModEntry.Instance.PongId) { return; } if (e.Type == typeof(GameState).Name && !this.isLeader) { GameState newState = e.ReadAs <GameState>(); double diff = GetTimestamp() - newState.CurrentTime; newState.BallVelocityState.Invert(); newState.BallPositionState.Invert(); newState.PaddlePositionState.Invert(); this.state.SetState(newState); //diff milli seconds, 60 frames per second -> need to run diff * 60 //for (int i = 0; i < (diff * 60) / 1000; i++) // this.Update(); //if ((int)((diff * 60) / 1000) > 0) // ModEntry.Instance.Monitor.Log($"Follower updated {(int)((diff * 60) / 1000)} times"); } else if (e.Type == typeof(PositionState).Name && this.isLeader) { PositionState newState = e.ReadAs <PositionState>(); newState.Invert(); this.followerPaddlePosition.SetState(newState); } }