RiftMayhem/Assets/Scripts/Player/PlayerController.cs

123 lines
3.0 KiB
C#

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
[RequireComponent(typeof(PlayerMovement))]
public class PlayerController : MonoBehaviour
{
public ParticleSystem clickArrows;
public Interactable focus;
public LayerMask movementMask;
public LayerMask interactableMask;
Camera cam;
public PlayerMovement motor;
Plane plane = new Plane(Vector3.down, 0);
PhotonView photonView;
Ray ray;
RaycastHit hit;
private void Awake()
{
cam = Camera.main;
motor = GetComponent<PlayerMovement>();
photonView = GetComponent<PhotonView>();
}
// Start is called before the first frame update
void Start()
{
if (!photonView.IsMine) this.enabled = false;
clickArrows.transform.SetParent(null);
}
// Update is called once per frame
void Update()
{
if (EventSystem.current.IsPointerOverGameObject())
{
return;
}
if (Input.GetMouseButtonDown(0))
{
ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100f, movementMask))
{
clickArrows.transform.position = hit.point;
clickArrows.Play();
}
}
if (Input.GetMouseButton(0))
{
ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 100f, movementMask))
{
motor.MoveToPoint(hit.point);
//Debug.Log("hitpoint: " + hit.point);
RemoveFocus();
}
else
{
if (plane.Raycast(ray, out float distance))
{
motor.MoveToPoint(ray.GetPoint(distance));
//Debug.Log("hitpoint: " + ray.GetPoint(distance));
RemoveFocus();
}
}
}
if (Input.GetMouseButton(1))
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 100f, interactableMask))
{
Interactable interactable = hit.collider.GetComponent<Interactable>();
if (interactable != null)
{
SetFocus(interactable);
}
// if we did, set as focus
}
}
}
private void SetFocus(Interactable newFocus)
{
if (newFocus != focus)
{
if (focus != null)
{
focus.OnDeFocus();
}
focus = newFocus;
motor.FollowTarget(focus);
}
newFocus.OnFocused(transform, this);
}
public void RemoveFocus()
{
if (focus != null)
{
focus.OnDeFocus();
}
motor.StopFollowingTarget();
focus = null;
}
}