可配置引擎

This commit is contained in:
2024-11-30 08:36:04 +08:00
parent 71ec5da49a
commit 57ed90a3c3
12 changed files with 131 additions and 44 deletions
+75 -18
View File
@@ -1,26 +1,22 @@
using System;
using System.Linq;
using AibisDream.FixSystem;
using AibisDream.Framework;
using AibisDream.Kit;
using AibisDream.Utility;
using UnityEngine;
namespace AibisDream
{
public class EngineSystem : MonoBehaviour
public class EngineSystem : SystemHasData
{
[SerializeField] private float oilDownRatio;
[SerializeField] private float oilUpRatio;
[SerializeField] private float acceleratedSpeed;
[SerializeField] private float resistance;
[SerializeField] private float airMaxRatio;
[SerializeField] private float airMinRatio;
[SerializeField] private float baseAirMax;
[SerializeField] public int maxLevel;
[SerializeField] public float invalidTime;
public static string DataPath = Application.streamingAssetsPath + "/LevelData/EngineSystem/";
[Header("系统配置")] [SerializeField] public EngineConfig config;
[Header("系统数据")] [SerializeField] private EngineData engineData;
private bool IsValid => engineData.isValid.Value;
[Header("系统数据")] [SerializeField] private EngineData engineData;
public event Action<EngineData> UpdateDashboard;
private void Awake()
@@ -30,7 +26,7 @@ namespace AibisDream
private void OnEnable()
{
engineData = new EngineData(invalidTime);
engineData = new EngineData(config.invalidTime);
}
private void Update()
@@ -44,10 +40,10 @@ namespace AibisDream
private void DataAutoChange()
{
// 自然减速
engineData.OilChange(-oilDownRatio);
engineData.CalcAir(airMaxRatio, airMinRatio, baseAirMax);
engineData.OilChange(-config.oilDownRatio);
engineData.CalcAir(config.airMaxRatio, config.airMinRatio, config.baseAirMax);
// 推算速度
engineData.CalcSpeed(acceleratedSpeed, resistance);
engineData.CalcSpeed(config.acceleratedSpeed, config.resistance);
}
/// <summary>
@@ -57,15 +53,76 @@ namespace AibisDream
{
if (IsValid)
{
engineData.OilChange(oilUpRatio);
engineData.OilChange(config.oilUpRatio);
}
// 失效期无法加油门
}
public void UpdateAirLevel(int curLevel)
{
engineData.UpdateAirLevel(curLevel, maxLevel);
engineData.UpdateAirLevel(curLevel, config.maxLevel);
}
#region
private string[] _keyOptions;
public override string CurDataKey { get; set; }
public override string[] GetDataKeyOptions()
{
return _keyOptions ??= ConfigUtil.Instance.GetFileNames(DataPath);
}
public override void Load()
{
if (string.IsNullOrEmpty(CurDataKey))
{
Debug.Log("配置项名称为空");
return;
}
if (!ConfigUtil.Instance.TryLoadConfig<EngineConfig>(DataPath + CurDataKey,
out var data))
{
Debug.Log("没有找到配置项");
return;
}
config = data;
}
public override void Save()
{
if (string.IsNullOrEmpty(CurDataKey))
{
Debug.Log("名称不为空");
return;
}
ConfigUtil.Instance.SaveConfig(config, DataPath + CurDataKey);
if (!_keyOptions.Contains(CurDataKey))
{
// 重新读取key
_keyOptions = ConfigUtil.Instance.GetFileNames(DataPath);
}
}
#endregion
}
[Serializable]
public struct EngineConfig
{
public float oilDownRatio;
public float oilUpRatio;
public float acceleratedSpeed;
public float resistance;
public float airMaxRatio;
public float airMinRatio;
public float baseAirMax;
public int maxLevel;
public float invalidTime;
}
[Serializable]