Scriptum/Assets/Scripts/REFACTORING/Application/Dialogue/Panel/QuestionPanel.cs
2022-12-04 20:48:40 +01:00

93 lines
3.0 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
public class QuestionPanel : Panel
{
public List<ButtonPanelModel> Answers = new List<ButtonPanelModel>();
public QuestionPanel() { }
public QuestionPanel(Vector3 _position, Vector2 _size, Vector3 _scale) : base(_position, _size, _scale) { }
public override GameObject BuildPanel()
{
var questionPanel = BuildPanelWithoutContinue();
foreach (ButtonPanelModel answerModel in Answers)
{
// Render button from list
GameObject answerPrefab = SelectButton(answerModel);
answerPrefab.transform.SetParent(questionPanel.transform, false);
}
return questionPanel;
}
/* public void AddButton(PanelButtonStepModel _button)
{
Answers.Add(_button);
}*/
// set button actions
public void SetAnswerButtonAction(string _buttonName, Action onClickFunction)
{
var panelButtonInstance = FindButtonByName(_buttonName);
panelButtonInstance.GetComponent<Button>().onClick.AddListener(() => onClickFunction());
}
public void SetAnswerButtonActions(string _buttonName, UnityAction _buttonAction)
{
var panelButtonInstance = FindButtonByName(_buttonName);
panelButtonInstance.GetComponent<Button>().onClick.AddListener(_buttonAction);
}
public void SetAnswerButtonActions(string _buttonName, UnityEvent _buttonActionsEvent)
{
var panelButtonInstance = FindButtonByName(_buttonName);
_buttonActionsEvent.Invoke();
panelButtonInstance.GetComponent<Button>().onClick.AddListener(() => _buttonActionsEvent.Invoke());
}
/// <summary>
/// Function to decide which button instance create && map button model to its instance
/// </summary>
/// <param name="buttonModel"></param>
private GameObject SelectButton(ButtonPanelModel buttonModel)
{
switch (buttonModel.Type)
{
case PanelButtonEnum.Base:
{
return PanelComponentFactory.BuildCustomButton(buttonModel);
}
case PanelButtonEnum.Continue:
{
return PanelComponentFactory.BuildContinueButton(buttonModel.Position, buttonModel.Size, buttonModel.Scale);
}
case PanelButtonEnum.Accept:
{
return PanelComponentFactory.BuildAcceptButton(buttonModel.Position, buttonModel.Size, buttonModel.Scale);
}
case PanelButtonEnum.Reject:
{
return PanelComponentFactory.BuildRejectButton(buttonModel.Position, buttonModel.Size, buttonModel.Scale);
}
default:
{
throw new System.Exception("Invalid button!!! Button enum type exists but system dont know how to build it");
}
}
}
}