Hide Ana-Lyse's dialogue component when taking photo, also correctly restore a hidden state with the dialogu turned off

This commit is contained in:
Michal Pikulski
2025-11-24 11:07:46 +01:00
parent ff28bd23cb
commit f0abc4760b
5 changed files with 96 additions and 6 deletions

View File

@@ -6,7 +6,9 @@ namespace StateMachines.Quarry.AnneLise
{
public class AnneLiseBushBehaviour : MonoBehaviour
{
[SerializeField] private GameObject dialogueCanvas;
private AppleMachine _anneLiseBushStateMachine;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
@@ -16,6 +18,7 @@ namespace StateMachines.Quarry.AnneLise
public void TakePhoto()
{
dialogueCanvas?.SetActive(false);
_anneLiseBushStateMachine.ChangeState("TakePhoto");
}
}

View File

@@ -0,0 +1,78 @@
using Core.SaveLoad;
using UnityEngine;
namespace StateMachines.Quarry.AnneLise
{
/// <summary>
/// Hidden state for Anne Lise that saves/restores the DialogueCanvas active state
/// </summary>
public class HiddenState : AppleState
{
private GameObject _dialogueCanvas;
/// <summary>
/// Serializable data for the hidden state
/// </summary>
[System.Serializable]
private class HiddenStateData
{
public bool wasDialogueCanvasActive;
}
private void Awake()
{
// Find the immediate child called "DialogueCanvas"
Transform childTransform = transform.Find("DialogueCanvas");
if (childTransform != null)
{
_dialogueCanvas = childTransform.gameObject;
}
else
{
Debug.LogWarning($"[HiddenState] DialogueCanvas child not found on {gameObject.name}");
}
}
public override string SerializeState()
{
if (_dialogueCanvas == null)
{
Debug.LogWarning("[HiddenState] Cannot serialize state - DialogueCanvas is null");
return "";
}
HiddenStateData data = new HiddenStateData
{
wasDialogueCanvasActive = _dialogueCanvas.activeSelf
};
return JsonUtility.ToJson(data);
}
public override void OnRestoreState(string data)
{
if (string.IsNullOrEmpty(data))
{
Debug.LogWarning("[HiddenState] No data to restore");
return;
}
if (_dialogueCanvas == null)
{
Debug.LogWarning("[HiddenState] Cannot restore state - DialogueCanvas is null");
return;
}
try
{
HiddenStateData stateData = JsonUtility.FromJson<HiddenStateData>(data);
_dialogueCanvas.SetActive(stateData.wasDialogueCanvasActive);
Debug.Log($"[HiddenState] Restored DialogueCanvas active state to: {stateData.wasDialogueCanvasActive}");
}
catch (System.Exception ex)
{
Debug.LogError($"[HiddenState] Failed to restore state: {ex.Message}");
}
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1fa347bfb45f473f8639842928f8cfa1
timeCreated: 1763978213