石头串通

This commit is contained in:
2025-01-24 23:21:54 +08:00
parent 499c85beea
commit 6fd85e6bca
36 changed files with 1903 additions and 1857 deletions
+72 -13
View File
@@ -21,7 +21,7 @@ namespace AibisDream
private SpriteRenderer _cover;
private Transform _coverStick;
private Transform _needle;
private ShaftGraph _shaftGraph;
#endregion
@@ -35,9 +35,10 @@ namespace AibisDream
public Vector3 needleEmptyPos;
public Vector3[] needlePosArr;
public float needleDuration;
private bool _isTargetReached;
private bool _isDiscReady;
public bool isAvailable;
public float initSpeed = 1;
@@ -55,23 +56,37 @@ namespace AibisDream
_coverStick = transform.Find("Cover Stick");
_panel = transform.Find("Empty Shafts Panel");
_needle = transform.Find("Needle");
// 注册相机
var virtualCam = transform.Find("Gear Camera").GetComponent<ICinemachineCamera>();
CameraKit.Instance.RegisterCamera(CameraEnum.Gear, virtualCam);
}
private void Start()
{
InitShaftGraph();
LinkEngineSpeed();
}
private void InitShaftGraph()
{
var shafts = transform.Find("Shafts").GetComponentsInChildren<Shaft>();
var panelShafts = _panel.GetComponentsInChildren<Shaft>();
_shaftGraph = new ShaftGraph(shafts, panelShafts);
}
private void LinkEngineSpeed()
{
var engine = FixSystemCenter.SystemDic.Get<EngineSystem>();
_shaftGraph.StartRotate(initSpeed);
engine.updateSpeedEvent.AddListener(_shaftGraph.Accelerate);
}
_panel.gameObject.SetActive(false);
private void UnlinkEngineSpeed()
{
var engine = FixSystemCenter.SystemDic.Get<EngineSystem>();
_shaftGraph.StartRotate(initSpeed);
engine.updateSpeedEvent.RemoveListener(_shaftGraph.Accelerate);
}
private void OnDestroy()
@@ -112,6 +127,18 @@ namespace AibisDream
_shaftGraph?.ChangeVertex(shaftId);
}
/// <summary>
/// 按轴名称弹出齿轮
/// </summary>
/// <param name="shaftName">轴名称</param>
/// <returns></returns>
public void PopupGearByShaftName(string shaftName)
{
var shafts = transform.Find("Shafts").GetComponentsInChildren<Shaft>();
var target = Array.Find(shafts, shaft => shaft.gameObject.name == shaftName);
target.PopupGear();
}
#region
public void CheckGearSystemState()
@@ -124,9 +151,13 @@ namespace AibisDream
{
AudioManager.PauseLoop3Audio();
}
DialogController.Instance.StartDialogNode("齿轮系统状态变化");
if (_shaftGraph.AllRunning())
{
DialogController.Instance?.StartDialogNode("AllGearsRunning");
}
}
public void ReachTargetSpeed()
{
if (!_isTargetReached)
@@ -157,10 +188,12 @@ namespace AibisDream
sq.Join(_cover.transform.DOLocalMove(coverUpPos, 1.5f));
sq.Join(_cover.DOFade(0, 1.5f));
yield return sq.WaitForCompletion();
isAvailable = true;
}
public IEnumerator CloseCover()
{
isAvailable = false;
AudioManager.PauseLoopAudio();
AudioManager.PauseLoop2Audio();
AudioManager.PauseLoop3Audio();
@@ -184,7 +217,7 @@ namespace AibisDream
yield return _panel.DOLocalMove(panelClosePos, 1f).WaitForCompletion();
_panel.gameObject.SetActive(false);
}
public IEnumerator MoveNeedle(int discIdx)
{
Vector3 target;
@@ -196,7 +229,7 @@ namespace AibisDream
{
target = needlePosArr[discIdx - 1];
}
yield return _needle.DORotate(target, needleDuration).WaitForCompletion();
}
@@ -282,7 +315,9 @@ namespace AibisDream
#if UNITY_EDITOR
if (!EditorApplication.isPlaying) return;
#endif
UnlinkEngineSpeed();
_shaftGraph = new ShaftGraph(shafts, panelShafts);
LinkEngineSpeed();
}
public override void SaveLevel()
@@ -290,11 +325,6 @@ namespace AibisDream
if (string.IsNullOrEmpty(CurDataKey)) return;
SaveByKey(CurDataKey);
if (!_keyOptions.Contains(CurDataKey))
{
// 重新读取key
_keyOptions = ConfigUtil.Instance.GetFileNames(DataPath);
}
}
private void SaveByKey(string key)
@@ -323,6 +353,35 @@ namespace AibisDream
Instantiate(shaftPrefab, shaftRoot);
}
public void LoadPanelShaft(string dataKey)
{
// 查询
if (!ConfigUtil.Instance.TryLoadConfig<GearSystemData>(DataPath + dataKey, out var data))
{
Debug.Log("没有找到配置项");
return;
}
// 删除面板上的齿轮
var panelShafts = transform.Find("Empty Shafts Panel").GetComponentsInChildren<Shaft>();
foreach (var shaftItem in panelShafts)
{
Destroy(shaftItem);
}
// 读取数据
var panelShaftRoot = transform.Find("Empty Shafts Panel");
var newPanelShafts = new Shaft[data.panelShaftArray.Length];
for (int i = 0; i < data.panelShaftArray.Length; i++)
{
var newShaft = Instantiate(shaftPrefab, panelShaftRoot).GetComponent<Shaft>();
newShaft.Load(data.panelShaftArray[i]);
newPanelShafts[i] = newShaft;
}
_shaftGraph.UpdatePanel(newPanelShafts);
}
#endregion
}