Files
2026-02-21 16:45:37 +08:00

133 lines
4.1 KiB
C#

using BitStrap;
using UnityEngine;
using UnityEngine.UI;
public class BaitIndicator : MonoBehaviour
{
public Transform target;
public Camera camera;
public RectTransform pointerParent;
public MeshRenderer underwaterBackground;
public Text depthValue;
public Text distanceValue;
public Image line;
public float lineScaleFactor = 1f;
public EnergyBar tensionEnergyBar;
[ReadOnly]
public FishingPlayer fishingPlayer;
[ReadOnly]
public float distanceToPlayer;
public float scaleFactor = 1f;
public float scaleFactorVR = 0.24f;
public float vrUnderwaterScaleFactor = 1.5f;
private HUDFishing hudFishing;
private void Start()
{
}
public void Initialize()
{
if (GameController.Instance.iceLevel)
{
base.gameObject.SetActive(false);
return;
}
if (VRManager.IsVROn())
{
scaleFactor = scaleFactorVR;
}
hudFishing = HUDManager.Instance.hudFishing;
if ((bool)GameController.Instance.fishingPlayer && (bool)GameController.Instance.fishingPlayer.currentHands)
{
fishingPlayer = GameController.Instance.fishingPlayer;
base.transform.parent = GameController.Instance.transform;
}
}
private void LateUpdate()
{
if (fishingPlayer == null)
{
Initialize();
}
else if ((bool)fishingPlayer.currentHands.bait && fishingPlayer.currentHands.bait.isOnWater && !fishingPlayer.currentHands.fishingRod.isOnRodStand && fishingPlayer.currentState == FishingPlayer.PlayerState.FISHING)
{
if (fishingPlayer.HasFishOnCurrentRod())
{
target = fishingPlayer.fish.transform;
}
else
{
target = fishingPlayer.currentHands.bait.transform;
}
pointerParent.gameObject.SetActive(true);
hudFishing.ShowTensionSlider(true);
if (fishingPlayer.underwaterCamera.isTurnedOn)
{
base.transform.position = new Vector3(target.position.x, target.position.y + (fishingPlayer.HasFishOnCurrentRod() ? 0.3f : ((!fishingPlayer.currentHands.fishingFloat) ? 0.15f : 0.1f)), target.position.z);
distanceToPlayer = Vector3.Distance(base.transform.position, fishingPlayer.baitIndicatorCamera.transform.position);
base.transform.localScale = Vector3.one * scaleFactor * distanceToPlayer;
if (fishingPlayer.HasFishOnCurrentRod())
{
base.transform.localScale = Vector3.one * scaleFactor * fishingPlayer.underwaterCamera.currentDistanceAway * 1.75f;
}
else
{
base.transform.localScale = Vector3.one * scaleFactor * 0.6f;
}
if (VRManager.IsVROn())
{
base.transform.localScale *= vrUnderwaterScaleFactor;
}
}
else
{
bool flag = (bool)fishingPlayer.currentHands.fishingFloat && (!fishingPlayer.HasFishOnCurrentRod() || !fishingPlayer.fish.isJerked);
base.transform.position = new Vector3(target.position.x, Mathf.Clamp(target.position.y, (!flag) ? 0.5f : (fishingPlayer.currentHands.fishingFloat.length / 20f + 0.2f), 666f), target.position.z);
distanceToPlayer = Vector3.Distance(base.transform.position, fishingPlayer.baitIndicatorCamera.transform.position);
base.transform.localScale = Vector3.one * scaleFactor * distanceToPlayer;
}
if (VRManager.IsVROn())
{
if (fishingPlayer.underwaterCamera.isTurnedOn)
{
base.transform.LookAt(base.transform.position + fishingPlayer.underwaterCamera.transform.rotation * Vector3.forward, fishingPlayer.underwaterCamera.transform.rotation * Vector3.up);
}
else
{
base.transform.LookAt(base.transform.position + fishingPlayer.ufpsCamera.transform.rotation * Vector3.forward, fishingPlayer.ufpsCamera.transform.rotation * Vector3.up);
}
base.transform.eulerAngles = new Vector3(base.transform.eulerAngles.x, base.transform.eulerAngles.y, 0f);
}
else
{
base.transform.LookAt(base.transform.position + fishingPlayer.baitIndicatorCamera.transform.rotation * Vector3.forward, fishingPlayer.baitIndicatorCamera.transform.rotation * Vector3.up);
if (VRManager.IsVROn())
{
base.transform.eulerAngles = new Vector3(base.transform.eulerAngles.x, base.transform.eulerAngles.y, 0f);
}
}
}
else
{
base.transform.position = new Vector3(0f, -9999f, 0f);
hudFishing.ShowTensionSlider(false);
}
}
}