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.
160 lines
6.6 KiB
160 lines
6.6 KiB
4 years ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using AX.MessageSystem;
|
||
|
using AX.InputSystem;
|
||
|
using AX.NetworkSystem;
|
||
|
using System;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
/// <summary>
|
||
|
/// 作战部署公用工具的克隆
|
||
|
/// </summary>
|
||
|
public class CloneFireDeployPublicArrowTool : CloneBase
|
||
|
{
|
||
|
//UIRoot
|
||
|
private Canvas canvas;
|
||
|
//UI相机
|
||
|
private Camera uiCamera;
|
||
|
//作战部署顶视图UI
|
||
|
private Transform FireDeployRawImage;
|
||
|
//作战部署顶视图相机
|
||
|
private Camera FireDeployCamera;
|
||
|
|
||
|
private Vector3 prevMousePos = Vector3.zero;//前一个鼠标点
|
||
|
private Vector3 currMousePos = Vector3.zero;//当前鼠标点
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
canvas = GameObject.Find("Canvas").GetComponent<Canvas>();
|
||
|
uiCamera = GameObject.Find("UICamera").GetComponent<Camera>();
|
||
|
FireDeployRawImage = GameObject.Find("OperationalPreparations/MainWindow/RawImage").transform;
|
||
|
FireDeployCamera = GameObject.Find("FireDeployCamera").GetComponent<Camera>();
|
||
|
}
|
||
|
|
||
|
private void Start()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public override void Execute(IMessage obj)
|
||
|
{
|
||
|
var gameObjID = (long)obj.Sender;
|
||
|
var data = ((CloneCmdArgs)obj.Data);
|
||
|
|
||
|
if (data.cloneObjType == cloneObjType)
|
||
|
{
|
||
|
var mousePositon = data.mousePosition;
|
||
|
|
||
|
if (prevMousePos == Vector3.zero)
|
||
|
{
|
||
|
prevMousePos = mousePositon;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
currMousePos = mousePositon;
|
||
|
}
|
||
|
|
||
|
if (prevMousePos == Vector3.zero || currMousePos == Vector3.zero)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var distance = Vector3.Distance(prevMousePos, currMousePos);
|
||
|
if (Vector3.Distance(prevMousePos, currMousePos) < 2)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
var divdieMousePos = (prevMousePos + currMousePos) / 2;
|
||
|
|
||
|
//获取鼠标点击的点在UI上的坐标
|
||
|
Vector2 mousePosOnUI;
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(
|
||
|
FireDeployRawImage.transform as RectTransform,
|
||
|
divdieMousePos,
|
||
|
canvas.worldCamera,
|
||
|
out mousePosOnUI);
|
||
|
|
||
|
//获取作战部署顶视图Ui位置(中心点)在UI上的坐标
|
||
|
Vector2 FireDeployRawImagePos;
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(
|
||
|
FireDeployRawImage.transform as RectTransform,
|
||
|
uiCamera.WorldToScreenPoint(FireDeployRawImage.position),
|
||
|
canvas.worldCamera,
|
||
|
out FireDeployRawImagePos);
|
||
|
|
||
|
//克隆点到作战部署顶视图中心点在UI上的偏移量
|
||
|
Vector2 offset = mousePosOnUI - FireDeployRawImagePos;
|
||
|
|
||
|
//视口大小高与视口渲染的顶视图UI高的比例
|
||
|
var factor_y = (FireDeployCamera.orthographicSize * 2) /
|
||
|
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.y;
|
||
|
//视口大小长与视口渲染的顶视图UI长的比例
|
||
|
var factor_x = (FireDeployCamera.orthographicSize * 2) * FireDeployCamera.aspect /
|
||
|
FireDeployRawImage.GetComponent<RectTransform>().sizeDelta.x;
|
||
|
|
||
|
|
||
|
//顶视图相机的局部坐标系中相对于其中心点的偏移量
|
||
|
Vector3 localOffset = new Vector3(offset.x * factor_x, offset.y * factor_y, 0);
|
||
|
//鼠标点击在作战部署顶视图上的点映射到世界坐标系中的点
|
||
|
Vector3 objWorldPos = FireDeployCamera.transform.TransformPoint(localOffset);
|
||
|
|
||
|
var clonedObj = GameObject.Instantiate(clonePrefab, transform) as GameObject;
|
||
|
clonedObj.GetComponent<RectTransform>().localPosition = mousePosOnUI;
|
||
|
|
||
|
clonedObj.transform.right = ((currMousePos - prevMousePos)).normalized;//改变朝向;
|
||
|
|
||
|
Vector2 prevMousePosOnUI = Vector2.zero;
|
||
|
if (prevMousePos != Vector3.zero)
|
||
|
{
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(
|
||
|
FireDeployRawImage.transform as RectTransform,
|
||
|
prevMousePos,
|
||
|
canvas.worldCamera,
|
||
|
out prevMousePosOnUI);
|
||
|
}
|
||
|
Vector2 currMousePosOnUI = Vector2.zero;
|
||
|
if (currMousePos != Vector3.zero)
|
||
|
{
|
||
|
RectTransformUtility.ScreenPointToLocalPointInRectangle(
|
||
|
FireDeployRawImage.transform as RectTransform,
|
||
|
currMousePos,
|
||
|
canvas.worldCamera,
|
||
|
out currMousePosOnUI);
|
||
|
}
|
||
|
|
||
|
var distanceOnUI = Vector2.Distance(prevMousePosOnUI, currMousePosOnUI);
|
||
|
clonedObj.GetComponent<RectTransform>().sizeDelta =
|
||
|
new Vector2(distanceOnUI, clonedObj.GetComponent<RectTransform>().sizeDelta.y);
|
||
|
|
||
|
clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta =
|
||
|
new Vector2(distanceOnUI, clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta.y);
|
||
|
|
||
|
clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta =
|
||
|
new Vector2(distanceOnUI, clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta.y);
|
||
|
|
||
|
//var factor = distance / clonedObj.GetComponent<RectTransform>().sizeDelta.x;
|
||
|
//clonedObj.GetComponent<RectTransform>().sizeDelta =
|
||
|
// new Vector2(clonedObj.GetComponent<RectTransform>().sizeDelta.x * factor * 2f,
|
||
|
// clonedObj.GetComponent<RectTransform>().sizeDelta.y);
|
||
|
|
||
|
//clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta =
|
||
|
// new Vector2(clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta.x * factor * 2f,
|
||
|
// clonedObj.transform.Find("Background").GetComponent<RectTransform>().sizeDelta.y);
|
||
|
|
||
|
//clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta =
|
||
|
// new Vector2(clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta.x * factor * 2f,
|
||
|
// clonedObj.transform.Find("Background/Checkmark").GetComponent<RectTransform>().sizeDelta.y);
|
||
|
|
||
|
BaseGameObjInfo baseObjInfo = clonedObj.GetComponent<BaseGameObjInfo>();
|
||
|
baseObjInfo.gameObjType = cloneObjType;
|
||
|
baseObjInfo.UserID = CurrentUserInfo.mySelf.Id;
|
||
|
|
||
|
clonedObj.GetComponent<PublicToolMessage>().objWorldPos = objWorldPos;
|
||
|
|
||
|
prevMousePos = currMousePos = Vector3.zero;
|
||
|
}
|
||
|
}
|
||
|
}
|