fixed hud markers being visible for dead players

This commit is contained in:
Mister_Nebula 2021-06-23 16:43:44 +01:00
parent 1ca7bc8775
commit 4179cf912b
5 changed files with 90 additions and 46 deletions

View File

@ -1,5 +1,7 @@
using OWML.Utils; using OWML.Utils;
using QSB.Events;
using QSB.Patches; using QSB.Patches;
using QSB.Player;
using QSB.Utility; using QSB.Utility;
using UnityEngine; using UnityEngine;
@ -142,9 +144,12 @@ namespace QSB.DeathSync.Patches
{ {
____lockTimer = Mathf.Min(____lockTimer + Time.deltaTime, ____lockOnMoveLength); ____lockTimer = Mathf.Min(____lockTimer + Time.deltaTime, ____lockOnMoveLength);
____revealTimer = Mathf.Min(____revealTimer + Time.deltaTime, ____revealLength); ____revealTimer = Mathf.Min(____revealTimer + Time.deltaTime, ____revealLength);
var num = Mathf.Clamp01(____revealTimer / ____revealLength);
var t3 = Mathf.SmoothStep(0f, 1f, num); var revealFraction = Mathf.Clamp01(____revealTimer / ____revealLength);
var flag = ____revealTimer > ____observatoryInteractDelay; var smoothedRevealFraction = Mathf.SmoothStep(0f, 1f, revealFraction);
var canInteractWith = ____revealTimer > ____observatoryInteractDelay;
if (____screenPromptsVisible && ____isPaused) if (____screenPromptsVisible && ____isPaused)
{ {
____closePrompt.SetVisibility(false); ____closePrompt.SetVisibility(false);
@ -153,7 +158,7 @@ namespace QSB.DeathSync.Patches
____zoomPrompt.SetVisibility(false); ____zoomPrompt.SetVisibility(false);
____screenPromptsVisible = false; ____screenPromptsVisible = false;
} }
else if (!____screenPromptsVisible && flag && !____isPaused) else if (!____screenPromptsVisible && canInteractWith && !____isPaused)
{ {
____closePrompt.SetVisibility(false); ____closePrompt.SetVisibility(false);
____panPrompt.SetVisibility(true); ____panPrompt.SetVisibility(true);
@ -162,33 +167,33 @@ namespace QSB.DeathSync.Patches
____screenPromptsVisible = true; ____screenPromptsVisible = true;
} }
var vector = Vector2.zero; var XZinput = Vector2.zero;
var vector2 = Vector2.zero; var lookInput = Vector2.zero;
var num2 = 0f; var zoomInput = 0f;
if (flag) if (canInteractWith)
{ {
vector = OWInput.GetValue(InputLibrary.moveXZ, InputMode.All); XZinput = OWInput.GetValue(InputLibrary.moveXZ, InputMode.All);
vector2 = InputLibrary.look.GetValue(false); lookInput = InputLibrary.look.GetValue(false);
num2 = OWInput.GetValue(InputLibrary.mapZoom, InputMode.All); zoomInput = OWInput.GetValue(InputLibrary.mapZoom, InputMode.All);
vector2.y *= -1f; lookInput.y *= -1f;
num2 *= -1f; zoomInput *= -1f;
} }
____lockedToTargetTransform &= vector.sqrMagnitude < 0.01f; ____lockedToTargetTransform &= XZinput.sqrMagnitude < 0.01f;
____interpPosition &= vector.sqrMagnitude < 0.01f; ____interpPosition &= XZinput.sqrMagnitude < 0.01f;
____interpPitch &= Mathf.Abs(vector2.y) < 0.1f; ____interpPitch &= Mathf.Abs(lookInput.y) < 0.1f;
____interpZoom &= Mathf.Abs(num2) < 0.1f; ____interpZoom &= Mathf.Abs(zoomInput) < 0.1f;
if (____interpPosition) if (____interpPosition)
{ {
var a = ____activeCam.transform.position - Locator.GetCenterOfTheUniverse().GetOffsetPosition(); var a = ____activeCam.transform.position - Locator.GetCenterOfTheUniverse().GetOffsetPosition();
var b = Vector3.zero; var b = Vector3.zero;
____position = Vector3.Lerp(a, b, t3); ____position = Vector3.Lerp(a, b, smoothedRevealFraction);
} }
else else
{ {
var normalized = Vector3.Scale(__instance.transform.forward + __instance.transform.up, new Vector3(1f, 0f, 1f)).normalized; var normalized = Vector3.Scale(__instance.transform.forward + __instance.transform.up, new Vector3(1f, 0f, 1f)).normalized;
var a2 = (__instance.transform.right * vector.x) + (normalized * vector.y); var a2 = (__instance.transform.right * XZinput.x) + (normalized * XZinput.y);
____position += a2 * ____panSpeed * ____zoom * Time.deltaTime; ____position += a2 * ____panSpeed * ____zoom * Time.deltaTime;
____position.y = 0f; ____position.y = 0f;
if (____position.sqrMagnitude > ____maxPanDistance * ____maxPanDistance) if (____position.sqrMagnitude > ____maxPanDistance * ____maxPanDistance)
@ -197,39 +202,58 @@ namespace QSB.DeathSync.Patches
} }
} }
____yaw += vector2.x * ____yawSpeed * Time.deltaTime; ____yaw += lookInput.x * ____yawSpeed * Time.deltaTime;
____yaw = OWMath.WrapAngle(____yaw); ____yaw = OWMath.WrapAngle(____yaw);
if (____interpPitch) if (____interpPitch)
{ {
____pitch = Mathf.Lerp(____initialPitchAngle, ____defaultPitchAngle, t3); ____pitch = Mathf.Lerp(____initialPitchAngle, ____defaultPitchAngle, smoothedRevealFraction);
} }
else else
{ {
____pitch += vector2.y * ____pitchSpeed * Time.deltaTime; ____pitch += lookInput.y * ____pitchSpeed * Time.deltaTime;
____pitch = Mathf.Clamp(____pitch, ____minPitchAngle, ____maxPitchAngle); ____pitch = Mathf.Clamp(____pitch, ____minPitchAngle, ____maxPitchAngle);
} }
if (____interpZoom) if (____interpZoom)
{ {
____zoom = Mathf.Lerp(____initialZoomDist, ____targetZoom, t3); ____zoom = Mathf.Lerp(____initialZoomDist, ____targetZoom, smoothedRevealFraction);
} }
else else
{ {
____zoom += num2 * ____zoomSpeed * Time.deltaTime; ____zoom += zoomInput * ____zoomSpeed * Time.deltaTime;
____zoom = Mathf.Clamp(____zoom, ____minZoomDistance, ____maxZoomDistance); ____zoom = Mathf.Clamp(____zoom, ____minZoomDistance, ____maxZoomDistance);
} }
____mapCamera.nearClipPlane = Mathf.Lerp(0.1f, 1f, t3); ____mapCamera.nearClipPlane = Mathf.Lerp(0.1f, 1f, smoothedRevealFraction);
var quaternion = Quaternion.Euler(____pitch, ____yaw, 0f);
var num4 = num * (2f - num); var finalRotation = Quaternion.Euler(____pitch, ____yaw, 0f);
var num4 = revealFraction * (2f - revealFraction);
var num5 = Mathf.SmoothStep(0f, 1f, num4); var num5 = Mathf.SmoothStep(0f, 1f, num4);
var a3 = Quaternion.LookRotation(-____playerTransform.up, Vector3.up);
var a4 = ____activeCam.transform.position; // Create rotation that's looking down at the player from above
a4 += ____playerTransform.up * num5 * ____observatoryRevealDist; var lookingDownAtPlayer = Quaternion.LookRotation(-____playerTransform.up, Vector3.up);
__instance.transform.rotation = Quaternion.Lerp(a3, quaternion, num5);
// Get starting position - distance above player
var startingPosition = ____activeCam.transform.position;
startingPosition += ____playerTransform.up * num5 * ____observatoryRevealDist;
// Lerp to final rotation
__instance.transform.rotation = Quaternion.Lerp(lookingDownAtPlayer, finalRotation, num5);
// Lerp reveal twist
__instance.transform.rotation *= Quaternion.AngleAxis(Mathf.Lerp(____observatoryRevealTwist, 0f, num4), Vector3.forward); __instance.transform.rotation *= Quaternion.AngleAxis(Mathf.Lerp(____observatoryRevealTwist, 0f, num4), Vector3.forward);
var vector4 = ____position + (-__instance.transform.forward * ____zoom) + Locator.GetCenterOfTheUniverse().GetStaticReferenceFrame().GetPosition();
__instance.transform.position = Vector3.Lerp(a4, vector4, num5); var endPosition = ____position + (-__instance.transform.forward * ____zoom) + Locator.GetCenterOfTheUniverse().GetStaticReferenceFrame().GetPosition();
// Lerp to final position
__instance.transform.position = Vector3.Lerp(startingPosition, endPosition, num5);
if (OWInput.IsInputMode(InputMode.Map) && (OWInput.IsNewlyPressed(InputLibrary.cancel, InputMode.All) || OWInput.IsNewlyPressed(InputLibrary.map, InputMode.All)))
{
QSBEventManager.FireEvent(EventNames.QSBPlayerRespawn, QSBPlayerManager.LocalPlayerId);
}
return false; return false;
} }

