s
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BakingMobile : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraBaking;
|
||||
|
||||
private Vector3 mousePosition;
|
||||
private Vector3 originalPosition;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
mousePosition = data.ScreenPosition;
|
||||
originalPosition = ViewCamera.Position;
|
||||
}
|
||||
public override void MouseDrag(DataMouseInput data) {
|
||||
Vector3 original = ViewCamera.ScreenToWorldPosition(mousePosition);
|
||||
Vector3 current = data.WorldPosition;
|
||||
Vector3 offset = current - original;
|
||||
Vector3 up = ViewCamera.Up * offset.y;
|
||||
Vector3 right = ViewCamera.Right * offset.x;
|
||||
ViewCamera.Position = originalPosition + up + right;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2e91048b6b41fcd488c55503ebfc3723
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,46 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BakingMobilePlate : UnitMouseInput {
|
||||
/// <summary> 安排点图层遮罩 </summary>
|
||||
private readonly LayerMask Arrange = LayerMaskTool.Arrange;
|
||||
/// <summary> 烘焙视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraBaking;
|
||||
|
||||
private Vector3 mousePosition;
|
||||
private Vector3 originalPosition;
|
||||
private FixedArrange arrange;
|
||||
private ModulePrefab<DataPlate> platePrefab;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!ViewCamera.ScreenToWorldObject(data.ScreenPosition, out platePrefab)) { return; }
|
||||
mousePosition = data.ScreenPosition;
|
||||
originalPosition = platePrefab.transform.localPosition;
|
||||
platePrefab.Value.bakingPosition = originalPosition;
|
||||
ModuleCore.BakingMobilePlate(platePrefab.Value);
|
||||
}
|
||||
public override void MouseDrag(DataMouseInput data) {
|
||||
if (platePrefab == null) { return; }
|
||||
if (ViewCamera.ScreenToWorldObjectParent(data.ScreenPosition, out arrange, Arrange)) {
|
||||
platePrefab.Value.arrange = arrange;
|
||||
platePrefab.Value.bakingPosition = arrange.transform.localPosition;
|
||||
platePrefab.Value.bakingEulerAngles = arrange.transform.localEulerAngles;
|
||||
}
|
||||
else { Mobile(data.WorldPosition); }
|
||||
platePrefab.Value.UpdateVisual(false);
|
||||
}
|
||||
public override void MouseRelease(DataMouseInput data) {
|
||||
ModuleCore.BakingMobilePlate(null);
|
||||
}
|
||||
|
||||
private void Mobile(Vector3 worldPosition) {
|
||||
platePrefab.Value.arrange = null;
|
||||
Vector3 original = ViewCamera.ScreenToWorldPosition(mousePosition);
|
||||
Vector3 current = worldPosition;
|
||||
Vector3 offset = current - original;
|
||||
Vector3 up = ViewCamera.Up * offset.y;
|
||||
Vector3 right = ViewCamera.Right * offset.x;
|
||||
platePrefab.Value.bakingPosition = originalPosition - up - right;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 00b6b3cc18640204a8ad48985d53db48
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,21 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BakingRotate : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraBaking;
|
||||
|
||||
private Vector3 mousePosition;
|
||||
private Vector3 originalEulerAngles;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
mousePosition = data.ViewPosition;
|
||||
originalEulerAngles = ViewCamera.EulerAngles;
|
||||
}
|
||||
public override void MouseDrag(DataMouseInput data) {
|
||||
float offsetX = data.ViewPosition.x - mousePosition.x;
|
||||
float offsetY = data.ViewPosition.y - mousePosition.y;
|
||||
ViewCamera.EulerAngles = originalEulerAngles + new Vector3(-offsetY, offsetX , 0) * 360;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 49bda1134b4639f4cb22ffd3bb0499ce
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,7 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BakingSelect : UnitMouseInput {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c1b9618a80c54534ca23a5e71c9d9de0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DesignBezier : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
|
||||
/// <summary> 查询点算法模块 </summary>
|
||||
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out DataSide side)) { return; }
|
||||
if (side.bezier == Bezier.一阶) { side.TwoRankBezier(); side.plate.UpdateVisual(); return; }
|
||||
if (side.bezier == Bezier.二阶) { side.ThreeRankBezier(); side.plate.UpdateVisual(); return; }
|
||||
if (side.bezier == Bezier.三阶) { side.OneRankBezier(); side.plate.UpdateVisual(); return; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c4c272ae3cc78a54c819d6b6194a75a8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,30 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DesignInsert : UnitMouseInput {
|
||||
/// <summary> 板片资产 </summary>
|
||||
public ModuleAssets<DataPlate> AssetsPlate => ModuleCore.AssetsPlate;
|
||||
/// <summary> 查询边算法模块 </summary>
|
||||
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
|
||||
/// <summary> 计算位置到边上最近的点 </summary>
|
||||
public ModuleAlgorithm<DataIntersect> AlgorithmSidePoint => ModuleCore.AlgorithmSidePoint;
|
||||
/// <summary> 插入点数据转换板片上的点 </summary>
|
||||
public ModuleBuilder<DataInsertPoint, DataPoint> InsertPointToPoint => ModuleCore.InsertPointToPoint;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out DataSide side)) { return; }
|
||||
|
||||
DataIntersect intersect = new DataIntersect(side, data.WorldPosition);
|
||||
AlgorithmSidePoint.Compute(intersect);
|
||||
if (!intersect.isIntersect) { return; }
|
||||
|
||||
DataInsertPoint insertPoint = new DataInsertPoint();
|
||||
insertPoint.position = intersect.intersectPoint - side.plate.designPosition;
|
||||
insertPoint.plate = side.plate;
|
||||
insertPoint.aPoint = side.aPoint;
|
||||
insertPoint.bPoint = side.bPoint;
|
||||
insertPoint.side = side;
|
||||
InsertPointToPoint.To(insertPoint);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6572c7ebab448a94d880fca85c728132
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,78 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DesignMobile : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
|
||||
/// <summary> 查询贝塞尔点算法模块 </summary>
|
||||
public ModuleFind<DataBezier> FindBezier => ModuleCore.FindBezier;
|
||||
|
||||
private DataBezier bezier;
|
||||
private Vector3 mousePosition;
|
||||
private Vector3 originalPosition;
|
||||
private ModulePrefab<DataPoint> prefabPoint;
|
||||
private ModulePrefab<DataPlate> prefabPlate;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
//判断是否选中贝塞尔点
|
||||
if (FindBezier.Find(data.WorldPosition, out bezier)) {
|
||||
RecordBezier(data.ScreenPosition); return;
|
||||
}
|
||||
//判断是否选中点
|
||||
if (ViewCamera.ScreenToWorldObjectParent(data.ScreenPosition, out prefabPoint)) {
|
||||
RecordPoint(data.ScreenPosition); return;
|
||||
}
|
||||
//判断是否选中板片
|
||||
if (ViewCamera.ScreenToWorldObjectParent(data.ScreenPosition,out prefabPlate)) {
|
||||
RecordPlate(data.ScreenPosition); return;
|
||||
}
|
||||
RecordCamera(data.ScreenPosition);
|
||||
}
|
||||
public override void MouseDrag(DataMouseInput data) {
|
||||
Vector3 original = ViewCamera.ScreenToWorldPosition(mousePosition);
|
||||
Vector3 current = data.WorldPosition;
|
||||
Vector3 offset = current - original;
|
||||
|
||||
if (bezier != null) { MobileBezier(offset); return; }
|
||||
if (prefabPoint != null) { MobilePoint(offset); return; }
|
||||
if (prefabPlate != null) { MobilePlate(offset); return; }
|
||||
MobileCamera(offset);
|
||||
}
|
||||
|
||||
//贝塞尔
|
||||
private void RecordBezier(Vector3 screenPosition) {
|
||||
mousePosition = screenPosition;
|
||||
originalPosition = bezier.position;
|
||||
}
|
||||
private void MobileBezier(Vector3 offset) {
|
||||
Vector3 position = originalPosition + offset;
|
||||
bezier.SetBezierPosition(position);
|
||||
}
|
||||
//点
|
||||
private void RecordPoint(Vector3 screenPosition) {
|
||||
mousePosition = screenPosition;
|
||||
originalPosition = prefabPoint.Value.position;
|
||||
}
|
||||
private void MobilePoint(Vector3 offset) {
|
||||
prefabPoint.Value.position = originalPosition + offset;
|
||||
prefabPoint.Value.plate.UpdateVisual();
|
||||
}
|
||||
//板片
|
||||
private void RecordPlate(Vector3 screenPosition) {
|
||||
mousePosition = screenPosition;
|
||||
originalPosition = prefabPlate.Value.designPosition;
|
||||
}
|
||||
private void MobilePlate(Vector3 offset) {
|
||||
prefabPlate.Value.designPosition = originalPosition + offset;
|
||||
prefabPlate.Value.UpdateVisual(false);
|
||||
}
|
||||
//相机
|
||||
private void RecordCamera(Vector3 screenPosition) {
|
||||
mousePosition = screenPosition;
|
||||
originalPosition = ViewCamera.Position;
|
||||
}
|
||||
private void MobileCamera(Vector3 offset) {
|
||||
ViewCamera.Position = originalPosition - offset;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1d9fbc3106b97d147ac9164dc314865a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,56 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DesignSuture : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
|
||||
/// <summary> 查询点算法模块 </summary>
|
||||
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
|
||||
/// <summary> 计算位置到边上最近的点 </summary>
|
||||
public ModuleAlgorithm<DataIntersect> AlgorithmSidePoint => ModuleCore.AlgorithmSidePoint;
|
||||
/// <summary> 连接可视化内容生成模块 </summary>
|
||||
public ModuleVisual<DataConnector> VisualConnector => ModuleCore.VisualConnector;
|
||||
|
||||
private DataSide aSide;
|
||||
private DataSide bSide;
|
||||
private DataConnector connector;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out aSide)) { return; }
|
||||
if (!Intersect(aSide, data.WorldPosition, out Vector3 intersectPoint)) { return; }
|
||||
connector = new DataConnector();
|
||||
connector.aPoint = intersectPoint;
|
||||
connector.bPoint = intersectPoint;
|
||||
}
|
||||
public override void MouseDrag(DataMouseInput data) {
|
||||
if (aSide == null) { return; }
|
||||
connector.bPoint = GetPosition(data);
|
||||
VisualConnector.UpdateVisual(connector);
|
||||
}
|
||||
public override void MouseRelease(DataMouseInput data) {
|
||||
if (connector == null) { return; }
|
||||
VisualConnector.ReleaseVisual(connector);
|
||||
connector = null;
|
||||
|
||||
if (aSide == null || bSide == null || aSide == bSide) { return; }
|
||||
if (aSide.suture != null || bSide.suture != null) { return; }
|
||||
DataSuture suture = new DataSuture(aSide, bSide);
|
||||
aSide.suture = suture;
|
||||
bSide.suture = suture;
|
||||
aSide.plate.UpdateVisual();
|
||||
}
|
||||
|
||||
private Vector3 GetPosition(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out bSide)) { return data.WorldPosition; }
|
||||
if (aSide == bSide) { return data.WorldPosition; }
|
||||
if (Intersect(bSide, data.WorldPosition, out Vector3 intersectPoint)) { return intersectPoint; }
|
||||
else { return data.WorldPosition; }
|
||||
}
|
||||
private bool Intersect(DataSide side, Vector3 position, out Vector3 intersectPoint) {
|
||||
DataIntersect intersect = new DataIntersect(side, position);
|
||||
AlgorithmSidePoint.Compute(intersect);
|
||||
intersectPoint = intersect.intersectPoint;
|
||||
return intersect.isIntersect;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f4da355235e26524388688f6bd6d5f43
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,21 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class DesignSutureReversal : UnitMouseInput {
|
||||
/// <summary> 设计视图相机模块 </summary>
|
||||
public ModuleViewCamera ViewCamera => ModuleCore.ViewCameraDesign;
|
||||
/// <summary> 查询点算法模块 </summary>
|
||||
public ModuleFind<DataSide> FindSide => ModuleCore.FindSide;
|
||||
|
||||
public override void MouseDown(DataMouseInput data) {
|
||||
if (!FindSide.Find(data.WorldPosition, out DataSide side)) { return; }
|
||||
if (side.suture.a.side == side) {
|
||||
side.suture.a.isReversal = !side.suture.a.isReversal;
|
||||
}
|
||||
if (side.suture.b.side == side) {
|
||||
side.suture.b.isReversal = !side.suture.b.isReversal;
|
||||
}
|
||||
side.plate.UpdateVisual();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4360e81518739f24c842afc64b8e81b3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 鼠标输入单元
|
||||
/// </summary>
|
||||
public abstract class UnitMouseInput {
|
||||
/// <summary> 核心模块 </summary>
|
||||
protected virtual ModuleCore ModuleCore => ModuleCore.I;
|
||||
|
||||
/// <summary> 按下鼠标 </summary>
|
||||
public virtual void MouseDown(DataMouseInput data) { }
|
||||
/// <summary> 拖拽鼠标 </summary>
|
||||
public virtual void MouseDrag(DataMouseInput data) { }
|
||||
/// <summary> 移动鼠标 </summary>
|
||||
public virtual void MouseMove(DataMouseInput data) { }
|
||||
/// <summary> 释放鼠标 </summary>
|
||||
public virtual void MouseRelease(DataMouseInput data) { }
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e54a1981f15dce04b95e1b917c13cccd
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user