-
Richard Marcus authoredRichard Marcus authored
WorldCursor.cs 2.51 KiB
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using static CommunicationEvents;
public class WorldCursor : MonoBehaviour
{
public RaycastHit Hit;
private Camera Cam;
void Start()
{
Cam = Camera.main;
//Set MarkPointMode as the default ActiveToolMode
// ActiveToolMode = ToolMode.ExtraMode;//ToolMode.MarkPointMode;
CommunicationEvents.ToolModeChangedEvent.Invoke(ActiveToolMode);
}
// Update is called once per frame
void Update()
{
Ray ray = Cam.ScreenPointToRay(Input.mousePosition);
int layerMask = 1 << LayerMask.NameToLayer("Player"); //only hit player
layerMask = ~layerMask; //ignore Player
if(Physics.Raycast(ray, out Hit, 30f, layerMask)){
// Debug.Log(Hit.transform.tag);
if (Hit.collider.transform.CompareTag("SnapZone"))
{
Hit.point = Hit.collider.transform.position;
Hit.normal = Vector3.up;
CheckMouseButtons(true);
transform.position = Hit.point;
transform.up = Hit.normal;
}
else
{
transform.position = Hit.point;
transform.up = Hit.normal;
transform.position += .01f * Hit.normal;
CheckMouseButtons();
}
}
else
{
var dist = 10f;
if (Hit.transform!=null)
dist = (Camera.main.transform.position - Hit.transform.position).magnitude;
transform.position = Cam.ScreenToWorldPoint(Input.mousePosition + new Vector3(0,0,1) *dist);
transform.up = -Cam.transform.forward;
}
}
//Check if left Mouse-Button was pressed and handle it
void CheckMouseButtons(bool OnSnap=false)
{
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject()) return; //this prevents rays from shooting through ui
if (!OnSnap)
{
CommunicationEvents.TriggerEvent.Invoke(Hit);
}
else if(CommunicationEvents.ActiveToolMode==ToolMode.MarkPointMode){
Hit.collider.enabled = false;
CommunicationEvents.TriggerEvent.Invoke(Hit);
// CommunicationEvents.SnapEvent.Invoke(Hit);
}
}
}
}