石头Day2
This commit is contained in:
@@ -5,6 +5,7 @@ using AibisDream.FixSystem;
|
||||
using AibisDream.Framework;
|
||||
using AibisDream.Kit;
|
||||
using DG.Tweening;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AibisDream
|
||||
@@ -13,18 +14,29 @@ namespace AibisDream
|
||||
{
|
||||
#region 索引
|
||||
|
||||
[SerializeField] private GameObject gearPrefab;
|
||||
[SerializeField] private GameObject shaftPrefab;
|
||||
private Shaft[] _shafts;
|
||||
public GameObject gearPrefab;
|
||||
public GameObject shaftPrefab;
|
||||
private Transform _panel;
|
||||
private SpriteRenderer _cover;
|
||||
private Transform _coverStick;
|
||||
private Transform _needle;
|
||||
|
||||
private ShaftGraph _shaftGraph;
|
||||
|
||||
#endregion
|
||||
|
||||
public Vector3 coverUpPos;
|
||||
public Vector3 coverDownPos;
|
||||
|
||||
private ShaftGraph _shaftGraph;
|
||||
public Vector3 panelOpenPos;
|
||||
public Vector3 panelClosePos;
|
||||
|
||||
public Vector3 needleEmptyPos;
|
||||
public Vector3[] needlePosArr;
|
||||
public float needleDuration;
|
||||
|
||||
private bool _isTargetReached;
|
||||
private bool _isDiscReady;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
@@ -36,14 +48,20 @@ namespace AibisDream
|
||||
public void Init()
|
||||
{
|
||||
FixSystemCenter.SystemDic.Register(this);
|
||||
_shafts = GetComponentsInChildren<Shaft>();
|
||||
_cover = transform.Find("Cover").GetComponent<SpriteRenderer>();
|
||||
_coverStick = transform.Find("Cover Stick");
|
||||
_panel = transform.Find("Empty Shafts Panel");
|
||||
_needle = transform.Find("Needle");
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_shaftGraph = new ShaftGraph(_shafts);
|
||||
_shaftGraph?.Clear();
|
||||
var shafts = transform.Find("Shafts").GetComponentsInChildren<Shaft>();
|
||||
var panelShafts = _panel.GetComponentsInChildren<Shaft>();
|
||||
_shaftGraph = new ShaftGraph(shafts, panelShafts);
|
||||
|
||||
_panel.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -70,25 +88,6 @@ namespace AibisDream
|
||||
return _shaftGraph.CheckGearSuitable(sourceShaft, gearRadius);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成齿轮
|
||||
/// </summary>
|
||||
/// <param name="pos">位置</param>
|
||||
/// <param name="radius">半径</param>
|
||||
/// <param name="sprite">齿轮图片</param>
|
||||
/// <param name="isBroken">齿轮已损坏</param>
|
||||
/// <returns>齿轮Obj</returns>
|
||||
public GameObject InitGear(Vector3 pos, float radius, Sprite sprite, bool isBroken = false)
|
||||
{
|
||||
GameObject gearObj = Instantiate(gearPrefab, pos, Quaternion.identity);
|
||||
gearObj.transform.parent = transform.Find("Gears").transform;
|
||||
Gear gear = gearObj.GetComponent<Gear>();
|
||||
gear.radius = radius;
|
||||
gear.gearSprite = sprite;
|
||||
gear.isBroken = isBroken;
|
||||
return gearObj;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 某个轴上齿轮发生变化时更新临接关系
|
||||
/// </summary>
|
||||
@@ -98,10 +97,32 @@ namespace AibisDream
|
||||
_shaftGraph?.ChangeVertex(shaftId);
|
||||
}
|
||||
|
||||
public void Succeed()
|
||||
#region 胜利状况判断
|
||||
|
||||
public void CheckGearSystemState()
|
||||
{
|
||||
Debug.Log("达成目标");
|
||||
DialogController.Instance.StartDialogNode("齿轮系统状态变化");
|
||||
}
|
||||
|
||||
public void ReachTargetSpeed()
|
||||
{
|
||||
if (!_isTargetReached)
|
||||
{
|
||||
DialogController.Instance?.SetVariable("$speedReached", true);
|
||||
_isTargetReached = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetTargetState()
|
||||
{
|
||||
if (_isTargetReached)
|
||||
{
|
||||
DialogController.Instance?.SetVariable("$speedReached", false);
|
||||
_isTargetReached = false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public IEnumerator OpenCover()
|
||||
{
|
||||
@@ -125,6 +146,33 @@ namespace AibisDream
|
||||
yield return _coverStick.DORotate(new Vector3(0, 0, 0), 1.5f).WaitForCompletion();
|
||||
}
|
||||
|
||||
public IEnumerator OpenGearPanel()
|
||||
{
|
||||
_panel.gameObject.SetActive(true);
|
||||
yield return _panel.DOLocalMove(panelOpenPos, 1f).WaitForCompletion();
|
||||
}
|
||||
|
||||
public IEnumerator CloseGearPanel()
|
||||
{
|
||||
yield return _panel.DOLocalMove(panelClosePos, 1f).WaitForCompletion();
|
||||
_panel.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public IEnumerator MoveNeedle(int discIdx)
|
||||
{
|
||||
Vector3 target;
|
||||
if (discIdx > needlePosArr.Length || discIdx <= 0)
|
||||
{
|
||||
target = needleEmptyPos;
|
||||
}
|
||||
else
|
||||
{
|
||||
target = needlePosArr[discIdx - 1];
|
||||
}
|
||||
|
||||
yield return _needle.DORotate(target, needleDuration).WaitForCompletion();
|
||||
}
|
||||
|
||||
#region 数据保存与加载
|
||||
|
||||
public static string DataPath = Application.streamingAssetsPath + "/LevelData/GearSystem/";
|
||||
@@ -164,23 +212,51 @@ namespace AibisDream
|
||||
private void LoadByData(GearSystemData gearSystemData)
|
||||
{
|
||||
// 先清除
|
||||
var shaftRoot = transform.Find("Shafts");
|
||||
var shaftsObj = shaftRoot.GetComponentsInChildren<Shaft>();
|
||||
var shaftsObj = GetComponentsInChildren<Shaft>(true);
|
||||
foreach (var oldShaft in shaftsObj)
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
DestroyImmediate(oldShaft.gameObject);
|
||||
if (!EditorApplication.isPlaying)
|
||||
{
|
||||
DestroyImmediate(oldShaft.gameObject);
|
||||
}
|
||||
else
|
||||
{
|
||||
Destroy(oldShaft.gameObject);
|
||||
}
|
||||
#else
|
||||
Destory(oldShaft.gameObject);
|
||||
Destroy(oldShaft.gameObject);
|
||||
#endif
|
||||
}
|
||||
|
||||
// 再添加
|
||||
foreach (var shaftData in gearSystemData.shaftLevelDataArray)
|
||||
var shaftRoot = transform.Find("Shafts");
|
||||
var shafts = new Shaft[gearSystemData.shaftLevelDataArray.Length];
|
||||
for (int i = 0; i < gearSystemData.shaftLevelDataArray.Length; i++)
|
||||
{
|
||||
var newShaft = Instantiate(shaftPrefab, shaftRoot).GetComponent<Shaft>();
|
||||
newShaft.Load(shaftData);
|
||||
newShaft.Load(gearSystemData.shaftLevelDataArray[i]);
|
||||
shafts[i] = newShaft;
|
||||
}
|
||||
|
||||
var panelShaftRoot = transform.Find("Empty Shafts Panel");
|
||||
var panelShafts = new Shaft[gearSystemData.panelShaftArray.Length];
|
||||
for (int i = 0; i < gearSystemData.panelShaftArray.Length; i++)
|
||||
{
|
||||
var newShaft = Instantiate(shaftPrefab, panelShaftRoot).GetComponent<Shaft>();
|
||||
newShaft.Load(gearSystemData.panelShaftArray[i]);
|
||||
panelShafts[i] = newShaft;
|
||||
}
|
||||
|
||||
_cover = transform.Find("Cover").GetComponent<SpriteRenderer>();
|
||||
_coverStick = transform.Find("Cover Stick");
|
||||
_panel = transform.Find("Empty Shafts Panel");
|
||||
|
||||
#if UNITY_EDITOR
|
||||
if (!EditorApplication.isPlaying) return;
|
||||
#endif
|
||||
_shaftGraph?.Clear();
|
||||
_shaftGraph = new ShaftGraph(shafts, panelShafts);
|
||||
}
|
||||
|
||||
public override void Save()
|
||||
@@ -197,17 +273,19 @@ namespace AibisDream
|
||||
|
||||
private void SaveByKey(string key)
|
||||
{
|
||||
var shaftsObj = transform.Find("Shafts").GetComponentsInChildren<Shaft>();
|
||||
var shaftDataArray = new ShaftLevelData[shaftsObj.Length];
|
||||
|
||||
for (int i = 0; i < shaftDataArray.Length; i++)
|
||||
{
|
||||
shaftDataArray[i] = shaftsObj[i].Save();
|
||||
}
|
||||
var shaftDataArray = transform.Find("Shafts")
|
||||
.GetComponentsInChildren<Shaft>()
|
||||
.Select(shaft => shaft.Save())
|
||||
.ToArray();
|
||||
var panelShaftArray = transform.Find("Empty Shafts Panel")
|
||||
.GetComponentsInChildren<Shaft>()
|
||||
.Select(shaft => shaft.Save())
|
||||
.ToArray();
|
||||
|
||||
var data = new GearSystemData
|
||||
{
|
||||
shaftLevelDataArray = shaftDataArray
|
||||
shaftLevelDataArray = shaftDataArray,
|
||||
panelShaftArray = panelShaftArray
|
||||
};
|
||||
|
||||
ConfigUtil.Instance.SaveConfig(data, DataPath + key);
|
||||
@@ -226,5 +304,6 @@ namespace AibisDream
|
||||
public struct GearSystemData
|
||||
{
|
||||
public ShaftLevelData[] shaftLevelDataArray;
|
||||
public ShaftLevelData[] panelShaftArray;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user