推动Config新增
This commit is contained in:
@@ -7,9 +7,58 @@ using Cinemachine;
|
||||
using Convention.WindowsUI.Variant;
|
||||
using UnityEngine;
|
||||
using Demo.Game.Attr;
|
||||
using System.IO;
|
||||
using Convention;
|
||||
|
||||
namespace Demo.Game
|
||||
{
|
||||
namespace ConfigType
|
||||
{
|
||||
public class CameraObjectConfig : ScriptLoadableConfig
|
||||
{
|
||||
public bool orthographic;
|
||||
public float fieldOfView;
|
||||
public float orthographicSize;
|
||||
public float nearClipPlane;
|
||||
public float farClipPlane;
|
||||
public float depth;
|
||||
public int VirtualCameraFollow;
|
||||
public int VirtualCameraLookAt;
|
||||
public Vector3 VirtualCameraFollowOffset;
|
||||
public Vector3 VirtualCameraLookAtDamping;
|
||||
|
||||
public override void Deserialize(BinaryReader reader)
|
||||
{
|
||||
orthographic = BinarySerializeUtility.ReadBool(reader);
|
||||
fieldOfView = BinarySerializeUtility.ReadFloat(reader);
|
||||
orthographicSize = BinarySerializeUtility.ReadFloat(reader);
|
||||
nearClipPlane = BinarySerializeUtility.ReadFloat(reader);
|
||||
farClipPlane = BinarySerializeUtility.ReadFloat(reader);
|
||||
depth = BinarySerializeUtility.ReadFloat(reader);
|
||||
VirtualCameraFollow = BinarySerializeUtility.ReadInt(reader);
|
||||
VirtualCameraLookAt = BinarySerializeUtility.ReadInt(reader);
|
||||
VirtualCameraFollowOffset = BinarySerializeUtility.ReadVec3(reader);
|
||||
VirtualCameraLookAtDamping = BinarySerializeUtility.ReadVec3(reader);
|
||||
base.Deserialize(reader);
|
||||
}
|
||||
|
||||
public override void Serialize(BinaryWriter writer)
|
||||
{
|
||||
BinarySerializeUtility.WriteBool(writer, orthographic);
|
||||
BinarySerializeUtility.WriteFloat(writer, fieldOfView);
|
||||
BinarySerializeUtility.WriteFloat(writer, orthographicSize);
|
||||
BinarySerializeUtility.WriteFloat(writer, nearClipPlane);
|
||||
BinarySerializeUtility.WriteFloat(writer, farClipPlane);
|
||||
BinarySerializeUtility.WriteFloat(writer, depth);
|
||||
BinarySerializeUtility.WriteInt(writer, VirtualCameraFollow);
|
||||
BinarySerializeUtility.WriteInt(writer,VirtualCameraLookAt);
|
||||
BinarySerializeUtility.WriteVec3(writer, VirtualCameraFollowOffset);
|
||||
BinarySerializeUtility.WriteVec3(writer, VirtualCameraLookAtDamping);
|
||||
base.Serialize(writer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Scriptable(nameof(MakeCameraObject))]
|
||||
public class CameraObject : ScriptableObject
|
||||
{
|
||||
|
||||
@@ -231,16 +231,26 @@ namespace Demo.Game
|
||||
yield break;
|
||||
}
|
||||
yield return Foo(rootGameObject.ParseFromScriptFile2Expr(rootObject));//ConventionUtility.AvoidFakeStop(rootGameObject.ParseFromScriptFile2Expr(rootObject));
|
||||
static void NDFS(ScriptableObject current)
|
||||
int applyDownCount = 0;
|
||||
void NDFS(ScriptableObject current)
|
||||
{
|
||||
foreach (var child in current.Childs)
|
||||
{
|
||||
NDFS(child);
|
||||
}
|
||||
if (current.IsScriptApply == false)
|
||||
ConventionUtility.StartCoroutine(current.ApplyScript());
|
||||
{
|
||||
applyDownCount++;
|
||||
IEnumerator NDFSFoo()
|
||||
{
|
||||
yield return current.ApplyScript();
|
||||
applyDownCount--;
|
||||
}
|
||||
ConventionUtility.StartCoroutine(NDFSFoo());
|
||||
}
|
||||
}
|
||||
NDFS(rootGameObject);
|
||||
yield return new WaitUntil(() => applyDownCount == 0);
|
||||
float loadRootObjectEndTime = Time.realtimeSinceStartup;
|
||||
float loadRootObjectElapsed = (loadRootObjectEndTime - loadRootObjectStartTime) * 1000f;
|
||||
Debug.Log($"[GameInit] Load Root Object 耗时: {loadRootObjectElapsed:F2} ms", this);
|
||||
|
||||
@@ -3,6 +3,8 @@ using Convention.WindowsUI.Variant;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.InputSystem;
|
||||
|
||||
@@ -16,8 +18,56 @@ namespace Demo.Game
|
||||
|
||||
[Content] public GameController RootGameController;
|
||||
|
||||
public string SourcePath;
|
||||
public HashSet<string> LoadedScriptSet = new();
|
||||
[Setting]public string SourcePath;
|
||||
[Header("GlobalConfig")]
|
||||
public readonly HashSet<string> LoadedScriptSet = new();
|
||||
public readonly Dictionary<int, ScriptableObject> LoadedScriptIndex = new();
|
||||
public readonly Dictionary<ScriptableObject, int> LoadedScriptRIndex = new();
|
||||
private int LoadedScriptCnt = 0;
|
||||
/// <summary>
|
||||
/// 被用于自动生成
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <returns></returns>
|
||||
public int PushLoadedScriptObject(ScriptableObject obj)
|
||||
{
|
||||
while (LoadedScriptIndex.TryAdd(LoadedScriptCnt, obj) == false)
|
||||
LoadedScriptCnt++;
|
||||
LoadedScriptRIndex.Add(obj, LoadedScriptCnt);
|
||||
return LoadedScriptCnt++;
|
||||
}
|
||||
/// <summary>
|
||||
/// 被用于从缓存中生成
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <param name="index"></param>
|
||||
/// <returns></returns>
|
||||
public int PushLoadedScriptObject(ScriptableObject obj, int index)
|
||||
{
|
||||
LoadedScriptIndex.Add(index, obj);
|
||||
LoadedScriptRIndex.Add(obj, index);
|
||||
return index;
|
||||
}
|
||||
/// <summary>
|
||||
/// 通过序列号获得物体
|
||||
/// </summary>
|
||||
/// <param name="index"></param>
|
||||
/// <returns></returns>
|
||||
public ScriptableObject FindWithIndex(int index)
|
||||
{
|
||||
if(index<0)
|
||||
return null;
|
||||
return LoadedScriptIndex[index];
|
||||
}
|
||||
/// <summary>
|
||||
/// 通过物体获得序列号
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <returns>若无法找到将返回-1</returns>
|
||||
public int FindIndex(ScriptableObject obj)
|
||||
{
|
||||
return LoadedScriptRIndex.TryGetValue(obj, out var index) ? index : -1;
|
||||
}
|
||||
|
||||
protected override IEnumerator DoSomethingDuringApplyScript()
|
||||
{
|
||||
|
||||
@@ -36,6 +36,7 @@ namespace Demo.Game
|
||||
{
|
||||
public class ScriptLoadableConfig
|
||||
{
|
||||
public int UID = -1;
|
||||
public Vector3 EnterGameLocalPosition, EnterGameEulerAngles, EnterGameLocalScaling;
|
||||
public bool IsSetObjectDisable;
|
||||
public int UpdatePerFrame;
|
||||
@@ -51,6 +52,7 @@ namespace Demo.Game
|
||||
|
||||
public virtual void Deserialize(BinaryReader reader)
|
||||
{
|
||||
UID = BinarySerializeUtility.ReadInt(reader);
|
||||
EnterGameLocalPosition = BinarySerializeUtility.ReadVec3(reader);
|
||||
EnterGameEulerAngles = BinarySerializeUtility.ReadVec3(reader);
|
||||
EnterGameLocalScaling = BinarySerializeUtility.ReadVec3(reader);
|
||||
@@ -69,6 +71,7 @@ namespace Demo.Game
|
||||
}
|
||||
public virtual void Serialize(BinaryWriter writer)
|
||||
{
|
||||
BinarySerializeUtility.WriteInt(writer, UID);
|
||||
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalPosition);
|
||||
BinarySerializeUtility.WriteVec3(writer, EnterGameEulerAngles);
|
||||
BinarySerializeUtility.WriteVec3(writer, EnterGameLocalScaling);
|
||||
@@ -223,6 +226,7 @@ namespace Demo.Game
|
||||
public ScriptableObject Parent;
|
||||
public readonly List<ScriptableObject> Childs = new();
|
||||
|
||||
private RootObject rootObjectCache = null;
|
||||
/// <summary>
|
||||
/// 获取根脚本对象
|
||||
/// </summary>
|
||||
@@ -230,12 +234,16 @@ namespace Demo.Game
|
||||
[Convention.RScript.Variable.Attr.Method]
|
||||
public RootObject GetRoot()
|
||||
{
|
||||
if (Parent == null)
|
||||
return this as RootObject;
|
||||
if (Parent is RootObject result)
|
||||
return result;
|
||||
else
|
||||
return Parent.GetRoot();
|
||||
if (rootObjectCache == null)
|
||||
{
|
||||
if (Parent == null)
|
||||
rootObjectCache = this as RootObject;
|
||||
if (Parent is RootObject result)
|
||||
rootObjectCache = result;
|
||||
else
|
||||
rootObjectCache = Parent.GetRoot();
|
||||
}
|
||||
return rootObjectCache;
|
||||
}
|
||||
|
||||
|
||||
@@ -334,6 +342,7 @@ namespace Demo.Game
|
||||
|
||||
isEnableScript = true;
|
||||
// 只有RootObject的parent会是空的
|
||||
GetRoot().PushLoadedScriptObject(this);
|
||||
if (parent != null)
|
||||
{
|
||||
MyHierarchyItem = parent.MyHierarchyItem.GetHierarchyItem().CreateSubPropertyItem(1)[0];
|
||||
@@ -819,19 +828,12 @@ namespace Demo.Game
|
||||
}
|
||||
}
|
||||
|
||||
private float UIResizeOnTimelineCount = 0;
|
||||
protected override void UpdateTicks(float currentTime, float deltaTime, TickType tickType)
|
||||
{
|
||||
base.UpdateTicks(currentTime, deltaTime, tickType);
|
||||
// 存在严重的性能开销, 在解决之前将不会允许其快速自动更新
|
||||
if (MyTimelineEntry != null)
|
||||
{
|
||||
if (UIResizeOnTimelineCount > 0.1 || tickType != TickType.Update)
|
||||
{
|
||||
UIResizeOnTimelineCount = 0;
|
||||
MyTimelineItem.ResizeOnTimeline();
|
||||
}
|
||||
UIResizeOnTimelineCount += deltaTime;
|
||||
MyTimelineItem.ResizeOnTimeline();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,12 +55,12 @@ namespace Demo.Game
|
||||
|
||||
public class UpdatementIntConfig : UpdatementConfig<int>
|
||||
{
|
||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<int> positions)
|
||||
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<int> positions)
|
||||
{
|
||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||
}
|
||||
|
||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<int> positions)
|
||||
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<int> positions)
|
||||
{
|
||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||
}
|
||||
@@ -68,12 +68,12 @@ namespace Demo.Game
|
||||
|
||||
public class UpdatementFloatConfig : UpdatementConfig<float>
|
||||
{
|
||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<float> positions)
|
||||
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<float> positions)
|
||||
{
|
||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||
}
|
||||
|
||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<float> positions)
|
||||
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<float> positions)
|
||||
{
|
||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||
}
|
||||
@@ -81,12 +81,12 @@ namespace Demo.Game
|
||||
|
||||
public class UpdatementVec2Config : UpdatementConfig<Vector2>
|
||||
{
|
||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<Vector2> positions)
|
||||
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<Vector2> positions)
|
||||
{
|
||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||
}
|
||||
|
||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<Vector2> positions)
|
||||
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<Vector2> positions)
|
||||
{
|
||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||
}
|
||||
@@ -94,12 +94,12 @@ namespace Demo.Game
|
||||
|
||||
public class UpdatementVec3Config : UpdatementConfig<Vector3>
|
||||
{
|
||||
protected override void DeserializePositions(BinaryReader reader, ref NativeArray<Vector3> positions)
|
||||
protected override sealed void DeserializePositions(BinaryReader reader, ref NativeArray<Vector3> positions)
|
||||
{
|
||||
BinarySerializeUtility.DeserializeNativeArray(reader, ref positions);
|
||||
}
|
||||
|
||||
protected override void SerializePositions(BinaryWriter writer, in NativeArray<Vector3> positions)
|
||||
protected override sealed void SerializePositions(BinaryWriter writer, in NativeArray<Vector3> positions)
|
||||
{
|
||||
BinarySerializeUtility.SerializeNativeArray(writer, positions);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user