Files
Ultimate-Fishing-Simulator-…/Assets/Scripts/Assembly-CSharp/TentController.cs
2026-03-04 09:37:33 +08:00

131 lines
2.8 KiB
C#

using Obvious.Soap;
using UFS3;
using UnityEngine;
using UnityEngine.Rendering.HighDefinition;
public class TentController : MonoBehaviourExtended
{
[SerializeField]
private GameObjectVariable player;
[SerializeField]
private ScriptableEventNoParam OnTeleport;
[SerializeField]
private ScriptableEventItemData OnItemPlaced;
[SerializeField]
private GameObjectVariable eyeObject;
[SerializeField]
private GameObjectVariable placementCamGameObject;
[SerializeField]
private float eulerY;
[OwnComponent(0)]
private Collider collider;
[OwnComponent(0)]
private MeshRenderer meshRenderer;
public Transform spawnerPoint;
private BaseItemData itemData;
private bool isPlacing = true;
private bool canPutOnGround;
public BaseItemData ItemData
{
set
{
itemData = value;
}
}
private void Start()
{
EulerYUpdate(eulerY);
}
private void OnEnable()
{
OnTeleport.OnRaised += OnTeleport_OnRaised;
}
private void OnTeleport_OnRaised()
{
player.Value.transform.SetPositionAndRotation(spawnerPoint.position, Quaternion.identity);
}
private void OnDisable()
{
OnTeleport.OnRaised -= OnTeleport_OnRaised;
}
private void EulerYUpdate(float val)
{
Vector3 localEulerAngles = base.transform.localEulerAngles;
localEulerAngles.y = val;
base.transform.localEulerAngles = localEulerAngles;
}
private void Update()
{
if (isPlacing)
{
float num = 90f * Time.deltaTime;
if (Input.GetKey(KeyCode.Q))
{
eulerY += num;
EulerYUpdate(eulerY);
}
if (Input.GetKey(KeyCode.E))
{
eulerY -= num;
EulerYUpdate(eulerY);
}
if (Input.GetKeyDown(KeyCode.F) && canPutOnGround)
{
isPlacing = false;
base.transform.parent = null;
meshRenderer.material.SetFloat("_SurfaceType", 0f);
meshRenderer.material.SetColor("_BaseColor", new Color(1f, 1f, 1f, 1f));
HDMaterial.ValidateMaterial(meshRenderer.material);
OnItemPlaced.Raise(itemData);
}
}
}
private void FixedUpdate()
{
if (!isPlacing)
{
return;
}
Vector3 position = eyeObject.Value.transform.position;
Vector3 forward = placementCamGameObject.Value.transform.forward;
canPutOnGround = false;
if (Physics.Raycast(position, forward, out var hitInfo, 5f, LayerMask.GetMask("Terrain")))
{
base.transform.position = hitInfo.point;
base.transform.rotation = Quaternion.FromToRotation(Vector3.up, hitInfo.normal);
EulerYUpdate(eulerY);
if (Physics.OverlapBox(position, collider.bounds.extents / 2f, base.transform.rotation, LayerMask.GetMask("Terrain")).Length != 0)
{
meshRenderer.material.SetColor("_BaseColor", new Color(1f, 0f, 0f, 0.5f));
return;
}
meshRenderer.material.SetColor("_BaseColor", new Color(0f, 1f, 0f, 0.5f));
canPutOnGround = true;
}
else
{
base.transform.position = position;
meshRenderer.material.SetColor("_BaseColor", new Color(0f, 0f, 0f, 0.5f));
}
}
}