First commit for private source control. Older commits available on Github.

This commit is contained in:
2026-03-26 12:52:52 +00:00
parent a04c602626
commit 2d449c4a17
2176 changed files with 408185 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 026072510e794241bdaa169bba452696
timeCreated: 1773589962

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: be01b5741bc94861a9b41d8c8ce3b5ee
timeCreated: 1773590011

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ae64d437e6594bf58b5512ee5ffca402
timeCreated: 1773590011

View File

@@ -0,0 +1,45 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
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;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Pumphouse
{
public class PumpHouseWaterValve : BaseItem
{
public override string InteractableName => "Water Valve";
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Interact;
public override UniTask OnInteract(ItemDataSo item = null)
{
if (!CheckEmptyHands())
return UniTask.CompletedTask;
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return UniTask.CompletedTask;
}
if (SaveManager.GetLevelFlag(LevelFlag.PumpWaterRestored))
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(LevelInteractKey.WaterValve)));
return UniTask.CompletedTask;
}
if (!SaveManager.GetLevelFlag(LevelFlag.FountainVinesCut))
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(LevelInteractKey.ClearVinesOutside)));
return UniTask.CompletedTask;
}
// TODO : Play Water SFX
SaveManager.SetLevelFlag(LevelFlag.PumpWaterRestored, true);
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7ffe97b80fed45bbb7152752c4f10685
timeCreated: 1770991451

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3825afbb1ee941b1af18781d8f1311fa
timeCreated: 1773590034

View File

