using AibisDream.Framework; using Framework.Core; using UnityEngine; namespace AibisDream { public class GearController : MonoBehaviour, ISystem { #region 索引 private GameObject _gearPrefab; [FindComponentsInChildren] private Shaft[] _shafts; [FindComponentsInChildren] private Gear[] _gears; #endregion private ShaftGraph _shaftGraph; private GearSysTemLevelData _levelData; public RunType runType; private void Awake() { Init(); } private void OnEnable() { Enable(); } private void OnDisable() { Disable(); } #region 生命周期管理 public void Init() { this.FindComponents(); _gearPrefab = Resources.Load("Prefabs/Gear System/Gear"); } public void Enable() { if (runType == RunType.Editor) { } _shaftGraph = new ShaftGraph(_shafts); } public void Disable() { _shaftGraph = null; } public void Deinit() { throw new System.NotImplementedException(); } #endregion /// /// 判断吸附位置 /// /// 齿轮当前位置 /// 齿轮半径 /// 能够被吸附的轴 public Shaft CheckClosestShaft(Vector3 pos, float gearRadius) { return _shaftGraph.QuerySnapShaft(pos, gearRadius); } /// /// 生成齿轮 /// /// 位置 /// 齿轮数据 /// 速度 /// 齿轮Obj public GameObject InitGear(Vector3 pos, GearModel gearModel, float speed) { GameObject gear = Instantiate(_gearPrefab, pos, Quaternion.identity); gear.transform.parent = transform.GetChild(0).transform; gear.GetComponent().Data = gearModel; return gear; } /// /// 某个轴上齿轮发生变化时更新临接关系 /// /// 轴ID public void ChangeGraphVertex(int shaftId) { _shaftGraph?.ChangeVertex(shaftId); } public void Succeed() { Debug.Log("达成目标"); } /// /// 加载关卡配置 /// public void LoadLevelData() { } /// /// 保存关卡配置 /// public void SaveLevelData() { } } }