You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

348 lines
9.6 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LzFramework;
using UnityEngine.UI;
using DG.Tweening;
namespace DisComputer
{
/**
* @func 鼠标控制器
* @author lz
* @date 2020/05/28
*/
public class MouseControl : Singleton<MouseControl>
{
//加载环形图片
[SerializeField]
private Texture2D loadCircle_tex;
[SerializeField]
private Color loadCircleColor;
private bool isDelTemp = false;
[HideInInspector]
//是否进入聚焦状态
public bool isFocuseState = false;
// Update is called once per frame
void Update()
{
if (MainControl.Instance.mainState != MainState.Active)
return;
if (isFocuseState)
return;
//缩放摄像机视距
RollCameraView();
if (tempGridGo)
{
//抓取
if (Input.GetMouseButton(0))
{
//Cursor.visible = false;
tempGridGo.transform.localPosition = CoordinateTrasition.ScreenPosToUguiPos(Input.mousePosition,canvas,true);
//发射射线检测
SendRayToLoadPc();
}
if (Input.GetMouseButtonUp(0))
{
//Cursor.visible = true;
isDelTemp = true;
Sequence sequence = DOTween.Sequence();
sequence.Append(tempGridGo.transform.DOLocalMove(selectGrid.initPos, 0.15f));
sequence.Append(tempGridGo.transform.DOScale(1.0f, 0.25f).SetEase(Ease.OutBack).SetDelay(0.1f));
sequence.OnComplete(()=>
{
isDelTemp = false;
tempGridGo.SetActive(false);
DestroyImmediate(tempGridGo);
tempGridGo = null;
selectGrid.ShowSpareImg();
});
}
}else if(tempToolGo)
{
}
else
{
//Cursor.visible = true;
}
if (tempToolGo)
{
//抓取
if (Input.GetMouseButton(0))
{
//Cursor.visible = false;
tempToolGo.transform.localPosition = CoordinateTrasition.ScreenPosToUguiPos(Input.mousePosition, canvas, true);
//发射射线检测
SendRayToUnloadPc();
}
if (Input.GetMouseButtonUp(0))
{
//Cursor.visible = true;
isDelTemp = true;
Tween move = tempToolGo.transform.DOScale(0.0f, 0.15f);
move.SetEase(Ease.InSine);
move.OnComplete(() =>
{
isDelTemp = false;
tempToolGo.SetActive(false);
DestroyImmediate(tempToolGo);
tempToolGo = null;
selectTool.ResetTool();
});
}
}else if (tempGridGo)
{
}
else
{
//Cursor.visible = true;
}
}
/// <summary>
/// 拉近摄像头
/// </summary>
void RollCameraView()
{
//缩小
if(Input.GetAxis("Mouse ScrollWheel")<0)
{
Camera.main.fieldOfView += 2;
if (Camera.main.fieldOfView >= 60)
{
Camera.main.fieldOfView = 60;
}
}
//放大
if(Input.GetAxis("Mouse ScrollWheel") > 0)
{
Camera.main.fieldOfView -= 2;
if(Camera.main.fieldOfView <= 10)
{
Camera.main.fieldOfView = 10;
}
}
}
/// <summary>
/// 恢复相机视距
/// </summary>
public void RewindCameraField()
{
Camera.main.DOFieldOfView(60,0.3f).SetEase(Ease.InSine);
}
//选择的零件
private Grid selectGrid;
private Canvas canvas;
private GameObject tempGridGo;
/// <summary>
/// 设置抓取零件
/// </summary>
public void SetDragSpare(Grid grid,System.Action hideSp)
{
if (isDelTemp|| tempGridGo != null || Input.GetMouseButton(1))
return;
hideSp?.Invoke();
if (canvas == null)
{
canvas = GameObject.Find("UIRoot").GetComponent<Canvas>();
}
selectGrid = grid;
tempGridGo = Instantiate(grid.spare_img.gameObject);
tempGridGo.transform.SetParent(canvas.transform);
tempGridGo.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
loading = tempGridGo.AddComponent<WorkLoading>();
loading.InitLoading(loadCircle_tex, loadCircleColor);
tempGridGo.SetActive(true);
}
/// <summary>
/// 零件加载
/// </summary>
/// <param name="finish"></param>
public void SpareLoading(System.Action finish)
{
if (isDelTemp)
return;
if (loading != null)
{
loading.UpdateLoading(() => {
finish?.Invoke();
tempGridGo = null;
selectGrid.CleraGird();
//Cursor.visible = true;
loading.CancelLoading();
loading = null;
});
}
}
//选择的工具
private ToolItem selectTool;
private GameObject tempToolGo;
//进度显示
private WorkLoading loading;
/// <summary>
/// 设置抓取工具
/// </summary>
/// <param name="item"></param>
public void SetDragTool(ToolItem item)
{
if (tempToolGo != null || Input.GetMouseButton(1))
{
return;
}
if(canvas == null)
{
canvas = GameObject.Find("UIRoot").GetComponent<Canvas>();
}
selectTool = item;
tempToolGo = Instantiate(item.tool_img.gameObject);
tempToolGo.transform.SetParent(canvas.transform);
tempToolGo.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);
loading = tempToolGo.AddComponent<WorkLoading>();
loading.InitLoading(loadCircle_tex,loadCircleColor);
tempToolGo.SetActive(true);
}
/// <summary>
/// 工具加载
/// </summary>
/// <param name="finish"></param>
public void ToolLoading(System.Action finish)
{
if (loading != null)
{
loading.UpdateLoading(()=> {
finish?.Invoke();
tempToolGo = null;
selectTool.ResetTool();
//Cursor.visible = true;
loading.CancelLoading();
loading = null;
});
}
}
/// <summary>
/// 重置
/// </summary>
public void ClearSelectTarget()
{
tempToolGo = null;
tempGridGo = null;
isFocuseState = false;
}
//零件检测层
public LayerMask checkLayer;
private RaycastHit hit;
/// <summary>
/// 发射射线检测安装电脑
/// @reciever SpareItemControl
/// </summary>
private void SendRayToLoadPc()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray,out hit,50,checkLayer.value))
{
selectGrid.chectSpareTag = hit.collider.gameObject.tag;
hit.collider.gameObject.SendMessageUpwards("OnRecLoadColliderMsg", selectGrid, SendMessageOptions.DontRequireReceiver);
hit.collider.gameObject.SendMessageUpwards("OnRecSpareColliderMessage", selectGrid,SendMessageOptions.DontRequireReceiver);
}
else
{
if(loading != null)
{
loading.RewindLoading();
}
}
}
/// <summary>
/// 发射射线检测拆除电脑
/// @reciever SpareItemControl
/// </summary>
private void SendRayToUnloadPc()
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 50, checkLayer.value))
{
selectTool.chectSpareTag = hit.collider.gameObject.tag;
hit.collider.gameObject.SendMessageUpwards("OnRecUnloadColliderMsg", selectTool, SendMessageOptions.DontRequireReceiver);
hit.collider.gameObject.SendMessageUpwards("OnRecChildColliderMessage",selectTool, SendMessageOptions.DontRequireReceiver);
}
else
{
if (loading != null)
{
loading.RewindLoading();
}
}
}
}
}