@@ -0,0 +1,44 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
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;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Village
{
public class ChainLock : BaseItem
{
public override string InteractableName => "Locked Chain";
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (!CheckEmptyHands())
return;
if (item == null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(LevelInteractKey.PumphouseChain)));
return;
}
if (item.UniqueID != ItemIDs.Pickups[ItemKey.PumphouseKey])
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(LevelInteractKey.UnlockedPumphouse)));
await Remove();
}
protected override UniTask OnRemoved()
{
SaveManager.SetLevelFlag(LevelFlag.PumpHouseOpened, true);
PlayerManager.RemoveItem(ItemIDs.Pickups[ItemKey.PumphouseKey]);
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bf2e55b12a3040deb4e54465336fc989
timeCreated: 1770985414

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 45144a83888f401e8d282181328521fb
timeCreated: 1773953887

View File

@@ -0,0 +1,56 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Levels.Data;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Framework.Managers.UI;
using BriarQueen.Game.Levels.ChapterOne.VillageStreet;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BriarQueen.Game.Items.Environment.ChapterOne.VillageStreet
{
public class StreetVines : BaseItem
{
[SerializeField]
private Street _owner;
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (_owner == null)
{
Debug.LogWarning("StreetVines is missing its Street owner.", this);
return;
}
if (!CanUseKnife())
{
PublishFailureMessage();
return;
}
EventCoordinator.Publish(new DisplayInteractEvent(
InteractEventIDs.Get(EnvironmentInteractKey.UsingKnife)));
await _owner.CutVines();
}
private bool CanUseKnife()
{
if (SettingsService.Game.AutoUseTools)
return PlayerManager.HasAccessToTool(ToolID.Knife);
return PlayerManager.GetEquippedTool() == ToolID.Knife;
}
private void PublishFailureMessage()
{
var message = SettingsService.Game.AutoUseTools
? InteractEventIDs.Get(LevelInteractKey.CutVines)
: InteractEventIDs.Get(ItemInteractKey.WrongTool);
EventCoordinator.Publish(new DisplayInteractEvent(message));
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 32a79fbd751c4216b83680bbc425cfa7
timeCreated: 1773954077

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d5cf35e464ec407c81e5d29b6bf5c713
timeCreated: 1773590078

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8c3efb5408364c23bc9f0256bb727fb5
timeCreated: 1773609093

View File

@@ -0,0 +1,20 @@
using BriarQueen.Data.Identifiers;
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;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Workshop.Downstairs
{
public class WorkshopBrokenLantern : BaseItem
{
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override UniTask OnInteract(ItemDataSo item = null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.BrokenLantern)));
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1004a82a9b7f487180b0fcf4978a4446
timeCreated: 1773609258

View File

@@ -0,0 +1,45 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Levels.Data;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Framework.Managers.UI;
using BriarQueen.Game.Levels.ChapterOne.Workshop;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Workshop.Downstairs
{
public class WorkshopDownstairsLight : BaseItem
{
[SerializeField]
private WorkshopDownstairs _workshopDownstairs;
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Interact;
public override string InteractableName
{
get
{
if (_workshopDownstairs.LightOn)
return "Turn off Light";
return "Turn on Light";
}
}
public override UniTask OnInteract(ItemDataSo item = null)
{
if(!CheckEmptyHands())
return UniTask.CompletedTask;
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return UniTask.CompletedTask;
}
_workshopDownstairs.ToggleLightSwitch();
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5c5889af77b0491bb18818491222520b
timeCreated: 1773609093

View File

@@ -0,0 +1,20 @@
using BriarQueen.Data.Identifiers;
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;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Workshop.Downstairs
{
public class WorkshopWriting : BaseItem
{
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override UniTask OnInteract(ItemDataSo item = null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.WorkshopWriting)));
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f8ae950ec2f6412f9a05f9eb22a81004
timeCreated: 1773681035

View File

@@ -0,0 +1,74 @@
using System;
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
using BriarQueen.Framework.Events.Gameplay;
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.Items.Environment.ChapterOne.Workshop
{
public class GrindingStone : BaseItem
{
[SerializeField]
private Levels.ChapterOne.Workshop.Workshop _workshop;
public override string InteractableName => "Grinding Stone";
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Interact;
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (!CheckEmptyHands())
return;
if (!SaveManager.GetLevelFlag(LevelFlag.WorkshopGrindstoneRepaired))
{
if (item == null)
{
EventCoordinator.Publish(
new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.SomethingMissing)));
return;
}
if (item.UniqueID != ItemIDs.Get(ItemKey.GrindstoneAxlePin))
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
await _workshop.SetWoodenPin();
return;
}
if (item == null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.UseGrindstone)));
return;
}
if (item.UniqueID != ItemIDs.Get(ItemKey.RustedKnife))
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
// TODO - Animations, SFX, etc
EventCoordinator.Publish(new FadeEvent(false, 0.6f));
await UniTask.Delay(TimeSpan.FromSeconds(1.2f));
AudioManager.Play(AudioNameIdentifiers.Get(SFXKey.SharpenKnife));
EventCoordinator.Publish(new FadeEvent(true, 0.6f));
await UniTask.Delay(TimeSpan.FromSeconds(0.8f));
PlayerManager.UnlockTool(ToolID.Knife);
TutorialService.DisplayTutorial(TutorialPopupID.Tools);
PlayerManager.RemoveItem(ItemIDs.Get(ItemKey.RustedKnife));
EventCoordinator.Publish(new SelectedItemChangedEvent(null));
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7af3243d1b3240a5bb86ba7cd0b2e9b8
timeCreated: 1771003747

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 09d6091451f64822a55575f3ab2b6b68
timeCreated: 1773590204

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b57d4daa04964b28b6c24a1e41fb4d6a
timeCreated: 1773590204

View File

@@ -0,0 +1,40 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Levels.Data;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Game.Levels.ChapterOne.Workshop.Upstairs;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Workshop.Upstairs.Bag
{
public class WorkshopBagBook : BaseItem
{
[Header("Internal")]
[SerializeField]
private WorkshopBag _bag;
public override string InteractableName => "Damaged Book";
public override async UniTask OnInteract(ItemDataSo item = null)
{
if(!CheckEmptyHands())
return;
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.WorkshopBookDisintegrating)));
await Remove();
}
protected override UniTask OnRemoved()
{
_bag.RemoveBook();
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a482fd71d48d4edaaceec7a7038a72a2
timeCreated: 1773496524

View File

@@ -0,0 +1,48 @@
using System;
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Levels.Data;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Game.Levels.ChapterOne.Workshop.Upstairs;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BriarQueen.Game.Items.Environment.ChapterOne.Workshop.Upstairs.Bag
{
public class WorkshopBagHole : BaseItem
{
[Header("Workshop Bag")]
[SerializeField]
private WorkshopBag _workshopBag;
public override string InteractableName => "Dig";
public override async UniTask OnInteract(ItemDataSo item = null)
{
if(!CheckEmptyHands())
return;
if (SaveManager.GetLevelFlag(LevelFlag.WorkshopBagHoleDug))
{
EventCoordinator.Publish(new DisplayInteractEvent(
InteractEventIDs.Get(EnvironmentInteractKey.WorkshopBagNoItems)));
return;
}
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
EventCoordinator.Publish(new FadeEvent(false, 1f));
await UniTask.Delay(TimeSpan.FromSeconds(1));
await _workshopBag.DigHole();
await UniTask.Delay(TimeSpan.FromSeconds(1));
EventCoordinator.Publish(new FadeEvent(true, 1f));
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d8e8a954a6d04904b15e4e1b50db8615
timeCreated: 1773494920

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 44d1ad2d59094966b83912a68097b451
timeCreated: 1773590165

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bb142f5c855c46e8a7e406646e5a7b02
timeCreated: 1773507259

View File

@@ -0,0 +1,55 @@
using BriarQueen.Framework.Coordinators.Events;
using BriarQueen.Framework.Events.Input;
using BriarQueen.Framework.Managers.Interaction;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using VContainer;
namespace BriarQueen.Game.Items.Environment.General.Book
{
public class BookInterface : MonoBehaviour
{
[SerializeField]
private CanvasGroup _canvasGroup;
[SerializeField]
private GraphicRaycaster _graphicRaycaster;
private BookTrigger _bookTrigger;
private EventCoordinator _eventCoordinator;
private InteractManager _interactManager;
internal CanvasGroup CanvasGroup => _canvasGroup;
private void Start()
{
_interactManager.SetExclusiveRaycaster(_graphicRaycaster);
}
private void OnDestroy()
{
_eventCoordinator.Unsubscribe<OnRightClickEvent>(OnRightClickPressed);
_interactManager.ClearExclusiveRaycaster();
}
[Inject]
public void Construct(EventCoordinator eventCoordinator, InteractManager interactManager)
{
_eventCoordinator = eventCoordinator;
_interactManager = interactManager;
}
public void Initialise(BookTrigger trigger)
{
_bookTrigger = trigger;
_eventCoordinator.Subscribe<OnRightClickEvent>(OnRightClickPressed);
}
private void OnRightClickPressed(OnRightClickEvent e)
{
_bookTrigger.CloseBookInterface().Forget();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a73c3f5588834da2a26a77de99f59e3c
timeCreated: 1773508324

View File

@@ -0,0 +1,147 @@
using System;
using System.Threading;
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Events.Save;
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 PrimeTween;
using UnityEngine;
namespace BriarQueen.Game.Items.Environment.General.Book
{
public class BookTrigger : BaseItem
{
[Header("References")]
[SerializeField]
private AssetItemKey _bookAssetID;
[SerializeField]
private BookEntryID _bookEntryID;
[Header("Book Interface")]
[SerializeField]
private BookInterface _bookInterface;
private CancellationTokenSource _displayCts;
private Sequence _displaySequence;
public override string InteractableName => "Worn Book";
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
if (!CheckEmptyHands())
return;
await InstantiateBookInterface();
}
private async UniTask InstantiateBookInterface()
{
Debug.Log($"Instantiating {_bookAssetID}");
if (!AssetRegistry.TryGetReference(AssetKeyIdentifiers.Get(_bookAssetID), out var assetReference) ||
assetReference == null)
return;
var bookObj = await AddressableManager.InstantiateAsync(assetReference);
if (bookObj == null) return;
_bookInterface = bookObj.GetComponent<BookInterface>();
if (_bookInterface == null) return;
_bookInterface.CanvasGroup.alpha = 0f;
_bookInterface.CanvasGroup.blocksRaycasts = false;
_bookInterface.CanvasGroup.interactable = false;
_bookInterface.Initialise(this);
Debug.Log($"Instantiated {_bookAssetID}");
CancelTweenIfRunning();
_displayCts = new CancellationTokenSource();
_displaySequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.Alpha(_bookInterface.CanvasGroup, new TweenSettings<float>
{
endValue = 1f,
settings = new TweenSettings { duration = 0.8f }
}));
try
{
await _displaySequence.ToUniTask(cancellationToken: _displayCts.Token);
}
catch (OperationCanceledException)
{
}
_bookInterface.CanvasGroup.blocksRaycasts = true;
_bookInterface.CanvasGroup.interactable = true;
ShowTutorialIfNeeded();
UnlockCodexEntry();
}
private void ShowTutorialIfNeeded()
{
TutorialService.DisplayTutorial(TutorialPopupID.ExitItems);
}
private void UnlockCodexEntry()
{
PlayerManager.UnlockCodexEntry(CodexEntryIDs.Get(_bookEntryID));
}
public async UniTask CloseBookInterface()
{
if (_bookInterface == null) return;
CancelTweenIfRunning();
_displayCts = new CancellationTokenSource();
_displaySequence = Sequence.Create(useUnscaledTime: true)
.Group(Tween.Alpha(_bookInterface.CanvasGroup, new TweenSettings<float>
{
startValue = _bookInterface.CanvasGroup.alpha,
endValue = 0f,
settings = new TweenSettings { duration = 0.6f }
}));
try
{
await _displaySequence.ToUniTask(cancellationToken: _displayCts.Token);
}
catch (OperationCanceledException)
{
}
await DestructionService.Destroy(_bookInterface.gameObject);
_bookInterface = null;
}
private void CancelTweenIfRunning()
{
if (_displaySequence.isAlive) _displaySequence.Complete();
DisposeCts();
}
private void DisposeCts()
{
if (_displayCts == null) return;
_displayCts.Cancel();
_displayCts.Dispose();
_displayCts = null;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ca523ca014894287805fea5daba9276c
timeCreated: 1773507259

View File

@@ -0,0 +1,33 @@
using BriarQueen.Data.Identifiers;
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.Items.Environment.General
{
public class EnvironmentTrigger : BaseItem
{
[Header("Interaction")]
[SerializeField]
private EnvironmentInteractKey _interactKey;
[SerializeField]
private bool _removeTrigger;
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (!CheckEmptyHands())
return;
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(_interactKey)));
if (_removeTrigger)
await Remove();
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f499bd83d87940e5892d63e525087505
timeCreated: 1773862043

View File

@@ -0,0 +1,65 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
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.Items.Environment.General
{
public class TwistingVines : BaseItem
{
[Header("Flags")]
[SerializeField]
private LevelFlag _levelFlag;
public override string InteractableName => "Twisting Vines";
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (item != null)
{
EventCoordinator.Publish(
new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
if (!CanUseKnife())
{
PublishFailureMessage();
return;
}
EventCoordinator.Publish(
new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.UsingKnife)));
await Remove();
}
protected override UniTask OnRemoved()
{
SaveManager.SetLevelFlag(_levelFlag, true);
return UniTask.CompletedTask;
}
private bool CanUseKnife()
{
if (SettingsService.Game.AutoUseTools)
return PlayerManager.HasAccessToTool(ToolID.Knife);
return PlayerManager.GetEquippedTool() == ToolID.Knife;
}
private void PublishFailureMessage()
{
var message = SettingsService.Game.AutoUseTools
? InteractEventIDs.Get(LevelInteractKey.CutVines)
: InteractEventIDs.Get(ItemInteractKey.WrongTool);
EventCoordinator.Publish(new DisplayInteractEvent(message));
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 716b29e16fd1452b87eaf8903c0275a0
timeCreated: 1770982267

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b350acb8634b46a5a5e890e64813f2a2
timeCreated: 1773590247

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bceb9c6179804ca6a6ab860091497bec
timeCreated: 1773590266

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b96e740c17be4776b814df0cdf3e4ba9
timeCreated: 1773837562

View File

@@ -0,0 +1,13 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
namespace BriarQueen.Game.Items.HoverZones.ChapterOne.Village
{
public class FountainInteractZone : InteractZone
{
protected override bool CheckUnlockStatus()
{
return SaveManager.GetLevelFlag(LevelFlag.PumpWaterRestored);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 91690066830a4fc18ef4d37e59c35f77
timeCreated: 1773492836

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bf66aebc6b634be6835a5cb959b676bc
timeCreated: 1773590266

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a3eccc4b792f428e998c154badaf8df2
timeCreated: 1773859979

View File

@@ -0,0 +1,7 @@
namespace BriarQueen.Game.Items.HoverZones.ChapterOne.Workshop.Downstairs
{
public class WorkshopBookcaseInteractZone : InteractZone
{
public override string InteractableName => !CanvasGroup.interactable ? string.Empty : "Inspect Bookcase";
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 075b00fc69004603b54fe09287b25112
timeCreated: 1773859979

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a842be13bc18495282b2baad5f07b164
timeCreated: 1773590266

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5f5eb751f8264020972f1f38d92567ba
timeCreated: 1773591269

View File

@@ -0,0 +1,19 @@
using BriarQueen.Game.Puzzles.ChapterOne.Workshop.BoxPuzzle;
using UnityEngine;
namespace BriarQueen.Game.Items.HoverZones.ChapterOne.Workshop.Upstairs.PuzzleBox
{
public class PuzzleBoxInteractZone : InteractZone
{
[SerializeField]
private WorkshopBasePuzzleBox _basePuzzleBox;
private string _interactName = string.Empty;
public override string InteractableName => _interactName;
public void SetInteractableName()
{
_interactName = "Open Box";
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b2700af83a384ed2a2003a64ecd72f1a
timeCreated: 1773515450

View File

@@ -0,0 +1,40 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Data.IO.Saves;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Player.Data;
using Cysharp.Threading.Tasks;
namespace BriarQueen.Game.Items.HoverZones.ChapterOne.Workshop.Upstairs
{
public class WorkshopSafeInteractZone : InteractZone
{
public override string InteractableName
{
get
{
if (!SaveManager.GetLevelFlag(LevelFlag.WorkshopSafeUnlocked))
return "Locked Safe";
return "Unlocked Safe";
}
}
public override async UniTask OnInteract(ItemDataSo item = null)
{
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
if (!SaveManager.GetLevelFlag(LevelFlag.WorkshopSafeUnlocked))
{
EventCoordinator.Publish(new DisplayInteractEvent(
InteractEventIDs.Get(LevelInteractKey.WorkshopLockedSafe)));
return;
}
await base.OnInteract(item);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d9fb667aaff5490b9478cddc37e24c95
timeCreated: 1772812658

View File

@@ -0,0 +1,12 @@
using BriarQueen.Data.IO.Saves;
namespace BriarQueen.Game.Items.HoverZones.ChapterOne.Workshop
{
public class WorkshopDownstairsDoorInteractZone : InteractZone
{
protected override bool CheckUnlockStatus()
{
return SaveManager.GetLevelFlag(LevelFlag.WorkshopDownstairsDoorOpen);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 36a0b0a0b0714c4ea5138830f1405a11
timeCreated: 1773572899

View File

@@ -0,0 +1,112 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Coordinators.Events;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Interaction.Data;
using BriarQueen.Framework.Managers.IO;
using BriarQueen.Framework.Managers.Levels;
using BriarQueen.Framework.Managers.Player.Data;
using BriarQueen.Framework.Managers.UI;
using Cysharp.Threading.Tasks;
using UnityEngine;
using VContainer;
namespace BriarQueen.Game.Items.HoverZones
{
public class InteractZone : MonoBehaviour, IInteractable
{
[Header("Level Setup")]
[SerializeField]
private LevelKey _levelToLoad;
[SerializeField]
private string _levelName;
[SerializeField]
private string _lockedTooltipText = string.Empty;
[SerializeField]
private string _lockedInteractText = string.Empty;
[SerializeField]
private bool _locked;
[Header("UI Setup")]
[SerializeField]
private UICursorService.CursorStyle _cursorStyle = UICursorService.CursorStyle.Travel;
protected EventCoordinator EventCoordinator;
protected LevelManager LevelManager;
protected SaveManager SaveManager;
public CanvasGroup CanvasGroup;
protected void Awake()
{
if(CanvasGroup == null)
CanvasGroup = GetComponent<CanvasGroup>();
}
protected void Start()
{
if (_locked && CheckUnlockStatus())
Unlock();
}
public UICursorService.CursorStyle ApplicableCursorStyle => _cursorStyle;
public virtual string InteractableName => _locked ? _lockedTooltipText : _levelName;
public virtual async UniTask OnInteract(ItemDataSo item = null)
{
if (_locked)
{
var message = !string.IsNullOrEmpty(_lockedInteractText) ? _lockedInteractText
: InteractEventIDs.Get(EnvironmentInteractKey.Locked);
EventCoordinator.Publish(new DisplayInteractEvent(message));
return;
}
if (item != null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return;
}
var levelId = AssetKeyIdentifiers.Get(_levelToLoad);
var loaded = await LevelManager.LoadLevel(levelId);
if (!loaded)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.CantGoThere)));
}
}
public virtual UniTask EnterHover()
{
return UniTask.CompletedTask;
}
public virtual UniTask ExitHover()
{
return UniTask.CompletedTask;
}
public void Unlock()
{
_locked = false;
}
protected virtual bool CheckUnlockStatus()
{
return false;
}
[Inject]
public void Construct(LevelManager levelManager, EventCoordinator eventCoordinator, SaveManager saveManager)
{
LevelManager = levelManager;
EventCoordinator = eventCoordinator;
SaveManager = saveManager;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9528c00201e44fc2baf036655881cf0d
timeCreated: 1770916856

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 857b6aae0b004060bab06eb8854c0710
timeCreated: 1771172388

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4ab38d47b61c4887836156eb319d0c63
timeCreated: 1771172454

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6b619d489d9440a0a3c1a9f46eda7fe6
timeCreated: 1773780379

View File

@@ -0,0 +1,97 @@
using System;
using System.Linq;
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Coordinators.Events;
using BriarQueen.Framework.Events.Gameplay;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Interaction.Data;
using BriarQueen.Framework.Managers.Player;
using BriarQueen.Framework.Managers.Player.Data;
using Cysharp.Threading.Tasks;
namespace BriarQueen.Game.Items.Interactions.ChapterOne.Village
{
[Serializable]
public class PliersInteraction : BaseInteraction
{
public override UniTask<bool> TryUseWith(
ItemDataSo self,
ItemDataSo other,
PlayerManager playerManager,
EventCoordinator eventCoordinator)
{
if (other == null)
{
eventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return UniTask.FromResult(false);
}
var pliersId = ItemIDs.Get(ItemKey.Pliers);
var emeraldAmuletId = ItemIDs.Get(ItemKey.EmeraldAmulet);
var rubyRingId = ItemIDs.Get(ItemKey.RubyRing);
var diamondTiaraId = ItemIDs.Get(ItemKey.DiamondTiara);
var emeraldId = ItemIDs.Get(ItemKey.Emerald);
var rubyId = ItemIDs.Get(ItemKey.Ruby);
var diamondId = ItemIDs.Get(ItemKey.Diamond);
var success = other.UniqueID switch
{
var id when id == emeraldAmuletId => ExtractGem(
emeraldId,
emeraldAmuletId,
"You carefully pull the emerald out of the amulet."),
var id when id == rubyRingId => ExtractGem(
rubyId,
rubyRingId,
"You carefully pull the ruby out of the ring."),
var id when id == diamondTiaraId => ExtractGem(
diamondId,
diamondTiaraId,
"You carefully pull the diamond out of the tiara."),
_ => FailInteraction()
};
return UniTask.FromResult(success);
bool ExtractGem(string gemId, string sourceItemId, string message)
{
eventCoordinator.Publish(new DisplayInteractEvent(message));
playerManager.CollectItem(gemId);
playerManager.RemoveItem(sourceItemId);
eventCoordinator.Publish(new SelectedItemChangedEvent(null));
CheckIfPliersBreak();
return true;
}
bool FailInteraction()
{
eventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.CantUseItem)));
return false;
}
void CheckIfPliersBreak()
{
var collectedItems = playerManager.GetAllCollectedItems();
var hasEmerald = collectedItems.Any(x => x.UniqueID == emeraldId);
var hasRuby = collectedItems.Any(x => x.UniqueID == rubyId);
var hasDiamond = collectedItems.Any(x => x.UniqueID == diamondId);
if (hasEmerald && hasRuby && hasDiamond)
{
eventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.PliersSnapped)));
playerManager.RemoveItem(pliersId);
eventCoordinator.Publish(new SelectedItemChangedEvent(null));
}
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b067daed4e5f4296a1a77f92af07cbc1
timeCreated: 1773780295

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0adff31d53cb4f0197b3bfd4b779d036
timeCreated: 1771172785

View File

@@ -0,0 +1,36 @@
using System;
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Coordinators.Events;
using BriarQueen.Framework.Events.Gameplay;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Interaction.Data;
using BriarQueen.Framework.Managers.Player;
using BriarQueen.Framework.Managers.Player.Data;
using Cysharp.Threading.Tasks;
namespace BriarQueen.Game.Items.Interactions.ChapterOne.Workshop
{
[Serializable]
public class SmallRagInteraction : BaseInteraction
{
public override async UniTask<bool> TryUseWith(ItemDataSo self, ItemDataSo other, PlayerManager playerManager,
EventCoordinator eventCoordinator)
{
if (other == null)
return false;
if (other.UniqueID != ItemIDs.Get(ItemKey.DustySapphire))
return false;
eventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.LooksImportant)));
playerManager.CollectItem(ItemIDs.Get(ItemKey.Sapphire));
playerManager.RemoveItem(ItemIDs.Get(ItemKey.DustySapphire));
playerManager.RemoveItem(ItemIDs.Get(ItemKey.SmallRag));
eventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(ItemInteractKey.RagFallsApart)));
eventCoordinator.Publish(new SelectedItemChangedEvent(null));
return true;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e41ece1b6efd4de3ae4a7c5fa0cf7a8a
timeCreated: 1771172802

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4442c407d64c4e038822ab7089063bb7
timeCreated: 1769717587

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2e0f295f8d594ce4be759038d4584b3b
timeCreated: 1770756534

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 497a6b1404a3420b8db86adb8ea0a814
timeCreated: 1770991451

View File

@@ -0,0 +1,18 @@
using BriarQueen.Data.Identifiers;
using BriarQueen.Framework.Events.Save;
using BriarQueen.Framework.Events.UI;
using BriarQueen.Framework.Managers.Levels.Data;
using Cysharp.Threading.Tasks;
namespace BriarQueen.Game.Items.Pickups.ChapterOne.Pumphouse
{
public class Pliers : BaseItem
{
protected override UniTask OnInteracted()
{
TutorialService.DisplayTutorial(TutorialPopupID.MultipleUseItems);
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 948e07af025b4fb7b0b3698c96d73f87
timeCreated: 1770992135

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a11cd0830c544fa19956201c59d8d29d
timeCreated: 1771003426

View File

@@ -0,0 +1,24 @@
using BriarQueen.Framework.Managers.Levels.Data;
using UnityEngine;
namespace BriarQueen.Game.Items.Pickups.ChapterOne.Workshop
{
public class Candle : BaseItem
{
[SerializeField]
private CandleColour _colour;
public override string InteractableName => $"{_colour.ToString()} Candle";
internal enum CandleColour
{
Red,
Orange,
Yellow,
Green,
Blue,
Indigo,
Violet
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: bec4d666bbcf43338c71dfa3ee9315c5
timeCreated: 1771010785

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e970ba2932634684a509d4de59098153
timeCreated: 1772828379

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 943af453313248b2a343c61ff9910099
timeCreated: 1772828379

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f6c9ad510e55448180517715f549734b
timeCreated: 1772828379

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: d0bc65d47d744873bbd339fe2388bb69
timeCreated: 1772828379

View File

@@ -0,0 +1,23 @@
using BriarQueen.Data.Identifiers;
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;
namespace BriarQueen.Game.Items.WorldBuilding.ChapterOne.Workshop.Upstairs
{
public class WorkshopUpstairsWindow : BaseItem
{
public override string InteractableName => "Window";
public override UICursorService.CursorStyle ApplicableCursorStyle => UICursorService.CursorStyle.Inspect;
public override UniTask OnInteract(ItemDataSo item = null)
{
EventCoordinator.Publish(new DisplayInteractEvent(InteractEventIDs.Get(EnvironmentInteractKey.DirtyWindow)));
return UniTask.CompletedTask;
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 690471ce902644e2a9c9758786435dbf
timeCreated: 1772828385