Merge branch 'main' of https://homelab.tailf7f81b.ts.net/tschesky/AppleHillsProduction
This commit is contained in:
@@ -114,13 +114,14 @@ MonoBehaviour:
|
|||||||
m_EditorClassIdentifier: AppleHillsScripts::Dialogue.SpeechBubble
|
m_EditorClassIdentifier: AppleHillsScripts::Dialogue.SpeechBubble
|
||||||
textDisplay: {fileID: 4573570654593171780}
|
textDisplay: {fileID: 4573570654593171780}
|
||||||
imageDisplay: {fileID: 4814676392695871198}
|
imageDisplay: {fileID: 4814676392695871198}
|
||||||
|
dialoguePromptImage: {fileID: 6481613319593204747}
|
||||||
|
dialogueBubble: {fileID: 1494212192306772670}
|
||||||
displayMode: 1
|
displayMode: 1
|
||||||
typewriterSpeed: 0.05
|
typewriterSpeed: 0.05
|
||||||
typingSoundSource: {fileID: 0}
|
typingSoundSource: {fileID: 0}
|
||||||
typingSoundFrequency: 3
|
typingSoundFrequency: 3
|
||||||
useRichText: 1
|
useRichText: 1
|
||||||
dialogueDisplayTime: 3
|
dialogueDisplayTime: 3
|
||||||
dialoguePromptText: . . .
|
|
||||||
--- !u!1 &3571537114331005905
|
--- !u!1 &3571537114331005905
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -353,6 +354,81 @@ MonoBehaviour:
|
|||||||
m_hasFontAssetChanged: 0
|
m_hasFontAssetChanged: 0
|
||||||
m_baseMaterial: {fileID: 0}
|
m_baseMaterial: {fileID: 0}
|
||||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
--- !u!1 &5966238993889414591
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2913690643654480743}
|
||||||
|
- component: {fileID: 5237027710007059819}
|
||||||
|
- component: {fileID: 6481613319593204747}
|
||||||
|
m_Layer: 5
|
||||||
|
m_Name: Prompt
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 0
|
||||||
|
--- !u!224 &2913690643654480743
|
||||||
|
RectTransform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5966238993889414591}
|
||||||
|
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||||
|
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 3484825090253933040}
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||||
|
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||||
|
m_AnchoredPosition: {x: 143, y: 74}
|
||||||
|
m_SizeDelta: {x: 245, y: 148}
|
||||||
|
m_Pivot: {x: 0.5, y: 0.5}
|
||||||
|
--- !u!222 &5237027710007059819
|
||||||
|
CanvasRenderer:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5966238993889414591}
|
||||||
|
m_CullTransparentMesh: 1
|
||||||
|
--- !u!114 &6481613319593204747
|
||||||
|
MonoBehaviour:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5966238993889414591}
|
||||||
|
m_Enabled: 1
|
||||||
|
m_EditorHideFlags: 0
|
||||||
|
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||||
|
m_Name:
|
||||||
|
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
|
||||||
|
m_Material: {fileID: 0}
|
||||||
|
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||||
|
m_RaycastTarget: 1
|
||||||
|
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||||
|
m_Maskable: 1
|
||||||
|
m_OnCullStateChanged:
|
||||||
|
m_PersistentCalls:
|
||||||
|
m_Calls: []
|
||||||
|
m_Sprite: {fileID: -1369078500869033561, guid: d52355bd23697ac4eaad116fb0aec19d, type: 3}
|
||||||
|
m_Type: 0
|
||||||
|
m_PreserveAspect: 0
|
||||||
|
m_FillCenter: 1
|
||||||
|
m_FillMethod: 4
|
||||||
|
m_FillAmount: 1
|
||||||
|
m_FillClockwise: 1
|
||||||
|
m_FillOrigin: 0
|
||||||
|
m_UseSpriteMesh: 0
|
||||||
|
m_PixelsPerUnitMultiplier: 1
|
||||||
--- !u!1 &6499933157207406972
|
--- !u!1 &6499933157207406972
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -385,6 +461,7 @@ RectTransform:
|
|||||||
m_ConstrainProportionsScale: 1
|
m_ConstrainProportionsScale: 1
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 8307219291215824345}
|
- {fileID: 8307219291215824345}
|
||||||
|
- {fileID: 2913690643654480743}
|
||||||
m_Father: {fileID: 0}
|
m_Father: {fileID: 0}
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
m_AnchorMin: {x: 0, y: 0}
|
m_AnchorMin: {x: 0, y: 0}
|
||||||
|
|||||||
@@ -19,14 +19,15 @@ namespace Dialogue
|
|||||||
public class SpeechBubble : MonoBehaviour
|
public class SpeechBubble : MonoBehaviour
|
||||||
{
|
{
|
||||||
[SerializeField] private TextMeshProUGUI textDisplay;
|
[SerializeField] private TextMeshProUGUI textDisplay;
|
||||||
[SerializeField] private Image imageDisplay; // New field for displaying images
|
[SerializeField] private Image imageDisplay; // For displaying images in dialogue
|
||||||
|
[SerializeField] private Image dialoguePromptImage; // NEW: Reference to the dialogue prompt image
|
||||||
|
[SerializeField] private GameObject dialogueBubble; // NEW: Reference to the dialogue bubble container
|
||||||
[SerializeField] private TextDisplayMode displayMode = TextDisplayMode.Typewriter;
|
[SerializeField] private TextDisplayMode displayMode = TextDisplayMode.Typewriter;
|
||||||
[SerializeField] private float typewriterSpeed = 0.05f; // Time between characters in seconds
|
[SerializeField] private float typewriterSpeed = 0.05f; // Time between characters in seconds
|
||||||
[SerializeField] private AudioSource typingSoundSource;
|
[SerializeField] private AudioSource typingSoundSource;
|
||||||
[SerializeField] private float typingSoundFrequency = 3; // Play sound every X characters
|
[SerializeField] private float typingSoundFrequency = 3; // Play sound every X characters
|
||||||
[SerializeField] private bool useRichText = true; // Whether to respect rich text tags
|
[SerializeField] private bool useRichText = true; // Whether to respect rich text tags
|
||||||
[SerializeField] private float dialogueDisplayTime = 1.5f; // Time in seconds to display dialogue before showing prompt
|
[SerializeField] private float dialogueDisplayTime = 1.5f; // Time in seconds to display dialogue before showing prompt
|
||||||
[SerializeField] private string dialoguePromptText = ". . ."; // Text to show as a prompt for available dialogue
|
|
||||||
|
|
||||||
private Coroutine typewriterCoroutine;
|
private Coroutine typewriterCoroutine;
|
||||||
private Coroutine promptUpdateCoroutine;
|
private Coroutine promptUpdateCoroutine;
|
||||||
@@ -34,15 +35,22 @@ namespace Dialogue
|
|||||||
private Sprite currentImage = null;
|
private Sprite currentImage = null;
|
||||||
private bool isVisible = false;
|
private bool isVisible = false;
|
||||||
private DialogueContentType currentContentType = DialogueContentType.Text;
|
private DialogueContentType currentContentType = DialogueContentType.Text;
|
||||||
|
private bool isPromptVisible = false; // Track if we're showing the prompt or dialogue
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
// Ensure we have both components
|
// Ensure we have the required components
|
||||||
if (textDisplay == null)
|
if (textDisplay == null)
|
||||||
Debug.LogError("SpeechBubble: TextMeshProUGUI component is not assigned!");
|
Debug.LogError("SpeechBubble: TextMeshProUGUI component is not assigned!");
|
||||||
|
|
||||||
if (imageDisplay == null)
|
if (imageDisplay == null)
|
||||||
Debug.LogError("SpeechBubble: Image component is not assigned!");
|
Debug.LogError("SpeechBubble: Image component for dialogue is not assigned!");
|
||||||
|
|
||||||
|
if (dialoguePromptImage == null)
|
||||||
|
Debug.LogError("SpeechBubble: Dialogue prompt image is not assigned!");
|
||||||
|
|
||||||
|
if (dialogueBubble == null)
|
||||||
|
Debug.LogError("SpeechBubble: Dialogue bubble container is not assigned!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -50,16 +58,28 @@ namespace Dialogue
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Show()
|
public void Show()
|
||||||
{
|
{
|
||||||
gameObject.SetActive(true);
|
// If we're showing the prompt, we only activate the prompt image
|
||||||
|
if (isPromptVisible)
|
||||||
|
{
|
||||||
|
dialogueBubble.SetActive(false);
|
||||||
|
dialoguePromptImage.gameObject.SetActive(true);
|
||||||
|
}
|
||||||
|
else // Otherwise, show the dialogue bubble
|
||||||
|
{
|
||||||
|
dialogueBubble.SetActive(true);
|
||||||
|
dialoguePromptImage.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
isVisible = true;
|
isVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Hide the speech bubble
|
/// Hide the speech bubble and prompt
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Hide()
|
public void Hide()
|
||||||
{
|
{
|
||||||
gameObject.SetActive(false);
|
dialogueBubble.SetActive(false);
|
||||||
|
dialoguePromptImage.gameObject.SetActive(false);
|
||||||
isVisible = false;
|
isVisible = false;
|
||||||
|
|
||||||
// Stop any ongoing typewriter effect
|
// Stop any ongoing typewriter effect
|
||||||
@@ -102,6 +122,7 @@ namespace Dialogue
|
|||||||
|
|
||||||
currentFullText = text;
|
currentFullText = text;
|
||||||
currentContentType = DialogueContentType.Text;
|
currentContentType = DialogueContentType.Text;
|
||||||
|
isPromptVisible = false; // We're showing dialogue, not a prompt
|
||||||
|
|
||||||
// Stop any existing typewriter effect
|
// Stop any existing typewriter effect
|
||||||
if (typewriterCoroutine != null)
|
if (typewriterCoroutine != null)
|
||||||
@@ -110,7 +131,7 @@ namespace Dialogue
|
|||||||
typewriterCoroutine = null;
|
typewriterCoroutine = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Activate text display, deactivate image display
|
// Activate text display, deactivate image display within the dialogue bubble
|
||||||
textDisplay.gameObject.SetActive(true);
|
textDisplay.gameObject.SetActive(true);
|
||||||
if (imageDisplay != null)
|
if (imageDisplay != null)
|
||||||
{
|
{
|
||||||
@@ -150,6 +171,7 @@ namespace Dialogue
|
|||||||
// Display the dialogue line
|
// Display the dialogue line
|
||||||
if (!string.IsNullOrEmpty(line))
|
if (!string.IsNullOrEmpty(line))
|
||||||
{
|
{
|
||||||
|
isPromptVisible = false; // We're showing dialogue content
|
||||||
SetText(line);
|
SetText(line);
|
||||||
|
|
||||||
// After a delay, update the prompt visibility
|
// After a delay, update the prompt visibility
|
||||||
@@ -163,19 +185,24 @@ namespace Dialogue
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the speech bubble to either show a prompt or hide based on dialogue availability
|
/// Update to either show the dialogue prompt image or hide based on dialogue availability
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="hasDialogueAvailable">Whether dialogue is available</param>
|
/// <param name="hasDialogueAvailable">Whether dialogue is available</param>
|
||||||
public void UpdatePromptVisibility(bool hasDialogueAvailable)
|
public void UpdatePromptVisibility(bool hasDialogueAvailable)
|
||||||
{
|
{
|
||||||
if (hasDialogueAvailable)
|
if (hasDialogueAvailable)
|
||||||
{
|
{
|
||||||
Show();
|
isPromptVisible = true; // We're showing the prompt, not dialogue
|
||||||
SetText(dialoguePromptText);
|
|
||||||
|
// Hide dialogue bubble, show prompt image
|
||||||
|
dialogueBubble.SetActive(false);
|
||||||
|
dialoguePromptImage.gameObject.SetActive(true);
|
||||||
|
|
||||||
|
isVisible = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Hide();
|
Hide(); // Hide both bubble and prompt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -291,6 +318,7 @@ namespace Dialogue
|
|||||||
|
|
||||||
currentImage = sprite;
|
currentImage = sprite;
|
||||||
currentContentType = DialogueContentType.Image;
|
currentContentType = DialogueContentType.Image;
|
||||||
|
isPromptVisible = false; // We're showing dialogue content, not a prompt
|
||||||
|
|
||||||
// Activate image display, set the sprite
|
// Activate image display, set the sprite
|
||||||
imageDisplay.gameObject.SetActive(true);
|
imageDisplay.gameObject.SetActive(true);
|
||||||
@@ -364,6 +392,7 @@ namespace Dialogue
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Display the content based on its type
|
// Display the content based on its type
|
||||||
|
isPromptVisible = false; // We're showing dialogue content
|
||||||
currentContentType = content.ContentType;
|
currentContentType = content.ContentType;
|
||||||
|
|
||||||
if (content.ContentType == DialogueContentType.Text)
|
if (content.ContentType == DialogueContentType.Text)
|
||||||
@@ -372,6 +401,10 @@ namespace Dialogue
|
|||||||
textDisplay.gameObject.SetActive(true);
|
textDisplay.gameObject.SetActive(true);
|
||||||
if (imageDisplay != null) imageDisplay.gameObject.SetActive(false);
|
if (imageDisplay != null) imageDisplay.gameObject.SetActive(false);
|
||||||
|
|
||||||
|
// Show dialogue bubble, hide prompt
|
||||||
|
dialogueBubble.SetActive(true);
|
||||||
|
dialoguePromptImage.gameObject.SetActive(false);
|
||||||
|
|
||||||
// Display the text
|
// Display the text
|
||||||
DisplayDialogueLine(content.Text, hasMoreDialogue);
|
DisplayDialogueLine(content.Text, hasMoreDialogue);
|
||||||
}
|
}
|
||||||
@@ -381,6 +414,10 @@ namespace Dialogue
|
|||||||
textDisplay.gameObject.SetActive(false);
|
textDisplay.gameObject.SetActive(false);
|
||||||
if (imageDisplay != null) imageDisplay.gameObject.SetActive(true);
|
if (imageDisplay != null) imageDisplay.gameObject.SetActive(true);
|
||||||
|
|
||||||
|
// Show dialogue bubble, hide prompt
|
||||||
|
dialogueBubble.SetActive(true);
|
||||||
|
dialoguePromptImage.gameObject.SetActive(false);
|
||||||
|
|
||||||
// Set the image
|
// Set the image
|
||||||
SetImage(content.Image);
|
SetImage(content.Image);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user