void ResetPlayer(PlayerResetEvent evt) { var state = evt.PlayerState; PlayerSimulations[evt.PlayerID].ResetState(ref state); evt.PlayerState = state; }
void OnPlayerDied(PlayerRespawnEvent evt) { var playerState = evt.PlayerState; var state = evt.MatchState; foreach (var respawnPosition in RespawnPositions) { if (respawnPosition == null) { continue; } var bounds = new Bounds(respawnPosition.position, RespawnBounds); bool occupied = false; for (var i = 0; i < state.PlayerCount; i++) { occupied |= bounds.Contains(state.GetPlayerState(i).Position); } if (occupied) { continue; } var resetEvent = new PlayerResetEvent(evt); Mediator.Global.Publish(resetEvent); playerState = resetEvent.PlayerState; playerState.Position = respawnPosition.position; break; } playerState.RespawnTimeRemaining = (uint)Mathf.FloorToInt(RespawnTime / Time.fixedDeltaTime); evt.PlayerState = playerState; }
//////////////////////////////////////////////////////////////// void OnPlayerReset(PlayerResetEvent e) { if (!m_DoCameraLogic) { return; } PlayerController player = PlayerManager.Get().GetPlayerController(); m_DesiredScaleFactor = 1.0f; SetCameraZoom(m_DesiredScaleFactor); m_ZoomTimeRemaining = 0.0f; Vector2 newCameraPosition; //////////////////////////////////////////////////////////////// CameraAnchorZone anchorZone = GetCameraAnchorZoneIfAny(player.transform.position.xy(), player.Collider != null ? player.Collider.radius + 0.1f : 0.1f); if (anchorZone) { // Prio 1: We focus the the newly entered camera anchor zone. if (anchorZone != m_CurrentAnchorZone) { OnPlayerEnteredAnchorZone(anchorZone); //return; } else { SetCameraMode(CameraModes.TransitionToAnchorZone); } FocusCameraOn(anchorZone.GetTargetCameraPosition(GetCameraColliderSize(), player.transform.position)); m_DesiredScaleFactor = m_CurrentAnchorZone.CameraZoom; SetCameraZoom(m_DesiredScaleFactor); m_ZoomTimeRemaining = 0.0f; newCameraPosition = m_CameraHolder.transform.position; } else { if (m_CurrentAnchorZone != null) { m_CurrentAnchorZone.SetCameraCollidersActive(false); m_CurrentAnchorZone = null; } SetCameraMode(CameraModes.FocusPlayer); // Prio 2: We focus the player newCameraPosition = player.transform.position.xy(); } /////////////////////////////////////////////////////////////// // Collision Checks float paddingY = m_BaseSizeY * 1.0f / m_ZoomFactor; float paddignX = m_BaseSizeX * 1.0f / m_ZoomFactor; // Check Top m_RaycastHitCount = Physics2D.RaycastNonAlloc(newCameraPosition, Vector2.down, m_RaycastHits, paddingY, (int)CommonLayerMasks.Camera); int?colliderIndex = GetFirstNonTriggerCollider(m_RaycastHits, m_RaycastHitCount, false); if (colliderIndex.HasValue) { newCameraPosition.y = m_RaycastHits[colliderIndex.Value].point.y + paddingY; } // Check Sides m_RaycastHitCount = Physics2D.RaycastNonAlloc(newCameraPosition, Vector2.right, m_RaycastHits, paddignX, (int)CommonLayerMasks.Camera); colliderIndex = GetFirstNonTriggerCollider(m_RaycastHits, m_RaycastHitCount, false); if (colliderIndex.HasValue) { float directionFactor = ((m_RaycastHits[colliderIndex.Value].point.x < newCameraPosition.x) ? 1.0f : -1.0f); newCameraPosition.x = m_RaycastHits[colliderIndex.Value].point.x + directionFactor * paddignX; } m_RaycastHitCount = Physics2D.RaycastNonAlloc(newCameraPosition, Vector2.left, m_RaycastHits, paddignX, (int)CommonLayerMasks.Camera); colliderIndex = GetFirstNonTriggerCollider(m_RaycastHits, m_RaycastHitCount, false); if (colliderIndex.HasValue) { float directionFactor = ((m_RaycastHits[colliderIndex.Value].point.x < newCameraPosition.x) ? 1.0f : -1.0f); newCameraPosition.x = m_RaycastHits[colliderIndex.Value].point.x + directionFactor * paddignX; } FocusCameraOn(newCameraPosition); }
public void PlayerReset() { PlayerResetEvent.Invoke(); }