View File

@ -47,13 +47,7 @@ namespace QSB.DeathSync
RespawnManager.Instance.TriggerRespawnMap(); RespawnManager.Instance.TriggerRespawnMap();
// Cant use _playerSpawner.DebugWarp because that will warp the ship if the player is in it //QSBCore.UnityEvents.FireInNUpdates(() => ResetPlayerPosition(), 5);
var playerBody = Locator.GetPlayerBody();
playerBody.WarpToPositionRotation(_playerSpawnPoint.transform.position, _playerSpawnPoint.transform.rotation);
playerBody.SetVelocity(_playerSpawnPoint.GetPointVelocity());
_playerSpawnPoint.AddObjectToTriggerVolumes(Locator.GetPlayerDetector().gameObject);
_playerSpawnPoint.AddObjectToTriggerVolumes(_fluidDetector.gameObject);
_playerSpawnPoint.OnSpawnPlayer();
_playerResources.SetValue("_isSuffocating", false); _playerResources.SetValue("_isSuffocating", false);
_playerResources.DebugRefillResources(); _playerResources.DebugRefillResources();
@ -87,6 +81,17 @@ namespace QSB.DeathSync
} }
} }
private void ResetPlayerPosition()
{
// Cant use _playerSpawner.DebugWarp because that will warp the ship if the player is in it
var playerBody = Locator.GetPlayerBody();
playerBody.WarpToPositionRotation(_playerSpawnPoint.transform.position, _playerSpawnPoint.transform.rotation);
playerBody.SetVelocity(_playerSpawnPoint.GetPointVelocity());
_playerSpawnPoint.AddObjectToTriggerVolumes(Locator.GetPlayerDetector().gameObject);
_playerSpawnPoint.AddObjectToTriggerVolumes(_fluidDetector.gameObject);
_playerSpawnPoint.OnSpawnPlayer();
}
private SpawnPoint GetSpawnPoint() private SpawnPoint GetSpawnPoint()
{ {
var spawnList = _playerSpawner.GetValue<SpawnPoint[]>("_spawnList"); var spawnList = _playerSpawner.GetValue<SpawnPoint[]>("_spawnList");

View File

@ -1,11 +1,12 @@
using UnityEngine; using QSB.Utility;
using UnityEngine;
namespace QSB.Player namespace QSB.Player
{ {
public class PlayerHUDMarker : HUDDistanceMarker public class PlayerHUDMarker : HUDDistanceMarker
{ {
private PlayerInfo _player; private PlayerInfo _player;
private bool _isReady; private bool _needsInitializing;
protected override void InitCanvasMarker() protected override void InitCanvasMarker()
{ {
@ -19,28 +20,39 @@ namespace QSB.Player
public void Init(PlayerInfo player) public void Init(PlayerInfo player)
{ {
DebugLog.DebugWrite($"Init {player.PlayerId} name:{player.Name}");
_player = player; _player = player;
_player.HudMarker = this; _player.HudMarker = this;
_isReady = true; _needsInitializing = true;
} }
protected override void RefreshOwnVisibility() protected override void RefreshOwnVisibility()
{ {
if (_canvasMarker != null) if (_canvasMarker != null)
{ {
_canvasMarker.SetVisibility(true); var isVisible = _canvasMarker.IsVisible();
if (_player.Visible != isVisible)
{
_canvasMarker.SetVisibility(_player.Visible);
}
} }
} }
private void Update() private void Update()
{ {
if (!_isReady || !_player.PlayerStates.IsReady) if (!_needsInitializing || !_player.PlayerStates.IsReady)
{ {
return; return;
} }
Initialize();
}
private void Initialize()
{
_markerLabel = _player.Name.ToUpper(); _markerLabel = _player.Name.ToUpper();
_isReady = false; _needsInitializing = false;
base.InitCanvasMarker(); base.InitCanvasMarker();
} }

View File

@ -24,6 +24,7 @@ namespace QSB.Player
public GameObject CameraBody { get; set; } public GameObject CameraBody { get; set; }
public GameObject Body { get; set; } public GameObject Body { get; set; }
public GameObject RoastingStick { get; set; } public GameObject RoastingStick { get; set; }
public bool Visible { get; set; }
// Tools // Tools
public GameObject ProbeBody { get; set; } public GameObject ProbeBody { get; set; }

View File

@ -142,6 +142,8 @@ namespace QSB.Player
{ {
renderer.enabled = visible; renderer.enabled = visible;
} }
player.Visible = visible;
} }
public static PlayerInfo GetClosestPlayerToWorldPoint(Vector3 worldPoint, bool includeLocalPlayer) public static PlayerInfo GetClosestPlayerToWorldPoint(Vector3 worldPoint, bool includeLocalPlayer)