70 lines
2.3 KiB
C#
70 lines
2.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
public class ClickController : MonoBehaviour
|
|
{
|
|
[SerializeField] private LayerMask layerMask;
|
|
|
|
void Update ()
|
|
{
|
|
if (Mouse.current.rightButton.wasPressedThisFrame)
|
|
Click();
|
|
}
|
|
|
|
void Click ()
|
|
{
|
|
Vector2 mousePos = Mouse.current.position.ReadValue();
|
|
Ray ray = Camera.main.ScreenPointToRay(mousePos);
|
|
RaycastHit hit;
|
|
|
|
// Shoot a raycast from our mouse to what ever we are pointing at.
|
|
if (Physics.Raycast(ray, out hit, 1000, layerMask))
|
|
{
|
|
int hitLayer = hit.collider.gameObject.layer;
|
|
|
|
// Did we hit the GROUND?
|
|
if (hitLayer == LayerMask.NameToLayer("Ground"))
|
|
{
|
|
Debug.Log("Ground Clicked");
|
|
Player.Current.SetTarget(null);
|
|
Player.Current.Controller.MoveToPosition(hit.point);
|
|
}
|
|
// Did we hit an ENEMY?
|
|
else if (hitLayer == LayerMask.NameToLayer("Enemy"))
|
|
{
|
|
Debug.Log("Enemy Clicked");
|
|
Character enemy = hit.collider.GetComponent<Character>();
|
|
Player.Current.SetTarget(enemy);
|
|
}
|
|
else if (hitLayer == LayerMask.NameToLayer("Interactable"))
|
|
{
|
|
Debug.Log("Interactable Clicked");
|
|
if (hit.collider.TryGetComponent(out Enemy enemy))
|
|
{
|
|
Debug.Log("Enemy Clicked");
|
|
//Character enemy = hit.collider.GetComponent<Character>();
|
|
Player.Current.SetTarget(enemy);
|
|
}
|
|
else if (hit.collider.TryGetComponent(out NPC npc))
|
|
{
|
|
Debug.Log("NPC Clicked");
|
|
Player.Current.SetTarget(npc);
|
|
npc.Interact();
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Something Else Clicked");
|
|
Player.Current.SetTarget(null);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Something Else Clicked");
|
|
Player.Current.SetTarget(null);
|
|
}
|
|
}
|
|
}
|
|
} |