This commit is contained in:
MuHua-123
2024-11-25 18:32:05 +08:00
parent 72d1f89b54
commit 84243e75a8
353 changed files with 17666 additions and 3206 deletions
@@ -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: