推动Config新增

This commit is contained in:
2025-12-16 17:54:51 +08:00
parent 39a051eacf
commit 60df9a93aa
21 changed files with 427 additions and 117 deletions

View File

@@ -1,21 +1,36 @@
using System;
using System.Collections;
using System.IO;
using Convention;
using Dreamteck.Splines;
using Unity.Collections;
using UnityEngine;
namespace Demo.Game
{
public interface IDependOnSplineRenderer
namespace ConfigType
{
}
public static class DependOnSplineRendererUtility
{
public static BasicSplineRenderer LoadSplineRendererTool(this IDependOnSplineCore self, string path)
public class BasicSplineRendererConfig : UpdatementVec2Config
{
return self.SharedInterfaceScriptObject.FindWithPath(path, true) as BasicSplineRenderer;
public int MySplineCore;
public string LinesAssetBundlePath;
public string MyDefaultMaterial;
public override void Deserialize(BinaryReader reader)
{
MySplineCore = BinarySerializeUtility.ReadInt(reader);
LinesAssetBundlePath = BinarySerializeUtility.ReadString(reader);
MyDefaultMaterial = BinarySerializeUtility.ReadString(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteInt(writer, MySplineCore);
BinarySerializeUtility.WriteString(writer, LinesAssetBundlePath);
BinarySerializeUtility.WriteString(writer, MyDefaultMaterial);
base.Serialize(writer);
}
}
}
@@ -94,19 +109,6 @@ namespace Demo.Game
ManualAddEntry(time, new(from, to), curveType);
}
[Convention.RScript.Variable.Attr.Method]
public void LoadSpline(string path)
{
this.LoadSplineTool(path);
}
[Convention.RScript.Variable.Attr.Method]
public void LoadSpline(SplineCore spline)
{
this.MySplineCore = spline;
}
/// <summary>
/// 加载对应ab包并加载指定材质
/// </summary>

View File

@@ -3,10 +3,36 @@ using Demo.Game.Attr;
using Dreamteck.Splines;
using System;
using System.Collections;
using System.IO;
using UnityEngine;
namespace Demo.Game
{
namespace ConfigType
{
public class SplineTubeRendererConfig : BasicSplineJustFollowConfig
{
public const bool DefaultIsDoubleSide = true;
public const int DefaultSidesCount = 12;
public bool IsDoubleSide = DefaultIsDoubleSide;
public int SidesCount = DefaultSidesCount;
public override void Deserialize(BinaryReader reader)
{
IsDoubleSide = BinarySerializeUtility.ReadBool(reader);
SidesCount = BinarySerializeUtility.ReadInt(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteBool(writer, IsDoubleSide);
BinarySerializeUtility.WriteInt(writer, SidesCount);
base.Serialize(writer);
}
}
}
[Scriptable]
public class SplineTubeRenderer : BasicSplineRenderer<TubeGenerator>
{

View File

@@ -1,12 +1,42 @@
using Convention;
using Demo.Game.Attr;
using System;
using System.Collections;
using System.IO;
using UnityEngine;
namespace Demo.Game
{
namespace ConfigType
{
public class SplineAnchorConfig : ScriptLoadableConfig
{
public int MySplineCore, MySplineRenderer;
public bool isFollowPosition, isFollowRotation;
public float MySplineOffset;
public override void Deserialize(BinaryReader reader)
{
MySplineCore = BinarySerializeUtility.ReadInt(reader);
MySplineRenderer = BinarySerializeUtility.ReadInt(reader);
isFollowPosition = BinarySerializeUtility.ReadBool(reader);
isFollowRotation = BinarySerializeUtility.ReadBool(reader);
MySplineOffset = BinarySerializeUtility.ReadFloat(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteInt(writer, MySplineCore);
BinarySerializeUtility.WriteInt(writer, MySplineRenderer);
BinarySerializeUtility.WriteBool(writer, isFollowPosition);
BinarySerializeUtility.WriteBool(writer, isFollowRotation);
BinarySerializeUtility.WriteFloat(writer, MySplineOffset);
base.Serialize(writer);
}
}
}
[Scriptable]
public class SplineAnchor : ScriptableObject, IDependOnSplineCore, IDependOnSplineRenderer
public class SplineAnchor : ScriptableObject, IDependOnSplineCore
{
public static SplineAnchor Make()
{
@@ -24,16 +54,6 @@ namespace Demo.Game
Updater?.Invoke();
}
/// <summary>
/// 加载并绑定到新样条线
/// </summary>
/// <param name="path">对象路径, 不存在时则立刻加载</param>
[Convention.RScript.Variable.Attr.Method]
public void LoadSpline(string path)
{
this.LoadSplineTool(path);
}
/// <summary>
/// 必须先执行LoadSpline加载样条线
/// </summary>

View File

@@ -51,29 +51,14 @@ namespace Demo.Game
public interface IDependOnSplineCore : IScriptableObject
{
SplineCore MySplineCore { get; set; }
void LoadSpline(string path);
}
public static class DependOnSplineCoreUtility
{
public const string LoadSplineDescription = @"
<summary>
加载并绑定到新样条线
</summary>
<param name=""path"">对象相对路径,若对象不存在则作为脚本相对路径加载</param>
";
/// <summary>
/// 加载并绑定到新样条线
/// </summary>
/// <param name="path">对象相对路径,若对象不存在则作为脚本相对路径加载</param>
public static SplineCore LoadSplineTool(this IDependOnSplineCore self, string path)
/// <param name="path">对象路径, 不存在时则立刻加载</param>
[Convention.RScript.Variable.Attr.Method]
void LoadSpline(SplineCore core)
{
var spline = self.SharedInterfaceScriptObject.FindWithPath(path, false);
if (spline == null)
spline = self.SharedInterfaceScriptObject.LoadSubScript(nameof(SplineCore), new ToolFile(path).GetFilename(true), path);
self.MySplineCore = (SplineCore)spline;
return self.MySplineCore;
MySplineCore = core;
}
}

View File

@@ -2,10 +2,42 @@ using Convention;
using Demo.Game.Attr;
using Dreamteck.Splines;
using System.Collections;
using System.IO;
using UnityEngine;
namespace Demo.Game
{
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);
}
}
}
[Scriptable]
public class SplineNode : ScriptableObject
{
@@ -14,7 +46,7 @@ namespace Demo.Game
public static SplineNode Make()
{
var node = new GameObject("", typeof(Node)).AddComponent<SplineNode>();
node.m_MyNode = node.GetOrAddComponent<Node>();
node.m_MyNode = node.GetOrAddComponent<Node>();
return node;
}
@@ -23,14 +55,13 @@ namespace Demo.Game
public Color NodeColor = Color.white;
public bool IsSetupNodeRotation = false;
public Vector3 NodeRotation = Vector3.zero;
public int MyNodeContent = 0;
public Node MyNode => m_MyNode;
public void AddTo(SplineCore core)
{
MyNodeContent = core.NodeContent;
int MyNodeContent = core.NodeContent;
core.MySplineComputer.SetPointColor(MyNodeContent, NodeColor);
core.MySplineComputer.SetPointSize(MyNodeContent, NodeSize);
core.MySplineComputer.SetPointNormal(MyNodeContent, IsSetupNodeRotation ? NodeRotation.normalized : transform.up);

View File

@@ -1,13 +1,33 @@
using System;
using System.Collections;
using System.IO;
using Convention;
using UnityEngine;
namespace Demo.Game
{
public abstract class BasicSplineJustFollow : Updatement<float>
namespace ConfigType
{
public SplineCore MySplineCore;
public class BasicSplineJustFollowConfig : ScriptLoadableConfig
{
public int MySplineCore;
public override void Deserialize(BinaryReader reader)
{
MySplineCore = BinarySerializeUtility.ReadInt(reader);
base.Deserialize(reader);
}
public override void Serialize(BinaryWriter writer)
{
BinarySerializeUtility.WriteInt(writer, MySplineCore);
base.Serialize(writer);
}
}
}
public abstract class BasicSplineJustFollow : Updatement<float>, IDependOnSplineCore
{
public SplineCore MySplineCore { get; set; }
protected override float Lerp(float begin, float end, float t)
{
@@ -33,15 +53,5 @@ namespace Demo.Game
{
ManualAddEntry(time, value, curveType);
}
/// <summary>
/// 绑定到样条线
/// </summary>
/// <param name="path">脚本位置</param>
[Convention.RScript.Variable.Attr.Method]
public void Load(SplineCore splineCore)
{
MySplineCore = splineCore;
}
}
}