Example #1
0
        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;
        }
Example #3
0
    ////////////////////////////////////////////////////////////////

    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);
    }
Example #4
0
 public void PlayerReset()
 {
     PlayerResetEvent.Invoke();
 }