Files
Convention-Unity-Demo/Assets/Scripts/MoreSpline/SplineNode.cs

108 lines
3.7 KiB
C#
Raw Normal View History

using Convention;
2025-12-15 17:20:55 +08:00
using Demo.Game.Attr;
2025-09-25 19:04:05 +08:00
using Dreamteck.Splines;
2025-12-12 15:19:10 +08:00
using System.Collections;
2025-12-16 17:54:51 +08:00
using System.IO;
2025-09-25 19:04:05 +08:00
using UnityEngine;
namespace Demo.Game
{
2025-12-16 17:54:51 +08:00
namespace ConfigType
{
public class SplineNodeConfig : ScriptLoadableConfig
{
public float NodeSize = 1;
public Color NodeColor = Color.white;
public bool IsSetupNodeRotation = false;
public Vector3 NodeRotation = Vector3.zero;
public int[] LinkSplineCores;
public override void Deserialize(BinaryReader reader)
{
NodeSize = BinarySerializeUtility.ReadFloat(reader);
NodeColor = BinarySerializeUtility.ReadColor(reader);
IsSetupNodeRotation = BinarySerializeUtility.ReadBool(reader);
NodeRotation = BinarySerializeUtility.ReadVec3(reader);
LinkSplineCores = BinarySerializeUtility.DeserializeIntArray(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteFloat(writer, NodeSize);
BinarySerializeUtility.WriteColor(writer, NodeColor);
BinarySerializeUtility.WriteBool(writer, IsSetupNodeRotation);
BinarySerializeUtility.WriteVec3(writer, NodeRotation);
BinarySerializeUtility.SerializeArray(writer, LinkSplineCores);
base.Serialize(writer);
}
}
}
2025-12-12 15:19:10 +08:00
[Scriptable]
2025-09-25 19:04:05 +08:00
public class SplineNode : ScriptableObject
{
2025-11-29 00:44:05 +08:00
protected override bool IsSelfEnableUpdate => false;
2025-09-25 19:04:05 +08:00
public static SplineNode Make()
{
var node = new GameObject("", typeof(Node)).AddComponent<SplineNode>();
2025-12-16 17:54:51 +08:00
node.m_MyNode = node.GetOrAddComponent<Node>();
return node;
2025-09-25 19:04:05 +08:00
}
2025-11-24 18:02:57 +08:00
private Node m_MyNode;
2025-09-25 19:04:05 +08:00
public float NodeSize = 1;
public Color NodeColor = Color.white;
public bool IsSetupNodeRotation = false;
public Vector3 NodeRotation = Vector3.zero;
2025-11-24 18:02:57 +08:00
public Node MyNode => m_MyNode;
2025-09-25 19:04:05 +08:00
public void AddTo(SplineCore core)
{
2025-12-16 17:54:51 +08:00
int MyNodeContent = core.NodeContent;
2025-09-25 19:04:05 +08:00
core.MySplineComputer.SetPointColor(MyNodeContent, NodeColor);
core.MySplineComputer.SetPointSize(MyNodeContent, NodeSize);
2025-09-25 19:04:05 +08:00
core.MySplineComputer.SetPointNormal(MyNodeContent, IsSetupNodeRotation ? NodeRotation.normalized : transform.up);
MyNode.AddConnection(core.MySplineComputer, MyNodeContent);
2025-09-25 19:04:05 +08:00
}
/// <summary>
/// 设置节点大小默认为1
/// </summary>
/// <param name="size"></param>
[Convention.RScript.Variable.Attr.Method]
2025-11-24 18:02:57 +08:00
public void SetNodeSize(float size)
2025-09-25 19:04:05 +08:00
{
2025-11-24 18:02:57 +08:00
NodeSize = size;
2025-09-25 19:04:05 +08:00
}
/// <summary>
/// 设置节点颜色,默认为(1,1,1,1)
/// </summary>
/// <param name="r"></param>
/// <param name="g"></param>
/// <param name="b"></param>
/// <param name="a"></param>
[Convention.RScript.Variable.Attr.Method]
2025-11-24 18:02:57 +08:00
public void SetNodeColor(float r, float g, float b, float a)
2025-09-25 19:04:05 +08:00
{
2025-11-24 18:02:57 +08:00
NodeColor = new(r, g, b, a);
2025-09-25 19:04:05 +08:00
}
/// <summary>
/// 设置节点旋转节点正面forward向量为法线
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
[Convention.RScript.Variable.Attr.Method]
2025-11-24 18:02:57 +08:00
public void SetNodeRotation(float x, float y, float z)
2025-09-25 19:04:05 +08:00
{
IsSetupNodeRotation = true;
2025-11-24 18:02:57 +08:00
this.transform.localEulerAngles = NodeRotation = new(x, y, z);
2025-09-25 19:04:05 +08:00
}
}
}