question with multiple choise system

This commit is contained in:
voffka81
2022-08-17 17:19:43 +03:00
parent ecdda2ca44
commit edc8420eab
11 changed files with 3214 additions and 50 deletions
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6848174909d126243953a63d07976ac8
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,46 @@
using Assets.Scripts.Actions;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
[System.Serializable]
public class ConversationChangeEvent : UnityEvent<BaseAction> { }
public class ChoiceController : MonoBehaviour
{
public KeyValuePair<string, BaseAction> _option;
public ConversationChangeEvent conversationChangeEvent;
// Update is called once per frame
public static ChoiceController AddChoiceButton(Button choiceButtonTemplate, KeyValuePair<string, BaseAction> option, int index)
{
int buttonSpacing = -44;
Button button = Instantiate(choiceButtonTemplate);
button.transform.SetParent(choiceButtonTemplate.transform.parent);
button.transform.localScale = Vector3.one;
button.transform.localPosition = new Vector3(0, index * buttonSpacing, 0);
button.name = option.Key;
button.gameObject.SetActive(true);
ChoiceController choiceController = button.GetComponent<ChoiceController>();
choiceController._option = option;
return choiceController;
}
private void Start()
{
if (conversationChangeEvent == null)
conversationChangeEvent = new ConversationChangeEvent();
var btn = GetComponent<Button>();
var txt = btn.GetComponentInChildren<TextMeshProUGUI>();
txt.text = _option.Key;
}
public void MakeChoice()
{
conversationChangeEvent.Invoke(_option.Value);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ae1d8251da8585f4099dc5bdcf6d14d0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,51 @@
using Assets.Scripts.Actions;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class ConversationController : MonoBehaviour
{
[SerializeField]
public TextMeshProUGUI _title;
[SerializeField]
public Button _choiceButton;
private List<ChoiceController> choiceControllers = new();
public static ConversationController Instance { get; private set; }
private void Awake()
{
Instance = this;
Hide();
}
public void Change(string title, Dictionary<string, BaseAction> options)
{
RemoveChoices();
_title.text = title;
gameObject.SetActive(true);
for (var count = 0; count < options.Count; count++)
{
ChoiceController c = ChoiceController.AddChoiceButton(_choiceButton, options.ElementAt(count), count);
choiceControllers.Add(c);
}
_choiceButton.gameObject.SetActive(false);
}
private void RemoveChoices()
{
foreach (ChoiceController c in choiceControllers)
Destroy(c.gameObject);
choiceControllers.Clear();
}
public void Hide()
{
RemoveChoices();
gameObject.SetActive(false);
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 745fe52b243d8e947842f8f284e49aad
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,41 @@
using Assets.Scripts.Actions;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class TestingQuestionDialog : MonoBehaviour
{
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
YesNoDialogUI.Instance.ShowQuestion("To be or not to be ?",
() =>
{
Application.Quit();
EditorApplication.ExitPlaymode();
},
() =>
{
//do nothing
});
}
if (Input.GetKeyDown(KeyCode.Space))
{
Dictionary<string, BaseAction> optionsList = new Dictionary<string, BaseAction>
{
{ "Hamburgers - 83$", new Eat(null, 6, 1, 83) },
{ "Cheesburger - 94$", new Eat(null, 6, 1, 94) },
{ "Astro chicken - 131$", new Eat(null, 6, 1, 131) },
{ "Fries - 68$", new Eat(null, 6, 1, 68) },
{ "Shakes - 108$", new Eat(null, 6, 1, 108) },
{ "Colas - 73$", new Eat(null, 6, 1, 73) }
};
ConversationController.Instance.Change("Monolith burger", optionsList);
}
}
}
@@ -1,12 +1,13 @@
using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class QuestionDialogUI : MonoBehaviour
public class YesNoDialogUI : MonoBehaviour
{
public static QuestionDialogUI Instance { get; private set; }
public static YesNoDialogUI Instance { get; private set; }
[SerializeField]
private TextMeshProUGUI _textMeshPro;
-23
View File
@@ -1,23 +0,0 @@
using UnityEditor;
using UnityEngine;
public class TestingQuestionDialog : MonoBehaviour
{
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
QuestionDialogUI.Instance.ShowQuestion("To be or not to be ?",
() =>
{
Application.Quit();
EditorApplication.ExitPlaymode();
},
() =>
{
//do nothing
});
}
}
}