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,558 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using Deconstruction.Element;
using Deconstruction.Interface;
using Deconstruction.Manager;
using Deconstruction.Tool;
using Deconstruction.Type;
using Deconstruction.Type.DMToolSlot;
using Deconstruction.Type.Linkable;
using SerializerHelper.Type;
using UnityEngine;
using UnityEngine.Pool;
using XericLibrary.Runtime.MacroLibrary;
using XericLibrary.Runtime.Nav;
namespace SesothoLine
{
/// <summary>
/// <20><>·<EFBFBD><C2B7><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public class SesothoArrangementWiresTool : DecisionMakerToolBase
{
#region <EFBFBD>¼<EFBFBD>ί<EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ί<EFBFBD><CEAF>
/// </summary>
public delegate void ToolMemberChange(PlacementBase obj);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
/// </summary>
public event ToolMemberChange OnAdditional;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD>Ա<EFBFBD>Ƴ<EFBFBD><C6B3>¼<EFBFBD>
/// </summary>
public event ToolMemberChange OnDecreasing;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public event ToolMemberChange OnAnyVivification;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public event ToolMemberChange OnAnyDormancy;
#endregion
#region <EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>
/*
* 1 <20><><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>ֱ<EFBFBD><D6B1>
* 2,3 <20><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>ĽǶ<C4BD>Ϊ90<39><30>180<38><30>
* R <20><>תԲ<D7AA><D4B2>
* shift+b <20><><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* shift+n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
/// <summary>
/// ǿ<><C7BF>ֱ<EFBFBD><D6B1>
/// </summary>
public static KeyPack OpKey_ForceStr = new KeyPack(KeyCode.Alpha1);
/// <summary>
/// ǿ<><C7BF>90<39><30>Բ<EFBFBD><D4B2>
/// </summary>
public static KeyPack OpKey_90Arc = new KeyPack(KeyCode.Alpha2);
/// <summary>
/// ǿ<><C7BF>180<38><30>Բ<EFBFBD><D4B2>
/// </summary>
public static KeyPack OpKey_180Arc = new KeyPack(KeyCode.Alpha3);
/// <summary>
/// <20><>ת˳<D7AA>򣬱<EFBFBD><F2A3ACB1>絥Բ<E7B5A5><D4B2><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
/// <20><>˵shift+alt+r<><72>Ӣΰ<D3A2><CEB0><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC>أ<EFBFBD><D8A3>е<EFBFBD><D0B5><EFBFBD>ͻ
/// </summary>
public static KeyPack OpKey_RevCisoid = new KeyPack(KeyCode.R);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public static KeyPack OpKey_IgnoreNeighborAdsorption = new KeyPack(KeyCode.LeftShift, KeyCode.B);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public static KeyPack OpKey_IgnoreGridAdsorption = new KeyPack(KeyCode.LeftShift, KeyCode.N);
#endregion
#region <EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private ObjectPool<TerminalLine2T3> _linePool;
private ObjectPool<TerminalPoint> _pointPool;
#endregion
#region <EFBFBD><EFBFBD>ȡת<EFBFBD><EFBFBD>
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>Ϊ<EFBFBD><CEAA>
/// </summary>
/// <param name="point"></param>
/// <returns></returns>
public static bool GetNearestObjectAsPoint(out TerminalPoint point)
{
if (SesothoPeManager.NearestObject is not null &&
SesothoPeManager.NearestObject is TerminalPoint terminalPoint)
{
point = terminalPoint;
return true;
}
point = null;
return false;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>Ϊ<EFBFBD><CEAA>
/// </summary>
/// <param name="line"></param>
/// <returns></returns>
public static bool GetNearestObjectAsLine(out TerminalLine2T3 line)
{
if (SesothoPeManager.NearestObject is not null &&
SesothoPeManager.NearestObject is TerminalPoint terminalPoint &&
terminalPoint.LinkedData.GetOpposite(LinkType.Export) is TerminalLine2T3 terminalLine)
{
line = terminalLine;
return true;
}
line = null;
return false;
}
/// <summary>
/// <20><>ȡ<EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="point"></param>
/// <param name="line"></param>
/// <param name="normal"></param>
/// <returns></returns>
public static bool GetNearestObjectAsLine(TerminalPoint point, out TerminalLine2T3 line, out Vector3 normal)
{
if (point is null)
goto End;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
if (SesothoPeManager.NearestLineTangentObject is TerminalLine2T3 otherLine &&
point.TryGetLinkLineNormal(otherLine, out normal))
{
line = otherLine;
return true;
}
End:
line = null;
normal = default;
return false;
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected override void Awake()
{
base.Awake();
_linePool = new ObjectPool<TerminalLine2T3>(
createFunc: CreatElement<TerminalLine2T3>,
actionOnGet: ElementActive,
actionOnRelease: ElementInactive,
actionOnDestroy: a =>
{ },
collectionCheck: true,
defaultCapacity: 10,
maxSize: 10000);
_pointPool = new ObjectPool<TerminalPoint>(
createFunc: CreatElement<TerminalPoint>,
actionOnGet: ElementActive,
actionOnRelease: ElementInactive,
actionOnDestroy: a =>
{ },
collectionCheck: true,
defaultCapacity: 10,
maxSize: 10000);
}
protected override void OnEnableTool()
{
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ
var target = GenerateOperateSlot<WaitForUserInput_OpSlot>();
target.InitializeNextTodo(() => new DrawTerminalLine2T3_OpSlot());
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>");
}
protected override void OnDisableTool()
{
}
protected override void OnFinalEnd()
{
base.OnFinalEnd();
EnableTool = false;
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
public override SerializeUnion ToolSerializeDispost()
{
base.ToolSerializeDispost();
foreach (var element in PlaceElementManager.Inst.StructuralLinkedList)
{
var union = element.SerializedOccurs();
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
union.Index = TypeConsignMap.AddMapIndex(element.GetType());
union.RefreshSerializedContext();
SerializeTemp.Add(union);
}
SerializeTemp.RefreshSerializedContext();
return SerializeTemp;
}
public override bool ToolDiserializDispost(SerializeUnion context)
{
if (!base.ToolDiserializDispost(context))
return false;
var deserializeList = new List<(PlacementBase, SerializeUnion)>();
var safeCount = ushort.MaxValue;
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>̿<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
while (0 <-- safeCount && SerializeTemp.IndexMoveToNext(out var block))
{
var union = SerializeTemp.GetDeserializeObject<SerializeUnion>();
var type = TypeConsignMap.GetMapType(union.Index);
if (GetElement(type, out var obj))
{
deserializeList.Add((obj, union));
union.RefreshDeserializeContext();
union.IndexMoveToStart();
obj.DeserializeOccurs(union);
// switch (obj)
// {
// case TerminalLine2T3 line:
// line.DeserializeOccurs(union);
// break;
// case TerminalPoint point:
// point.DeserializeOccurs(union);
// break;
// }
}
else
Debug.LogError($"<22>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>Ԫ<EFBFBD>أ<EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>֧<EFBFBD><D6A7>{type}");
if (block) break;
}
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>̿<EFBFBD>ʼ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ");
foreach (var item in deserializeList)
item.Item1.DeserializeHysteresisOccurs(item.Item2);
return true;
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <returns></returns>
private T CreatElement<T>()
where T : PlacementBase, ILinkconfidentPe
{
var obj = CreatPlacementObject<T>();
obj.OnPlancementDestory += a =>
{
if (a is null)
{
Debug.LogError(<><D4AA><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>٣<EFBFBD><D9A3>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>");
return;
}
if (a is T b &&
b.GetLinkedNode(out var node))
SesothoPeManager.Inst.RemoveLinkedTarget(node);
else
Debug.LogError(<>ز<EFBFBD><D8B2>ǹ<EFBFBD><C7B9><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>Ѷ<EFBFBD>ʧ<EFBFBD><CAA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>");
};
return obj;
}
/// <summary>
/// <20>ض<EFBFBD><D8B6>󼤻<EFBFBD>
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
private void ElementActive<T>(T obj)
where T : PlacementBase, ILinkconfidentPe
{
obj.gameObject.SetActive(true);
OnAnyVivification?.Invoke(obj);
}
/// <summary>
/// <20>ض<EFBFBD><D8B6><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
private void ElementInactive<T>(T obj)
where T : PlacementBase, ILinkconfidentPe
{
obj.gameObject.SetActive(false);
OnAnyDormancy?.Invoke(obj);
}
/// <summary>
/// <20><>ȡԪ<C8A1><D4AA>
/// </summary>
/// <returns></returns>
public bool GetElement<T>(out T obj)
where T : PlacementBase, ILinkconfidentPe
{
var name = typeof(T).Name;
switch (name)
{
case nameof(TerminalLine2T3):
obj = _linePool.Get() as T;
return true;
case nameof(TerminalPoint):
obj = _pointPool.Get() as T;
return true;
default:
Debug.LogError($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>({name})<29><><EFBFBD><EFBFBD>Ԥ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><E2BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>");
break;
}
obj = null;
return false;
}
/// <summary>
/// <20><>ȡԪ<C8A1><D4AA>
/// </summary>
/// <param name="type"></param>
/// <param name="obj"></param>
/// <returns></returns>
public bool GetElement(Type type, out PlacementBase obj)
{
var name = type.Name;
switch (name)
{
case nameof(TerminalLine2T3):
obj = _linePool.Get();
return true;
case nameof(TerminalPoint):
obj = _pointPool.Get();
return true;
default:
Debug.LogError($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>({name})<29><><EFBFBD><EFBFBD>Ԥ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><E2BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>");
break;
}
obj = null;
return false;
}
/// <summary>
/// ɾ<><C9BE>Ԫ<EFBFBD><D4AA>
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
public void DeleteElement<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe
{
var name = typeof(T).Name;
switch (name)
{
case nameof(TerminalLine2T3):
_linePool.Release(obj as TerminalLine2T3);
break;
case nameof(TerminalPoint):
_pointPool.Release(obj as TerminalPoint);
break;
default:
Debug.LogError($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>({name})<29><><EFBFBD><EFBFBD>Ԥ<EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><E2BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ع<EFBFBD><D8B9><EFBFBD>");
break;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̬<EFBFBD><CCAC>Ԫ<EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>Ҫִ<D2AA>еIJ<D0B5><C4B2><EFBFBD><><EFBFBD><E2B2BB><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD><CCB1><EFBFBD>)
/// <code>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD>ô<EFBFBD><C3B4>Ӧ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD> AddBulkLineToNeighborGrid;
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3A3AC>ôӦ<C3B4>õ<EFBFBD><C3B5><EFBFBD> AddPeToNeighborGrid<69><64>
/// </code>
/// </summary>
public void PersistentElement<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㣬<DAB5><E3A3AC><EFBFBD>ں<EFBFBD><DABA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
var lineNode = SesothoPeManager.Inst.AddLinkedTarget(obj);
obj.SetLinkedNode(lineNode);
}
/// <summary>
/// <20>Ƴ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
public void ExcisionElement<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe
{
if (obj.GetLinkedNode(out var node))
SesothoPeManager.Inst.RemoveLinkedTarget(node);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
public void AddPeToNeighborGrid<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe
{
if (obj.NeighborGridIndex != null)
{
Debug.LogError("<22>޷<EFBFBD><DEB7>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ĵ<EFBFBD>Ԫ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>");
return;
}
SesothoPeManager.Inst.InsertNeighbor(obj, out var index);
obj.NeighborGridIndex = index;
// <20>ص<EFBFBD><D8B5>¼<EFBFBD>
OnAdditional?.Invoke(obj);
}
/// <summary>
/// <20><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public void AddBulkPeToNeighborGrid<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe,
IPossessorTrajectory2
{
if (obj.NeighborGridIndex != null)
{
Debug.LogError("<22>޷<EFBFBD><DEB7>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD>ĵ<EFBFBD>Ԫ<EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԡ<EFBFBD>");
return;
}
SesothoPeManager.Inst.InsertGiantNeighbor<T>(obj, out var index);
obj.NeighborGridIndex = index;
// <20>ص<EFBFBD><D8B5>¼<EFBFBD>
OnAdditional?.Invoke(obj);
}
/// <summary>
/// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>СԪ<D0A1><D4AA>
/// </summary>
/// <param name="obj"></param>
/// <typeparam name="T"></typeparam>
public void RemovePeToNeighborGrid<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe
{
if (obj.NeighborGridIndex != null &&
obj.NeighborGridIndex.GetAsIndex(out var index))
SesothoPeManager.Inst.RemoveNeighbor(index);
else
SesothoPeManager.Inst.RemoveNeighbor(obj);
ExcisionElement(obj);
// <20>ص<EFBFBD><D8B5>¼<EFBFBD>
OnDecreasing?.Invoke(obj);
}
/// <summary>
/// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
/// </summary>
public void RemoveBulkPeFormNeighborGrid<T>(T obj)
where T : PlacementBase,
ILinkconfidentPe,
IPossessorTrajectory2
{
if (obj.NeighborGridIndex != null &&
obj.NeighborGridIndex.GetAsMappingIndex(out var index))
SesothoPeManager.Inst.RemoveGiantNeighbor(index);
else
SesothoPeManager.Inst.RemoveGiantNeighbor<T>(obj);
ExcisionElement(obj);
// <20>ص<EFBFBD><D8B5>¼<EFBFBD>
OnDecreasing?.Invoke(obj);
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѱ·
/*
* ûд<C3BB><EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B7B3><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD>Astart<72><EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ʵ<EFBFBD>֡<EFBFBD>
*
* <20><>Ҫ<EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ʱ<C2B7>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>ϰ<EFBFBD><CFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
/// <summary>
/// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
/// <code>
/// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ϵĶ<CFB5>άƽ<CEAC><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
/// Ѱ·<D1B0>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD>ǽ<EFBFBD><C7BD>ܿ<EFBFBD><DCBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰<EFA3AC><CCB0><EFBFBD><EFBFBD><E3B7A8>
/// </code>
/// </summary>
/// <param name="startPoint"><3E><><EFBFBD><EFBFBD></param>
/// <param name="endPoint"><3E>յ<EFBFBD></param>
/// <param name="avoidRadius"><3E><><EFBFBD>ð뾶<C3B0><EBBEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײʱ<D7B2><CAB1><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
public DrawWayPoints GetPassThroughRouteShortcut(Vector3 startPoint, Vector3 endPoint, float avoidRadius)
{
var result = new DrawWayPoints();
Debug.LogError("<22>˷<EFBFBD><CBB7><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>");
return result;
}
/// <summary>
/// <20><>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="startPoint"><3E><><EFBFBD><EFBFBD></param>
/// <param name="endPoint"><3E>յ<EFBFBD></param>
/// <param name="avoidRadius"><3E><><EFBFBD>ð뾶<C3B0><EBBEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="layer"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD></param>
/// <returns></returns>
protected IEnumerable<Vector3> GetPassThroughRoute(Vector3 startPoint, Vector3 endPoint, float avoidRadius, LayerMask layer)
{
yield return Vector3.zero;
}
/// <summary>
/// ʹ<>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>·<EFBFBD><C2B7>
/// </summary>
/// <param name="wayPoints">һ<><D2BB>·<EFBFBD><C2B7></param>
public void BuildPaths(DrawWayPoints wayPoints)
{
new AStart2();
}
#endregion
}
}