补充旧装配岛项目中的修改
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d98e03d6c3f900341838908516882fd0
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+38
-26
@@ -1,9 +1,7 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.Serialization;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace LRC
|
||||
@@ -14,7 +12,7 @@ namespace LRC
|
||||
public class ConfigDigitalInputField : ConfigSelectableItem
|
||||
{
|
||||
#region 属性字段
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public float editorInput;
|
||||
#endif
|
||||
@@ -32,14 +30,28 @@ namespace LRC
|
||||
/// 增量
|
||||
/// </summary>
|
||||
public double delta = 1;
|
||||
|
||||
public TMP_InputField TargetInput
|
||||
{
|
||||
get
|
||||
{
|
||||
if (targetInput != null)
|
||||
{
|
||||
return targetInput;
|
||||
}
|
||||
Debug.LogError("输入目标不存在", this);
|
||||
return null;
|
||||
}
|
||||
set => targetInput = value;
|
||||
}
|
||||
|
||||
public override bool AllowInput
|
||||
{
|
||||
get => base.AllowInput;
|
||||
set
|
||||
{
|
||||
if (targetInput != null)
|
||||
targetInput.readOnly = !value;
|
||||
if (TargetInput != null)
|
||||
TargetInput.readOnly = !value;
|
||||
if (digitalAddButton != null)
|
||||
digitalAddButton.interactable = value;
|
||||
if (digitalSubButton != null)
|
||||
@@ -47,7 +59,7 @@ namespace LRC
|
||||
base.AllowInput = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region 生命周期
|
||||
@@ -56,35 +68,35 @@ namespace LRC
|
||||
{
|
||||
base.OnValidate();
|
||||
#if UNITY_EDITOR
|
||||
if (targetInput != null)
|
||||
targetInput.text = editorInput.ToString();
|
||||
if (TargetInput != null)
|
||||
TargetInput.text = editorInput.ToString(numberFormat);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
if (ReferenceEquals(targetInput, null))
|
||||
if (ReferenceEquals(TargetInput, null))
|
||||
{
|
||||
Debug.LogError($"{name}配置项目条目的基本元素不存在");
|
||||
Debug.LogError($"{name}配置项目条目的基本元素不存在", this);
|
||||
return;
|
||||
}
|
||||
targetInput.onSelect.AddListener(a =>
|
||||
TargetInput.onSelect.AddListener(a =>
|
||||
{
|
||||
WhenStartEdit();
|
||||
});
|
||||
targetInput.onValueChanged.AddListener(o =>
|
||||
TargetInput.onValueChanged.AddListener(o =>
|
||||
{
|
||||
double value = 0;
|
||||
if (double.TryParse(o, out value))
|
||||
{
|
||||
SetValue(value);
|
||||
SetValue(value.ToString(numberFormat));
|
||||
}
|
||||
});
|
||||
targetInput.onEndEdit.AddListener(delegate
|
||||
TargetInput.onEndEdit.AddListener(delegate
|
||||
{
|
||||
WhenEndEdit();
|
||||
});
|
||||
});
|
||||
if (!ReferenceEquals(digitalAddButton, null))
|
||||
digitalAddButton.onClick.AddListener(delegate
|
||||
{
|
||||
@@ -100,7 +112,7 @@ namespace LRC
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 实现
|
||||
|
||||
protected override void SetValue(object newValue)
|
||||
@@ -112,18 +124,18 @@ namespace LRC
|
||||
{
|
||||
base.RefreshValueWithoutEvent(CastDigitalNumber(newValue, minValue, maxValue, digits), forceSet);
|
||||
}
|
||||
|
||||
|
||||
protected override void Initialization_ChildConstruction(UIBehaviour component)
|
||||
{
|
||||
base.Initialization_ChildConstruction(component);
|
||||
|
||||
|
||||
|
||||
|
||||
if (component is TMP_InputField inputField)
|
||||
{
|
||||
if (targetInput != null)
|
||||
targetInput = inputField;
|
||||
if (TargetInput != null)
|
||||
TargetInput = inputField;
|
||||
}
|
||||
else if(component is Button button)
|
||||
else if (component is Button button)
|
||||
{
|
||||
var name = component.transform.name;
|
||||
switch (name)
|
||||
@@ -145,9 +157,9 @@ namespace LRC
|
||||
protected override void RefreshFormatValue(object newValue)
|
||||
{
|
||||
base.RefreshFormatValue(newValue);
|
||||
targetInput.text = CastDigitalNumber(newValue).ToString(numberFormat);
|
||||
TargetInput.text = CastDigitalNumber(newValue).ToString(numberFormat);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
+42
-40
@@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.Serialization;
|
||||
using UnityEngine.UI;
|
||||
using XericLibrary.Runtime.CustomEditor;
|
||||
using XericLibrary.Runtime.MacroLibrary;
|
||||
@@ -51,10 +49,10 @@ namespace LRC
|
||||
/// <summary>
|
||||
/// 当数值收到修改时,产生事件,其中值的含义是修改前的值
|
||||
/// </summary>
|
||||
public static event Action<ConfigSelectableItem, object> OnAnyValueChange;
|
||||
|
||||
public static event Action<ConfigSelectableItem, object> OnAnyValueChange;
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 静态成员
|
||||
|
||||
/// <summary>
|
||||
@@ -66,7 +64,7 @@ namespace LRC
|
||||
/// 项目列表有效成员的数量
|
||||
/// </summary>
|
||||
public static int ConfigItemListCount => ConfigItemList.Count;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取
|
||||
/// </summary>
|
||||
@@ -74,7 +72,7 @@ namespace LRC
|
||||
/// <returns></returns>
|
||||
public static ConfigSelectableItem GetConfigItemByIndex(int index) => ConfigItemList[index];
|
||||
public static IEnumerable<ConfigSelectableItem> ConfigItemLists => ConfigItemList;
|
||||
|
||||
|
||||
private static bool autoUpdateValueAll;
|
||||
/// <summary>
|
||||
/// 自动更新所有数值
|
||||
@@ -89,9 +87,9 @@ namespace LRC
|
||||
autoUpdateValueAll = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 状态
|
||||
|
||||
/// <summary>
|
||||
@@ -147,7 +145,7 @@ namespace LRC
|
||||
/// </code>
|
||||
/// </summary>
|
||||
public event Func<ConfigSelectableItem, bool> GetSourceValueAutoUpdate;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 当前属性的自动更新请求设置
|
||||
/// <code>
|
||||
@@ -157,9 +155,9 @@ namespace LRC
|
||||
/// </code>
|
||||
/// </summary>
|
||||
public event Action<bool> SetSourceValueAutoUpdate;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 请求此属性设置值(将值应用到寄存中)
|
||||
/// </summary>
|
||||
@@ -167,9 +165,9 @@ namespace LRC
|
||||
{
|
||||
SetSourceValue?.Invoke(this, Value);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 属性字段
|
||||
|
||||
/// <summary>
|
||||
@@ -177,7 +175,7 @@ namespace LRC
|
||||
/// </summary>
|
||||
[Rename("映射标记")]
|
||||
public string configTag;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设定是否有效。
|
||||
/// 如果无效,则不允许输入
|
||||
@@ -199,14 +197,14 @@ namespace LRC
|
||||
[SerializeField]
|
||||
[Rename("允许阻塞自动更新")]
|
||||
private bool allowBlockUpdate = true;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 阻塞自动更新,一般由程序自动根据焦点更新
|
||||
/// </summary>
|
||||
[SerializeField]
|
||||
[Rename("阻塞自动更新")]
|
||||
private bool forceBlockUpdate = false;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 格式化文本
|
||||
/// </summary>
|
||||
@@ -253,7 +251,7 @@ namespace LRC
|
||||
|
||||
[Rename("反转自动更新状态")]
|
||||
public bool autoUpdateValueReversalState;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 脏属性自动复位。
|
||||
/// 当属性被重新开关时,将取消脏状态
|
||||
@@ -262,7 +260,7 @@ namespace LRC
|
||||
public bool dirtyAutoReset = false;
|
||||
|
||||
// ==== 属性 ==== //
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设定是否输入有效
|
||||
/// </summary>
|
||||
@@ -295,13 +293,13 @@ namespace LRC
|
||||
return;
|
||||
}
|
||||
if (!value) return;
|
||||
|
||||
|
||||
_isDirty = true;
|
||||
OnAnyValueDirty?.Invoke(this);
|
||||
OnValueDirty?.Invoke(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 设定自动更新状态,并同步选框
|
||||
/// <code>
|
||||
@@ -333,16 +331,20 @@ namespace LRC
|
||||
public bool ForceBlockUpdate
|
||||
{
|
||||
get => forceBlockUpdate;
|
||||
set => forceBlockUpdate = value;
|
||||
set => forceBlockUpdate = value;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 项目标题
|
||||
/// </summary>
|
||||
public string TitleName
|
||||
{
|
||||
get => titleLabel.text;
|
||||
set => titleLabel.text = value;
|
||||
set
|
||||
{
|
||||
if (titleLabel != null)
|
||||
titleLabel.text = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -375,7 +377,7 @@ namespace LRC
|
||||
get => unitLabel.text;
|
||||
set => unitLabel.text = value;
|
||||
}
|
||||
|
||||
|
||||
[SerializeField]
|
||||
// [Obsolete("请使用访问器")]
|
||||
private object _value;
|
||||
@@ -385,7 +387,7 @@ namespace LRC
|
||||
/// </summary>
|
||||
public object Value
|
||||
{
|
||||
get => _value;
|
||||
get => _value;
|
||||
protected set
|
||||
{
|
||||
if (IsValueInitNull && value != null)
|
||||
@@ -395,11 +397,11 @@ namespace LRC
|
||||
}
|
||||
|
||||
// ==== 暂存 ==== //
|
||||
|
||||
|
||||
public FieldInfo FieldInfo;
|
||||
|
||||
public Type FieldType;
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region 生命周期
|
||||
@@ -431,7 +433,7 @@ namespace LRC
|
||||
ConfigItemList.Add(this);
|
||||
ForceUpdateAllConfigEvent += ForceUpdate;
|
||||
ForceSetAllSourceValueEvent += SetSourceValueRequest;
|
||||
|
||||
|
||||
if (dirtyAutoReset)
|
||||
IsDirty = false;
|
||||
}
|
||||
@@ -535,9 +537,9 @@ namespace LRC
|
||||
_ => Vector3.zero
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 初始化方法
|
||||
|
||||
/// <summary>
|
||||
@@ -600,7 +602,7 @@ namespace LRC
|
||||
#endregion
|
||||
|
||||
#region 更新方法
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 更新函数
|
||||
/// <code>
|
||||
@@ -614,7 +616,7 @@ namespace LRC
|
||||
IsDirty = false;
|
||||
var value = GetSourceValue?.Invoke(this);
|
||||
if (value == null)
|
||||
return ;
|
||||
return;
|
||||
RefreshValueWithoutEvent(value, forceSet);
|
||||
RefreshAutoUpdateValue();
|
||||
}
|
||||
@@ -665,15 +667,15 @@ namespace LRC
|
||||
{
|
||||
var isSourceValueAutoUpdate = GetSourceValueAutoUpdate?.Invoke(this);
|
||||
if (isSourceValueAutoUpdate != null)
|
||||
AutoUpdateValue = isSourceValueAutoUpdate.Value;
|
||||
AutoUpdateValue = isSourceValueAutoUpdate.Value;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 刷新格式化文本,在触发刷新时将产生更新
|
||||
/// </summary>
|
||||
protected virtual void RefreshFormatValue(object newValue)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected void WhenStartEdit()
|
||||
@@ -681,7 +683,7 @@ namespace LRC
|
||||
// Debug.Log("开始编辑");
|
||||
ForceBlockUpdate = true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 数值输入完毕,或焦点移除时调用。
|
||||
/// </summary>
|
||||
@@ -691,7 +693,7 @@ namespace LRC
|
||||
ForceBlockUpdate = false;
|
||||
OnEndEdit?.Invoke(this, Value);
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region 外观设定
|
||||
@@ -705,7 +707,7 @@ namespace LRC
|
||||
Destroy(autoUpdateValueToggle.gameObject);
|
||||
this.autoUpdateValue = autoUpdateValueReversalState ^ autoUpdateValue;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
+21
-15
@@ -1,10 +1,5 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace LRC
|
||||
{
|
||||
@@ -14,14 +9,19 @@ namespace LRC
|
||||
public class ConfigTextInputField : ConfigSelectableItem
|
||||
{
|
||||
#region ÊôÐÔ×Ö¶Î
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
public string editorInput;
|
||||
#endif
|
||||
|
||||
|
||||
public TMP_InputField targetInput;
|
||||
|
||||
|
||||
|
||||
// 定义一个委托,接受字符串参数并返回布尔值
|
||||
public delegate bool StringEventHandler(string input);
|
||||
// 声明事件
|
||||
public static event StringEventHandler 判断是否重名;
|
||||
|
||||
public override bool AllowInput
|
||||
{
|
||||
get => base.AllowInput;
|
||||
@@ -53,19 +53,25 @@ namespace LRC
|
||||
{
|
||||
WhenStartEdit();
|
||||
});
|
||||
targetInput.onValueChanged.AddListener(o =>
|
||||
targetInput.onEndEdit.AddListener(o =>
|
||||
{
|
||||
if(double.TryParse(o, out var value))
|
||||
SetValue(value);
|
||||
if (判断是否重名 != null)
|
||||
{
|
||||
if (判断是否重名.Invoke(o))
|
||||
{
|
||||
SetValue(o);
|
||||
}
|
||||
}
|
||||
});
|
||||
targetInput.onEndEdit.AddListener(delegate
|
||||
{
|
||||
WhenEndEdit();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region ʵÏÖ
|
||||
|
||||
protected override void SetValue(object newValue)
|
||||
@@ -77,11 +83,11 @@ namespace LRC
|
||||
{
|
||||
base.RefreshValueWithoutEvent(newValue, forceSet);
|
||||
}
|
||||
|
||||
|
||||
protected override void Initialization_ChildConstruction(UIBehaviour component)
|
||||
{
|
||||
base.Initialization_ChildConstruction(component);
|
||||
|
||||
|
||||
if (component is TMP_InputField inputField)
|
||||
{
|
||||
if (targetInput != null)
|
||||
@@ -94,7 +100,7 @@ namespace LRC
|
||||
base.RefreshFormatValue(newValue);
|
||||
targetInput.text = newValue.ToString();
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
+2
@@ -78,6 +78,8 @@ namespace LRC
|
||||
// toggle.isOn = true;
|
||||
// Debug.Log(TitleName +":ÉèÖò¼¶ûÏîÄ¿");
|
||||
// }
|
||||
|
||||
//toggles[newIndex].isOn = true;
|
||||
toggles[newIndex].SetIsOnWithoutNotify(true);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,4 @@
|
||||
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;
|
||||
@@ -14,8 +6,6 @@ using XericLibrary.Runtime.MacroLibrary;
|
||||
|
||||
namespace SesothoLine
|
||||
{
|
||||
using LineSegment2 = Deconstruction.Element.PromptLine2.LineSegment2;
|
||||
|
||||
/// <summary>
|
||||
/// 绘制轨迹线的操作
|
||||
/// <code>
|
||||
@@ -83,6 +73,7 @@ namespace SesothoLine
|
||||
// public SesothoArrangementWiresTool myWiresTool;
|
||||
// myWiresTool = targetTool as SesothoArrangementWiresTool;
|
||||
|
||||
public static bool 判断是否在绘制区域内;
|
||||
#endregion
|
||||
|
||||
#region 引用封装
|
||||
@@ -179,7 +170,13 @@ namespace SesothoLine
|
||||
ReplaceThis(new DrawTerminalLine2T3_OpSlot());
|
||||
}
|
||||
// 取消
|
||||
else if (IsReleaseCanelKey())
|
||||
else if (IsReleaseCanelKey() || (!判断是否在绘制区域内))
|
||||
{
|
||||
RemoveThis();
|
||||
EndPrecondition();
|
||||
}
|
||||
// 判断按下ESC取消线段绘制 2024.8.8
|
||||
else if (Input.GetKeyDown(KeyCode.Escape))
|
||||
{
|
||||
RemoveThis();
|
||||
EndPrecondition();
|
||||
@@ -192,6 +189,8 @@ namespace SesothoLine
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected override void AsyncBeforeUpdate()
|
||||
{
|
||||
base.AsyncBeforeUpdate();
|
||||
@@ -245,8 +244,8 @@ namespace SesothoLine
|
||||
{
|
||||
_isStartPointSubstitute = false;
|
||||
selfWiresTool.GetElement(out _startPoint);
|
||||
_lastPointPosition = SesothoArrangementWiresTool.OpKey_IgnoreNeighborAdsorption.Getkey() ?
|
||||
wfui_Slot.MouseHelperPosition :
|
||||
_lastPointPosition = SesothoArrangementWiresTool.OpKey_IgnoreNeighborAdsorption.Getkey() ?
|
||||
wfui_Slot.MouseHelperPosition :
|
||||
CameraMouseInputHelper.Inst.GetGridAdsorb(wfui_Slot.MouseHelperPosition);
|
||||
_lastPointNormal = default;
|
||||
}
|
||||
@@ -272,15 +271,17 @@ namespace SesothoLine
|
||||
selfWiresTool.DeleteElement(_endPoint);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 线路绘制过程
|
||||
/// </summary>
|
||||
private void DrawingProcess()
|
||||
{
|
||||
var forceStr = SesothoArrangementWiresTool.OpKey_ForceStr.Getkey();
|
||||
var forceStraightLine = SesothoArrangementWiresTool.OpKey_ForceStraightLine.Getkey();
|
||||
var force90Arc = SesothoArrangementWiresTool.OpKey_90Arc.Getkey();
|
||||
|
||||
// 获取当前的坐标
|
||||
_helperPosition = PlaceElementManager.Inst.InputHelper.CurrentGridPosition;
|
||||
|
||||
_startPoint.transform.position = _lastPointPosition;
|
||||
|
||||
_isFreeEndPoint = true;
|
||||
@@ -292,7 +293,7 @@ namespace SesothoLine
|
||||
_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,
|
||||
@@ -304,7 +305,7 @@ namespace SesothoLine
|
||||
// {
|
||||
// NearestLineTangentPoint
|
||||
// }
|
||||
|
||||
|
||||
// 否则自由点
|
||||
if (_isFreeEndPoint)
|
||||
{
|
||||
@@ -315,6 +316,36 @@ namespace SesothoLine
|
||||
_endPoint.transform.position = _helperPosition;
|
||||
}
|
||||
|
||||
if (forceStr)
|
||||
{
|
||||
Vector3 startPos = _startPoint.GetPosition3();
|
||||
Vector3 endPoint = _endPoint.GetPosition3();
|
||||
if ((int)startPos.x != (int)endPoint.x && (int)startPos.z != (int)endPoint.z)
|
||||
{
|
||||
Vector3 vector3 = endPoint - startPos;
|
||||
if (Mathf.Abs(vector3.x) > Mathf.Abs(vector3.z))
|
||||
{
|
||||
Vector3 vector = new Vector3(endPoint.x, endPoint.y, startPos.z);
|
||||
_endPoint.SetPosition3(vector);
|
||||
}
|
||||
else if (Mathf.Abs(vector3.x) < Mathf.Abs(vector3.z))
|
||||
{
|
||||
Vector3 vector = new Vector3(startPos.x, endPoint.y, endPoint.z);
|
||||
_endPoint.SetPosition3(vector);
|
||||
}
|
||||
_helperPosition = _endPoint.GetPosition3();
|
||||
_line.SetLineSegment(
|
||||
_lastPointPosition, _helperPosition,
|
||||
_lastPointNormal, _helperNormal
|
||||
);
|
||||
}
|
||||
}
|
||||
else if (force90Arc)
|
||||
{
|
||||
_helperPosition = _line.GetEndPointWorldPosition();
|
||||
}
|
||||
|
||||
|
||||
_line.SetLineSegment(
|
||||
_lastPointPosition, _helperPosition,
|
||||
_lastPointNormal, _helperNormal
|
||||
@@ -326,22 +357,24 @@ namespace SesothoLine
|
||||
// Debug.Log($"角度{arc.Angle} {arc.AngleExact}");
|
||||
// }
|
||||
|
||||
var forceStr = SesothoArrangementWiresTool.OpKey_ForceStr.Getkey();
|
||||
if (forceStr)
|
||||
if (forceStr || forceStraightLine)
|
||||
{
|
||||
_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;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
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;
|
||||
@@ -13,7 +10,6 @@ using Deconstruction.Type.Linkable;
|
||||
using SerializerHelper.Type;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Pool;
|
||||
using XericLibrary.Runtime.MacroLibrary;
|
||||
using XericLibrary.Runtime.Nav;
|
||||
|
||||
namespace SesothoLine
|
||||
@@ -39,19 +35,19 @@ namespace SesothoLine
|
||||
/// 工具中成员移除事件
|
||||
/// </summary>
|
||||
public event ToolMemberChange OnDecreasing;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 当任意元素苏醒
|
||||
/// </summary>
|
||||
public event ToolMemberChange OnAnyVivification;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 当任意元素休眠
|
||||
/// </summary>
|
||||
public event ToolMemberChange OnAnyDormancy;
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 快捷键
|
||||
|
||||
/*
|
||||
@@ -61,11 +57,19 @@ namespace SesothoLine
|
||||
* shift+b 忽略对象吸附
|
||||
* shift+n 忽略网格吸附
|
||||
*/
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 强制X轴或Y轴
|
||||
/// </summary>
|
||||
public static KeyPack OpKey_PlotTheXAndYAxes = new KeyPack();
|
||||
/// <summary>
|
||||
/// 强制X轴或Y轴直线
|
||||
/// </summary>
|
||||
public static KeyPack OpKey_ForceStr = new KeyPack(KeyCode.LeftControl);
|
||||
/// <summary>
|
||||
/// 强制直线
|
||||
/// </summary>
|
||||
public static KeyPack OpKey_ForceStr = new KeyPack(KeyCode.Alpha1);
|
||||
public static KeyPack OpKey_ForceStraightLine = new KeyPack(KeyCode.LeftShift, KeyCode.Q);
|
||||
/// <summary>
|
||||
/// 强制90度圆弧
|
||||
/// </summary>
|
||||
@@ -82,18 +86,20 @@ namespace SesothoLine
|
||||
/// <summary>
|
||||
/// 忽略吸附功能
|
||||
/// </summary>
|
||||
public static KeyPack OpKey_IgnoreNeighborAdsorption = new KeyPack(KeyCode.LeftShift, KeyCode.B);
|
||||
public static KeyPack OpKey_IgnoreNeighborAdsorption = new KeyPack(KeyCode.Alpha1);
|
||||
/// <summary>
|
||||
/// 忽略网格吸附
|
||||
/// </summary>
|
||||
public static KeyPack OpKey_IgnoreGridAdsorption = new KeyPack(KeyCode.LeftShift, KeyCode.N);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region 字段属性
|
||||
|
||||
private ObjectPool<TerminalLine2T3> _linePool;
|
||||
private ObjectPool<TerminalPoint> _pointPool;
|
||||
public ObjectPool<TerminalLine2T3> LinePool => _linePool;
|
||||
public ObjectPool<TerminalPoint> PointPool => _pointPool;
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -115,7 +121,7 @@ namespace SesothoLine
|
||||
point = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取光标下最近的对象为线
|
||||
/// </summary>
|
||||
@@ -146,27 +152,27 @@ namespace SesothoLine
|
||||
if (point is null)
|
||||
goto End;
|
||||
// 检查最近线切线是否有效,是否相连
|
||||
if (SesothoPeManager.NearestLineTangentObject is TerminalLine2T3 otherLine &&
|
||||
if (SesothoPeManager.NearestLineTangentObject is TerminalLine2T3 otherLine &&
|
||||
point.TryGetLinkLineNormal(otherLine, out normal))
|
||||
{
|
||||
line = otherLine;
|
||||
return true;
|
||||
}
|
||||
|
||||
End:
|
||||
|
||||
End:
|
||||
line = null;
|
||||
normal = default;
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 生命周期
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
|
||||
_linePool = new ObjectPool<TerminalLine2T3>(
|
||||
createFunc: CreatElement<TerminalLine2T3>,
|
||||
actionOnGet: ElementActive,
|
||||
@@ -176,7 +182,7 @@ namespace SesothoLine
|
||||
collectionCheck: true,
|
||||
defaultCapacity: 10,
|
||||
maxSize: 10000);
|
||||
|
||||
|
||||
_pointPool = new ObjectPool<TerminalPoint>(
|
||||
createFunc: CreatElement<TerminalPoint>,
|
||||
actionOnGet: ElementActive,
|
||||
@@ -186,7 +192,7 @@ namespace SesothoLine
|
||||
collectionCheck: true,
|
||||
defaultCapacity: 10,
|
||||
maxSize: 10000);
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected override void OnEnableTool()
|
||||
@@ -194,13 +200,13 @@ namespace SesothoLine
|
||||
// 启用时创建一个输入等待行为,随后进入绘制行为
|
||||
var target = GenerateOperateSlot<WaitForUserInput_OpSlot>();
|
||||
target.InitializeNextTodo(() => new DrawTerminalLine2T3_OpSlot());
|
||||
|
||||
|
||||
Debug.Log("激活线路绘制工具");
|
||||
}
|
||||
|
||||
protected override void OnDisableTool()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected override void OnFinalEnd()
|
||||
@@ -232,11 +238,11 @@ namespace SesothoLine
|
||||
{
|
||||
if (!base.ToolDiserializDispost(context))
|
||||
return false;
|
||||
|
||||
|
||||
var deserializeList = new List<(PlacementBase, SerializeUnion)>();
|
||||
var safeCount = ushort.MaxValue;
|
||||
Debug.Log("反序列化过程开始创建对象");
|
||||
while (0 <-- safeCount && SerializeTemp.IndexMoveToNext(out var block))
|
||||
while (0 < --safeCount && SerializeTemp.IndexMoveToNext(out var block))
|
||||
{
|
||||
var union = SerializeTemp.GetDeserializeObject<SerializeUnion>();
|
||||
var type = TypeConsignMap.GetMapType(union.Index);
|
||||
@@ -258,18 +264,18 @@ namespace SesothoLine
|
||||
}
|
||||
else
|
||||
Debug.LogError($"无法创建序列化元素,原因是类型不支持{type}");
|
||||
|
||||
|
||||
if (block) break;
|
||||
}
|
||||
Debug.Log("反序列化过程开始恢复链接关系");
|
||||
foreach (var item in deserializeList)
|
||||
item.Item1.DeserializeHysteresisOccurs(item.Item2);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 方法
|
||||
|
||||
/// <summary>
|
||||
@@ -319,7 +325,7 @@ namespace SesothoLine
|
||||
obj.gameObject.SetActive(false);
|
||||
OnAnyDormancy?.Invoke(obj);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取元素
|
||||
/// </summary>
|
||||
@@ -343,7 +349,7 @@ namespace SesothoLine
|
||||
obj = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取元素
|
||||
/// </summary>
|
||||
@@ -368,7 +374,7 @@ namespace SesothoLine
|
||||
obj = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 删除元素
|
||||
@@ -376,7 +382,7 @@ namespace SesothoLine
|
||||
/// <param name="obj"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public void DeleteElement<T>(T obj)
|
||||
where T : PlacementBase,
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe
|
||||
{
|
||||
var name = typeof(T).Name;
|
||||
@@ -394,8 +400,8 @@ namespace SesothoLine
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 保存元素链,在创建并常态化元素后都需要执行的操作 (注意不是在创建后立刻保存)
|
||||
/// <code>
|
||||
@@ -404,7 +410,7 @@ namespace SesothoLine
|
||||
/// </code>
|
||||
/// </summary>
|
||||
public void PersistentElement<T>(T obj)
|
||||
where T : PlacementBase,
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe
|
||||
{
|
||||
// 保存链表结构,反过来也持有这个节点,便于后续查找
|
||||
@@ -418,14 +424,14 @@ namespace SesothoLine
|
||||
/// <param name="obj"></param>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public void ExcisionElement<T>(T obj)
|
||||
where T : PlacementBase,
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe
|
||||
{
|
||||
if (obj.GetLinkedNode(out var node))
|
||||
SesothoPeManager.Inst.RemoveLinkedTarget(node);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 添加小型元素到网格中
|
||||
/// </summary>
|
||||
@@ -442,7 +448,7 @@ namespace SesothoLine
|
||||
}
|
||||
SesothoPeManager.Inst.InsertNeighbor(obj, out var index);
|
||||
obj.NeighborGridIndex = index;
|
||||
|
||||
|
||||
// 回调事件
|
||||
OnAdditional?.Invoke(obj);
|
||||
}
|
||||
@@ -451,8 +457,8 @@ namespace SesothoLine
|
||||
/// 添加大型元素到网格中
|
||||
/// </summary>
|
||||
public void AddBulkPeToNeighborGrid<T>(T obj)
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe,
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe,
|
||||
IPossessorTrajectory2
|
||||
{
|
||||
if (obj.NeighborGridIndex != null)
|
||||
@@ -462,7 +468,7 @@ namespace SesothoLine
|
||||
}
|
||||
SesothoPeManager.Inst.InsertGiantNeighbor<T>(obj, out var index);
|
||||
obj.NeighborGridIndex = index;
|
||||
|
||||
|
||||
// 回调事件
|
||||
OnAdditional?.Invoke(obj);
|
||||
}
|
||||
@@ -476,7 +482,7 @@ namespace SesothoLine
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe
|
||||
{
|
||||
if (obj.NeighborGridIndex != null &&
|
||||
if (obj.NeighborGridIndex != null &&
|
||||
obj.NeighborGridIndex.GetAsIndex(out var index))
|
||||
SesothoPeManager.Inst.RemoveNeighbor(index);
|
||||
else
|
||||
@@ -485,16 +491,16 @@ namespace SesothoLine
|
||||
// 回调事件
|
||||
OnDecreasing?.Invoke(obj);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 移除这个大型元素
|
||||
/// </summary>
|
||||
public void RemoveBulkPeFormNeighborGrid<T>(T obj)
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe,
|
||||
where T : PlacementBase,
|
||||
ILinkconfidentPe,
|
||||
IPossessorTrajectory2
|
||||
{
|
||||
if (obj.NeighborGridIndex != null &&
|
||||
if (obj.NeighborGridIndex != null &&
|
||||
obj.NeighborGridIndex.GetAsMappingIndex(out var index))
|
||||
SesothoPeManager.Inst.RemoveGiantNeighbor(index);
|
||||
else
|
||||
@@ -513,7 +519,7 @@ namespace SesothoLine
|
||||
*
|
||||
* 主要提供绘制线路时的多段线拟合,障碍物避让
|
||||
*/
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取一个可以通过的路径
|
||||
/// <code>
|
||||
|
||||
@@ -12,10 +12,12 @@ using Deconstruction.Manager;
|
||||
using Deconstruction.Tool;
|
||||
using Deconstruction.Type.Area;
|
||||
using Deconstruction.Type.Serialize;
|
||||
using Newtonsoft.Json;
|
||||
using SerializerHelper.Type;
|
||||
using UnityEngine.UI;
|
||||
using XericLibrary.Runtime.Debuger;
|
||||
using XericLibrary.Runtime.MacroLibrary;
|
||||
using Deconstruction.Type.DMToolSlot;
|
||||
|
||||
namespace SesothoLine
|
||||
{
|
||||
@@ -29,9 +31,6 @@ namespace SesothoLine
|
||||
{
|
||||
#region 静态成员
|
||||
|
||||
/// <summary>
|
||||
/// 此处提供的单例与父类单例是独立的
|
||||
/// </summary>
|
||||
public new static SesothoPeManager Inst => _inst;
|
||||
private static SesothoPeManager _inst;
|
||||
|
||||
@@ -57,52 +56,47 @@ namespace SesothoLine
|
||||
/// 光标下最近的对象
|
||||
/// </summary>
|
||||
public static PlacementBase NearestObject => TrackingTool.TrackingCurrentTarget;
|
||||
|
||||
|
||||
private static TrajectoryTrackingTool.TrackPersistentCommunicate _lineTangentTraceTool;
|
||||
|
||||
#endregion
|
||||
|
||||
#region 调试功能
|
||||
|
||||
#if UNITY_EDITOR
|
||||
|
||||
|
||||
public bool EnableGridDebugDraw = false;
|
||||
|
||||
|
||||
public void DebugFunc()
|
||||
{
|
||||
if (EnableGridDebugDraw)
|
||||
{
|
||||
PlacementNeighbor.DebugDrawGrid();
|
||||
}
|
||||
PlacementNeighbor.DebugDrawGrid();
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region 生命周期
|
||||
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
_inst = this;
|
||||
|
||||
|
||||
if (LineMaterial == null)
|
||||
Debug.LogError("需要给管理器提供一个线段材质");
|
||||
if (PointMaterial == null)
|
||||
Debug.LogError("需要给管理器提供一个点材质");
|
||||
|
||||
|
||||
// 初始化画线工具
|
||||
_wiresTool = new SesothoArrangementWiresTool();
|
||||
_wiresTool.InitializeParent(transform);
|
||||
|
||||
_lineTangentTraceTool = TrackingTool.InstantiationTrackCaculate(PlaceholdersAreaType.LinearContinuity);
|
||||
|
||||
|
||||
// 手动开启代理更新
|
||||
EnableUpdate = true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
protected override void Start()
|
||||
@@ -127,7 +121,6 @@ namespace SesothoLine
|
||||
// new SerializeUnion();
|
||||
}
|
||||
|
||||
private string serializeContext = null;
|
||||
protected override void LateUpdate()
|
||||
{
|
||||
base.LateUpdate();
|
||||
@@ -136,18 +129,27 @@ namespace SesothoLine
|
||||
#if !UNITY_EDITOR || !_DEBUG_
|
||||
return;
|
||||
#endif
|
||||
// 取消路线绘制 2024.8.8
|
||||
/*if (Input.GetKeyDown(KeyCode.Escape))
|
||||
{
|
||||
_wiresTool.EnableTool = false;
|
||||
|
||||
//DrawTerminalLine2T3_OpSlot.RemoveThis();
|
||||
//DrawTerminalLine2T3_OpSlot.EndPrecondition();
|
||||
}*/
|
||||
|
||||
// 工具功能测试
|
||||
if (Input.GetKeyDown(KeyCode.L))
|
||||
/*if (Input.GetKeyDown(KeyCode.L))
|
||||
{
|
||||
_wiresTool.EnableTool = !_wiresTool.EnableTool;
|
||||
Debug.Log($"{(_wiresTool.EnableTool ? "绘制工具已激活" : "工具已取消激活")}");
|
||||
}
|
||||
|
||||
}*/
|
||||
|
||||
// 存档功能测试
|
||||
if (Input.GetKeyDown(KeyCode.S))
|
||||
/*if (Input.GetKeyDown(KeyCode.S))
|
||||
{
|
||||
var obj = _wiresTool.ToolSerializeDispost();
|
||||
serializeContext = MacroFile.JsonSerializerFormatter.formatter.Serializer(obj);
|
||||
serializeContext = JsonConvert.SerializeObject(obj);
|
||||
Debug.Log(obj.ToString());
|
||||
}
|
||||
if (Input.GetKeyDown(KeyCode.D))
|
||||
@@ -158,29 +160,31 @@ namespace SesothoLine
|
||||
return;
|
||||
}
|
||||
|
||||
var obj = MacroFile.JsonSerializerFormatter.formatter.Deserializer<SerializeUnion>(serializeContext);
|
||||
var obj = JsonConvert.DeserializeObject<SerializeUnion>(serializeContext);
|
||||
_wiresTool.ToolDiserializDispost(obj);
|
||||
}
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.A))
|
||||
{
|
||||
_wiresTool.EnableCompress = !_wiresTool.EnableCompress;
|
||||
if (_wiresTool.EnableCompress )
|
||||
if (_wiresTool.EnableCompress)
|
||||
Debug.Log("开启压缩");
|
||||
else
|
||||
Debug.Log("关闭压缩");
|
||||
}
|
||||
|
||||
|
||||
}*/
|
||||
|
||||
|
||||
// 绘制一下吸附的目标位置
|
||||
if (TrackingTool.EnableTool || TrackingTool._enableAuxiliaryTool)
|
||||
{
|
||||
MacroDebugDraw.DrawDownArrow(NearestPoint, Quaternion.identity, Color.magenta);
|
||||
MacroDebugDraw.DrawDownArrow(NearestLineTangentPoint, Quaternion.identity, Color.green);
|
||||
MacroDebugDraw.SetColor(Color.magenta);
|
||||
MacroDebugDraw.DrawDownArrow(NearestPoint);
|
||||
MacroDebugDraw.SetColor(Color.green);
|
||||
MacroDebugDraw.DrawDownArrow(NearestLineTangentPoint);
|
||||
MacroDebugDraw.ResetColor();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.Text;
|
||||
using Deconstruction.Element;
|
||||
using Deconstruction.Interface;
|
||||
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
using UnityEngine.UIElements;
|
||||
using XericLibrary.Runtime.Debuger;
|
||||
using XericLibrary.Runtime.MacroLibrary;
|
||||
using XericLibrary.Runtime.Type;
|
||||
|
||||
namespace SesothoLine
|
||||
{
|
||||
@@ -38,7 +31,9 @@ namespace SesothoLine
|
||||
private LineSegment2 _lineSegment = new LineSegment2();
|
||||
|
||||
public bool DebugDrawGrid = false;
|
||||
|
||||
|
||||
public Vector3 ah, bh;
|
||||
|
||||
#endregion
|
||||
|
||||
#region 生命周期
|
||||
@@ -61,10 +56,7 @@ namespace SesothoLine
|
||||
SesothoPeManager.Inst.RemoveEmbedded(this);
|
||||
}
|
||||
|
||||
protected virtual void OnDestroy()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
protected override void AgencyOnEnable()
|
||||
{
|
||||
@@ -86,9 +78,10 @@ namespace SesothoLine
|
||||
{
|
||||
foreach (var index in indexs.Indexs)
|
||||
{
|
||||
MacroDebugDraw.SetColor(Color.red);
|
||||
MacroDebugDraw.DrawDownArrow(
|
||||
index.GetCellWorldIndexPosition() + MacroMath.RandomVector3(0.1f, Identifier), Quaternion.identity,
|
||||
Color.red);
|
||||
index.GetCellWorldIndexPosition() + MacroMath.RandomVector3(0.1f, Identifier));
|
||||
MacroDebugDraw.ResetColor();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,8 +121,12 @@ namespace SesothoLine
|
||||
b.UpwardPlaneToVector2(),
|
||||
ah.UpwardPlaneToVector2(),
|
||||
bh.UpwardPlaneToVector2());
|
||||
// ah?.GetEndPointNormal ?? default,
|
||||
// bh?.GetStartPointNormal ?? default);
|
||||
// ah?.GetEndPointNormal ?? default,
|
||||
// bh?.GetStartPointNormal ?? default);
|
||||
|
||||
this.ah = ah;
|
||||
this.bh = bh;
|
||||
|
||||
return _lineSegment;
|
||||
}
|
||||
|
||||
@@ -145,7 +142,6 @@ namespace SesothoLine
|
||||
AutomaticDrawCircularLine(straightLine);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 重新计算原点
|
||||
/// <code>
|
||||
|
||||
Reference in New Issue
Block a user