feat(NumberSlot): 实现号码槽
This commit is contained in:
76
Assets/Script/Gameplay/Facility/NumberSlotController.cs
Normal file
76
Assets/Script/Gameplay/Facility/NumberSlotController.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Script.Gameplay.Connect;
|
||||
|
||||
namespace Script.Gameplay.Facility
|
||||
{
|
||||
// 号码枚举类型
|
||||
public enum NumberType
|
||||
{
|
||||
Zero,
|
||||
One,
|
||||
Two,
|
||||
Three,
|
||||
Four,
|
||||
Five,
|
||||
// Six,
|
||||
// Seven,
|
||||
// Eight,
|
||||
// Nine
|
||||
}
|
||||
|
||||
// 号码槽
|
||||
public class NumberSlotController : MonoBehaviour, IConnectable, ISignalSender
|
||||
{
|
||||
[Header("号码槽设置")]
|
||||
[SerializeField] private NumberType currentNumber = NumberType.Zero;
|
||||
[SerializeField] private NumberType correctNumber = NumberType.One;
|
||||
|
||||
public List<ConnectionLine> ConnectionLines { get; set; } = new List<ConnectionLine>();
|
||||
|
||||
// 不可编辑,不可交互
|
||||
// 可连接,可发信号
|
||||
|
||||
public void OnGazeEnter() { }
|
||||
public void OnGazeExit() { }
|
||||
public Vector3 GetPosition() => transform.position;
|
||||
public GameObject GetGameObject() => gameObject;
|
||||
public string GetConnectableName() => gameObject.name;
|
||||
|
||||
// 接收信号
|
||||
public void SignalActive(bool active, GameObject sender)
|
||||
{
|
||||
if (active)
|
||||
{
|
||||
SwitchToNextNumber();
|
||||
}
|
||||
}
|
||||
|
||||
// 切换到下一个号码
|
||||
private void SwitchToNextNumber()
|
||||
{
|
||||
currentNumber = (NumberType)(((int)currentNumber + 1) % System.Enum.GetValues(typeof(NumberType)).Length);
|
||||
CheckNumberAndSendSignal();
|
||||
}
|
||||
|
||||
// 检查号码并发信号
|
||||
private void CheckNumberAndSendSignal()
|
||||
{
|
||||
bool isCorrect = currentNumber == correctNumber;
|
||||
SendSignal(isCorrect);
|
||||
}
|
||||
|
||||
// 发出信号
|
||||
public void SendSignal(bool active)
|
||||
{
|
||||
if (ConnectionLines != null)
|
||||
{
|
||||
foreach (var line in ConnectionLines)
|
||||
{
|
||||
line.SignalActive(active, this.gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 301178d89b6b43e0844e3d39aa579442
|
||||
timeCreated: 1760961220
|
Reference in New Issue
Block a user