public void Restart( PhysicsSyncType physicsSyncType) { _physicsSyncType = physicsSyncType; UpdateTexts(); }
public void PerformRestart( PhysicsSyncType syncType) { _syncType = syncType; if (_syncType == PhysicsSyncType.Post_Update) { Physics2D.autoSimulation = false; } else { Physics2D.autoSimulation = true; } }
private void PerformRestart() { for (int i = 0; i < _balls.Count; i++) { Destroy(_balls[i].gameObject); } _balls.Clear(); for (int i = 0; i < _attachments.Count; i++) { Destroy(_attachments[i].gameObject); } _attachments.Clear(); if (_vsyncSlider.value != 0) { QualitySettings.vSyncCount = (int)_vsyncSlider.value; Application.targetFrameRate = 0; } else { QualitySettings.vSyncCount = 0; if (_frameRateSlider.value <= 300) { Application.targetFrameRate = (int)_frameRateSlider.value; } else { Application.targetFrameRate = int.MaxValue; } } Time.fixedDeltaTime = 1f / (int)_physicsRateSlider.value; _frameRatePanel.gameObject.SetActive(_vsyncSlider.value == 0); _physicsSyncType = (PhysicsSyncType)(int)_physicsSyncSlider.value; _manualPhysicUpdate.PerformRestart(_physicsSyncType); DisplayStyle displayStyle = (DisplayStyle)(int)_displaySlider.value; _rigidbodySpriteUpdate.PerformRestart(displayStyle); _colliderTilemap.ClearAllTiles(); _backgroundTilemap.ClearAllTiles(); int laneCount = (int)_laneSlider.value; const int laneMinX = -18; const int laneMaxX = 9; int laneY = 6; for (int i = 0; i < laneCount; ++i) { for (int yOffset = i == 0 ? 0 : 1; yOffset < 4; ++yOffset) { for (int x = laneMinX; x <= laneMaxX; ++x) { if (yOffset == 0 || yOffset == 3 || x == laneMinX || x == laneMaxX) { _colliderTilemap.SetTile(new Vector3Int(x, laneY, 0), _wallTile); } else { _backgroundTilemap.SetTile(new Vector3Int(x, laneY, 0), _backgroundTile); } } laneY -= 1; } } CameraMinY = laneY; for (int i = 0; i < _players.Count; ++i) { Destroy(_players[i].gameObject); } _players.Clear(); while (_players.Count < laneCount) { Player player = Instantiate(_playerPrefab); _players.Add(player); } if (_followLane >= 0) { if (_followLane > _players.Count - 1) { _followLane = _players.Count - 1; } _mainCamera.Follow(_players[_followLane]); } while (!_sharedSettings && _laneCanvases.Count < laneCount || _sharedSettings && _laneCanvases.Count < 1) { LaneCanvas newLaneCanvas = Instantiate(_laneCanvasPrefab, _laneCanvasParent); if (_laneCanvases.Count > 0) { LaneCanvas lastLaneCanvas = _laneCanvases[_laneCanvases.Count - 1]; newLaneCanvas.MethodType = lastLaneCanvas.MethodType; newLaneCanvas.BodyType = lastLaneCanvas.BodyType; newLaneCanvas.MovementType = lastLaneCanvas.MovementType; newLaneCanvas.InterpolationType = lastLaneCanvas.InterpolationType; } _laneCanvases.Add(newLaneCanvas); } for (int i = 0; i < _laneCanvases.Count; ++i) { LaneCanvas laneCanvas = _laneCanvases[i]; if (!_sharedSettings && i < laneCount || _sharedSettings && i == 0) { laneCanvas.gameObject.SetActive(true); } else { laneCanvas.gameObject.SetActive(false); } if (i < laneCount) { laneCanvas.Init(i, _players[i]); } laneCanvas.Restart(_physicsSyncType); } for (int i = 0; i < _players.Count; ++i) { Player player = _players[i]; LaneCanvas laneCanvas; if (!_sharedSettings) { laneCanvas = _laneCanvases[i]; laneCanvas.transform.position = new Vector3(14.75f, 5f - i * 3, 0); } else { laneCanvas = _laneCanvases[0]; laneCanvas.transform.position = new Vector3(14.75f, 5f, 0); } player.Restart( i, new Vector3(_playerMinX, 5 - i * 3, 0), _playerMinX, _playerMaxX, _physicsSyncType == PhysicsSyncType.Default ? laneCanvas.MethodType : MethodType.Update, laneCanvas.BodyType, laneCanvas.MovementType, laneCanvas.InterpolationType, _speedSlider.value, displayStyle); _rigidbodySpriteUpdate.RegisterPlayer(player); if (_hingeSlider.value > 0 && player.HingeJoint != null) { Vector2 offset = new Vector2(0.0f, 0.7f); Vector3 connectedPos = player.transform.position; connectedPos.x += offset.x; connectedPos.y += offset.y; HingeJoint2D playerHingeJoint = player.HingeJoint; Rigidbody2D attachment = GameObject.Instantiate(Simulation.Instance.AttachmentPrefab, connectedPos, Quaternion.identity, _attachmentParent); playerHingeJoint.connectedBody = attachment; playerHingeJoint.connectedAnchor = offset; playerHingeJoint.enabled = true; _attachments.Add(attachment); } float x = -13; float y = _players[i].transform.position.y; float yOffset = 0; int ballCount = (int)_ballSlider.value; for (int j = 0; j < ballCount; ++j) { Transform transform = Instantiate(_ballPrefab, _ballParent); transform.position = new Vector3(x, y + (yOffset % 1f) - 0.5f); _balls.Add(transform); x += 1.2f; if (x > 7) { x = -13; } yOffset += Mathf.PI; } } }