559 lines
18 KiB
C#
559 lines
18 KiB
C#
|
|
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD>
|
|||
|
|
* 2,3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD>ĽǶ<EFBFBD>Ϊ90<EFBFBD><EFBFBD>180<EFBFBD><EFBFBD>
|
|||
|
|
* R <EFBFBD><EFBFBD>תԲ<EFBFBD><EFBFBD>
|
|||
|
|
* shift+b <EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* shift+n <EFBFBD><EFBFBD><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>Ѱ·
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* ûд<EFBFBD>꣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鷳<EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><EFBFBD><EFBFBD>Astart<EFBFBD>࣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ʵ<EFBFBD>֡<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD>Ҫ<EFBFBD>ṩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ʱ<EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD>ϰ<EFBFBD><EFBFBD><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
|
|||
|
|
}
|
|||
|
|
}
|