Restructured for new direction.

This commit is contained in:
2026-05-12 12:01:09 +01:00
parent 0439b6c1d2
commit c203f836b1
1134 changed files with 125569 additions and 213519 deletions

View File

@@ -0,0 +1,182 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Effects;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Levels.Data;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Framework.Managers.UI;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BriarQueen.Game.Puzzles.ChapterOne.AshwickHallow.GatePuzzle
{
public enum StreetlightGlowState
{
Off = 0,
Red = 1,
Orange = 2,
Green = 3,
Blue = 4
}
public class StreetlightGlow : BaseItem
{
[Header("Puzzle")]
[SerializeField]
private AshwickMarketGatePuzzle _puzzle;
[Header("Light")]
[SerializeField]
private UILightGlow _light;
[SerializeField]
private float _changeDuration = 0.25f;
[SerializeField]
private float _activeIntensity = 1.5f;
[Header("Colours")]
[SerializeField]
private Color _red = new(0.872f, 0.08f, 0.1704798f, 1f);
[SerializeField]
private Color _orange = new(0.8666667f, 0.5109999f, 0f, 1f);
[SerializeField]
private Color _green = new(0.12f, 0.865f, 0.1f, 1f);
[SerializeField]
private Color _blue = new(0.1490196f, 0.6001954f, 1f, 1f);
private bool _isChanging;
private bool _isLocked;
private StreetlightGlowState _currentState = StreetlightGlowState.Off;
public StreetlightGlowState CurrentState => _currentState;
public override string InteractableName
{
get
{
if (_isLocked)
{
return string.Empty;
}
return _currentState == StreetlightGlowState.Off
? "Turn On"
: "Switch Colour";
}
}
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Interact;
public void Initialize(AshwickMarketGatePuzzle puzzle)
{
if (_puzzle == null)
{
_puzzle = puzzle;
}
SetState(_currentState, false).Forget();
}
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
if (_isLocked || _isChanging)
{
return;
}
if (!CheckEmptyHands())
{
return;
}
await CycleNext();
if (_puzzle != null)
{
await _puzzle.EvaluateCompletion();
}
}
public async UniTask SetState(StreetlightGlowState state, bool animate)
{
_currentState = state;
if (_light == null)
{
return;
}
var targetColor = GetColorForState(state);
var targetIntensity = state == StreetlightGlowState.Off ? 0f : _activeIntensity;
if (!animate)
{
_light.SetLightColor(targetColor);
_light.SetIntensity(targetIntensity);
return;
}
_isChanging = true;
try
{
await _light.TweenTo(targetColor, targetIntensity, _changeDuration);
}
finally
{
_isChanging = false;
}
}
public void Lock()
{
_isLocked = true;
}
public void Unlock()
{
_isLocked = false;
}
public Color GetCurrentColor()
{
return GetColorForState(_currentState);
}
private UniTask CycleNext()
{
var nextState = _currentState switch
{
StreetlightGlowState.Off => StreetlightGlowState.Red,
StreetlightGlowState.Red => StreetlightGlowState.Green,
StreetlightGlowState.Green => StreetlightGlowState.Orange,
StreetlightGlowState.Orange => StreetlightGlowState.Blue,
StreetlightGlowState.Blue => StreetlightGlowState.Off,
_ => StreetlightGlowState.Off
};
return SetState(nextState, true);
}
private Color GetColorForState(StreetlightGlowState state)
{
return state switch
{
StreetlightGlowState.Red => _red,
StreetlightGlowState.Orange => _orange,
StreetlightGlowState.Green => _green,
StreetlightGlowState.Blue => _blue,
_ => Color.black
};
}
}
}