76 lines
1.7 KiB
C#
76 lines
1.7 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
[AddComponentMenu("Playground/Actions/Dialogue Balloon")]
|
|
public class DialogueBalloonAction : Action
|
|
{
|
|
|
|
[Header("Contents")]
|
|
public string textToDisplay = "Hey!";
|
|
public Color backgroundColor = new Color32(113, 132, 146, 255);
|
|
public Color textColor = Color.white;
|
|
|
|
[Header("Options")]
|
|
public Transform targetObject;
|
|
public DisappearMode disappearMode = DisappearMode.ButtonPress;
|
|
public float timeToDisappear = 2f;
|
|
public KeyCode keyToPress = KeyCode.Return;
|
|
|
|
[Header("Continue dialogue")]
|
|
public DialogueBalloonAction followingText;
|
|
|
|
private BalloonScript b;
|
|
private bool balloonIsActive = false;
|
|
|
|
|
|
public override bool ExecuteAction(GameObject other)
|
|
{
|
|
if(!balloonIsActive)
|
|
{
|
|
DialogueSystem d = GameObject.FindObjectOfType<DialogueSystem>();
|
|
if(d == null)
|
|
{
|
|
//Dialogue System is not in the scene
|
|
Debug.LogWarning("You need a UI in the scene to display dialogue!");
|
|
return false;
|
|
}
|
|
|
|
//Dialogue System is found
|
|
b = d.CreateBalloon(textToDisplay, (disappearMode == DisappearMode.ButtonPress), keyToPress, timeToDisappear, backgroundColor, textColor, targetObject);
|
|
b.BalloonDestroyed += OnBalloonDestroyed;
|
|
balloonIsActive = true;
|
|
|
|
StartCoroutine(WaitForBallonDestroyed());
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private IEnumerator WaitForBallonDestroyed()
|
|
{
|
|
yield return new WaitUntil(()=> !balloonIsActive);
|
|
}
|
|
|
|
|
|
private void OnBalloonDestroyed()
|
|
{
|
|
b.BalloonDestroyed -= OnBalloonDestroyed;
|
|
b = null;
|
|
balloonIsActive = false;
|
|
|
|
if(followingText != null)
|
|
{
|
|
followingText.ExecuteAction(this.gameObject);
|
|
}
|
|
}
|
|
|
|
public enum DisappearMode
|
|
{
|
|
Time = 0,
|
|
ButtonPress = 1,
|
|
}
|
|
}
|