init push 0.2.4

This commit is contained in:
2025-04-10 15:32:00 +08:00
commit 0dbb68555b
74 changed files with 93162 additions and 0 deletions

View File

@@ -0,0 +1,365 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Deconstruction.Element;
using Deconstruction.Interface;
using Deconstruction.Manager;
using Deconstruction.Tool;
using Deconstruction.Trajectory;
using Deconstruction.Type.DMToolSlot;
using Deconstruction.Type.Linkable;
using UnityEngine;
using XericLibrary.Runtime.MacroLibrary;
namespace SesothoLine
{
using LineSegment2 = Deconstruction.Element.PromptLine2.LineSegment2;
/// <summary>
/// <20><><EFBFBD>ƹ켣<C6B9>ߵIJ<DFB5><C4B2><EFBFBD>
/// <code>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WaitForUserInput_OpSlot<6F><74><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TerminalLine2T3<54><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>Ļ<EFBFBD><C4BB>ƣ<EFBFBD>
/// ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TerminalPoint<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///
/// ֧<>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <20><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </code>
/// </summary>
public class DrawTerminalLine2T3_OpSlot : WaitForUserInput_OpSlot
{
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private Vector3 _lastPointPosition;
/// <summary>
/// <20><>һ<EFBFBD><D2BB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><ECBCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private Vector3 _lastPointNormal;
/// <summary>
/// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private Vector3 _helperPosition = Vector3.zero;
/// <summary>
/// <20><>һ<EFBFBD><D2BB><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
/// </summary>
private Vector3 _helperNormal = Vector3.zero;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ĺ켣<C4B9><ECBCA3>
/// </summary>
private TerminalLine2T3 _line;
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
private TerminalPoint _startPoint;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ĵ㣬Ҳ<E3A3AC><D2B2><EFBFBD>յ<EFBFBD>
/// </summary>
private TerminalPoint _endPoint;
/// <summary>
/// <20>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>
/// </summary>
private TerminalPoint _otherPoint;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private bool _isStartPointSubstitute = false;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>
/// </summary>
private bool _isFreeEndPoint;
// public SesothoArrangementWiresTool myWiresTool;
// myWiresTool = targetTool as SesothoArrangementWiresTool;
#endregion
#region <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>װ
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>Ĺ<EFBFBD><C4B9><EFBFBD>
/// </summary>
private SesothoArrangementWiresTool selfWiresTool => SesothoPeManager.WiresTool;
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected override void OnStart()
{
base.OnStart();
// <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>ȷ
if (!HasLastNode)
{
Debug.LogError(
$"<22><><EFBFBD>ƽڵ<C6BD><DAB5><EFBFBD>Ϊ<EFBFBD><CEAA>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>󣬱<EFBFBD><F3A3ACB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WaitForUserInput_OpSlot<6F>еִ<D0B5><D6B4>˴<EFBFBD>");
RemoveThis();
return;
}
if (Last is not WaitForUserInput_OpSlot)
{
Debug.LogError(
$"<22><><EFBFBD>ƽڵ<C6BD><DAB5><EFBFBD>Ϊ<EFBFBD><CEAA>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> WaitForUserInput_OpSlot -> {nameof(DrawTerminalLine2T3_OpSlot)}<7D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{Last.GetType().Name}");
RemoveThis();
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD>
InitPrecondition();
}
protected override void OnEnd()
{
base.OnEnd();
}
protected override void Update()
{
// <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
// base.Update();
// <20>ߵĻ<DFB5><C4BB>Ƽ<EFBFBD><C6BC><EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>
DrawingProcess();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ<EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>п<EFBFBD><D0BF>ܻ<EFBFBD><DCBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ڴ<EFBFBD>֮ǰ<D6AE>Ľ׶<C4BD><D7B6>Ѿ<EFBFBD><D1BE>Դ˽<D4B4><CBBD>й<EFBFBD><D0B9>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>й<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7>ճ<EFBFBD><D5B3>Ļ<EFBFBD><C4BB><EFBFBD>Ҫע<D2AA>
_line.UpdateRender();
// <20><>һ<EFBFBD><D2BB>
if (IsReleaseContinueKey())
{
_helperNormal = _line.TrajectoryCalculator.GetEndPointNormal.UpwardPlaneToVector3();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (_isStartPointSubstitute)
{
// <20>ڿ<EFBFBD>ʼʱ<CABC>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
// var dtlt_Slot = Last as DrawTerminalLine2T3_OpSlot;
_line.LinkedDataAddPolarity(_startPoint, LinkType.Import);
}
else
{
_line.LinkedDataAddPolarity(_startPoint, LinkType.Import);
selfWiresTool.PersistentElement(_startPoint);
selfWiresTool.AddPeToNeighborGrid(_startPoint);
}
// <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
if (_otherPoint is null) // || _endPoint.gameObject.activeSelf
{
_line.LinkedDataAddPolarity(_endPoint, LinkType.Export);
selfWiresTool.PersistentElement(_endPoint);
selfWiresTool.AddPeToNeighborGrid(_endPoint);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>
else
{
selfWiresTool.DeleteElement(_endPoint);
_line.LinkedDataAddPolarity(_otherPoint, LinkType.Export);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_line.ReapplyOrigin();
selfWiresTool.PersistentElement(_line);
selfWiresTool.AddBulkPeToNeighborGrid(_line);
// <20><>һ<EFBFBD><D2BB>
ReplaceThis(new DrawTerminalLine2T3_OpSlot());
}
// ȡ<><C8A1>
else if (IsReleaseCanelKey())
{
RemoveThis();
EndPrecondition();
}
// todo: <20>ص<EFBFBD><D8B5><EFBFBD>һ<EFBFBD><D2BB>
/*
* <20><><EFBFBD><EFBFBD>ջ<EFBFBD>Ľṹʹ<E1B9B9>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>¿<EFBFBD><C2BF>Է<EFBFBD><D4B7><EFBFBD>,
* <20><><EFBFBD>dz<EFBFBD><C7B3>صĹ<D8B5><C4B9>̿<EFBFBD><CCBF><EFBFBD><EFBFBD>е<D0B5>ӣ<EFBFBD>
* <20><>Ҫ<EFBFBD><D2AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ䳷<DABC>غͳ<D8BA><CDB3><EFBFBD>ء<EFBFBD>
*/
}
protected override void AsyncBeforeUpdate()
{
base.AsyncBeforeUpdate();
}
protected override void AsyncUpdate()
{
base.AsyncUpdate();
}
protected override void AsyncAfterUpdate()
{
base.AsyncAfterUpdate();
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>Ⱦ<EFBFBD><C8BE><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private void InitPrecondition()
{
switch (Last)
{
// ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ߵ<EFBFBD>Ԫ<EFBFBD><D4AA>
case DrawTerminalLine2T3_OpSlot dtlt_Slot:
_isStartPointSubstitute = true;
_startPoint = dtlt_Slot._endPoint;
_lastPointPosition = dtlt_Slot._helperPosition;
_lastPointNormal = dtlt_Slot._helperNormal;
break;
// <20>½<EFBFBD><C2BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿռ<D3BF><D5BC>м̳<D0BC>
case WaitForUserInput_OpSlot wfui_Slot:
if (SesothoArrangementWiresTool.GetNearestObjectAsPoint(out var terminalPoint))
{
_isStartPointSubstitute = true;
_startPoint = terminalPoint;
_lastPointPosition = terminalPoint.GetPosition3();
if (SesothoArrangementWiresTool.GetNearestObjectAsLine(terminalPoint, out var terminalLine,
out var normal))
_lastPointNormal = normal;
else
{
Debug.LogError("<22><><EFBFBD>󣺵<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>·׼<C2B7><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EAB2A2>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>");
RemoveThis();
}
}
else
{
_isStartPointSubstitute = false;
selfWiresTool.GetElement(out _startPoint);
_lastPointPosition = SesothoArrangementWiresTool.OpKey_IgnoreNeighborAdsorption.Getkey() ?
wfui_Slot.MouseHelperPosition :
CameraMouseInputHelper.Inst.GetGridAdsorb(wfui_Slot.MouseHelperPosition);
_lastPointNormal = default;
}
break;
default:
break;
}
selfWiresTool.GetElement(out _line);
selfWiresTool.GetElement(out _endPoint);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private void EndPrecondition()
{
selfWiresTool.DeleteElement(_line);
// <20><><EFBFBD>ܰѱ<DCB0><D1B1>˵Ķ<CBB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!_isStartPointSubstitute)
selfWiresTool.DeleteElement(_startPoint);
selfWiresTool.DeleteElement(_endPoint);
}
/// <summary>
/// <20><>·<EFBFBD><C2B7><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
/// </summary>
private void DrawingProcess()
{
// <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
_helperPosition = PlaceElementManager.Inst.InputHelper.CurrentGridPosition;
_startPoint.transform.position = _lastPointPosition;
_isFreeEndPoint = true;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
if (SesothoPeManager.NearestObject is not null &&
SesothoArrangementWiresTool.GetNearestObjectAsPoint(out _otherPoint) &&
!SesothoArrangementWiresTool.OpKey_IgnoreNeighborAdsorption.Getkey())
{
_isFreeEndPoint = false;
if (_endPoint.gameObject.activeSelf)
_endPoint.gameObject.SetActive(false);
_helperPosition = SesothoPeManager.NearestPoint;
_endPoint.transform.position = SesothoPeManager.NearestPoint;
if (SesothoArrangementWiresTool.GetNearestObjectAsLine(_otherPoint, out var terminalLine,
out var normal))
_helperNormal = normal;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// else if (NearestLineTangentObject != null)
// {
// NearestLineTangentPoint
// }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>
if (_isFreeEndPoint)
{
if (!_endPoint.gameObject.activeSelf)
_endPoint.gameObject.SetActive(true);
_otherPoint = null;
_helperNormal = default;
_endPoint.transform.position = _helperPosition;
}
_line.SetLineSegment(
_lastPointPosition, _helperPosition,
_lastPointNormal, _helperNormal
);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ߵ<EFBFBD><DFB5>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4>ȡ<EFBFBD><C8A1><EFBFBD>ĽǶ<C4BD>
// if (_line.NowCalculator is RoundTrajectory2 arc)
// {
// Debug.Log($"<22>Ƕ<EFBFBD>{arc.Angle} {arc.AngleExact}");
// }
var forceStr = SesothoArrangementWiresTool.OpKey_ForceStr.Getkey();
if (forceStr)
_line.DrawStraightLine();
else
{
var force90Arc = SesothoArrangementWiresTool.OpKey_90Arc.Getkey();
var force180Arc = SesothoArrangementWiresTool.OpKey_180Arc.Getkey();
var forceRevCisoid = SesothoArrangementWiresTool.OpKey_RevCisoid.Getkey();
var angle = -1;
if (force90Arc || force180Arc)
{
angle = 0;
if (force90Arc)
angle += 90;
if (force180Arc)
angle += 180;
}
_line.AutomaticDrawCircularLine(angle, forceRevCisoid);
}
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
private bool GetCurrentObject()
{
// SesothoPeManager.
return false;
}
#endregion
}
}