TH1/Unity/Assets/Scripts/TH1_DataAssetsScript/QuestionnaireDataAssets.cs

98 lines
3.1 KiB
C#

using System;
using System.Collections.Generic;
using Logic.Multilingual;
using UnityEngine;
public enum QuestionnaireQuestionType
{
Open = 0,
SingleChoice = 1,
MultipleChoice = 2
}
[Serializable]
[CreateAssetMenu(fileName = "QuestionnaireDataAssets", menuName = "TH1 Game Data/Questionnaire Data Asset")]
public class QuestionnaireDataAssets : ScriptableObject
{
public string DefaultQuestionnaireId = "player-feedback-2026-06";
[MultilingualField] public string MenuButtonText;
public List<QuestionnaireInfo> QuestionnaireList = new List<QuestionnaireInfo>();
[NonSerialized]
private Dictionary<string, QuestionnaireInfo> _questionnaireDict;
public QuestionnaireInfo GetDefaultQuestionnaire()
{
if (GetQuestionnaireInfo(DefaultQuestionnaireId, out var info)) return info;
return QuestionnaireList != null && QuestionnaireList.Count > 0 ? QuestionnaireList[0] : null;
}
public bool GetQuestionnaireInfo(string questionnaireId, out QuestionnaireInfo info)
{
EnsureDict();
if (!string.IsNullOrEmpty(questionnaireId) && _questionnaireDict.TryGetValue(questionnaireId, out info))
{
return true;
}
info = null;
return false;
}
private void EnsureDict()
{
if (_questionnaireDict != null && QuestionnaireList != null && _questionnaireDict.Count == QuestionnaireList.Count)
{
return;
}
_questionnaireDict = new Dictionary<string, QuestionnaireInfo>();
if (QuestionnaireList == null) return;
foreach (var info in QuestionnaireList)
{
if (info == null || string.IsNullOrEmpty(info.QuestionnaireId)) continue;
_questionnaireDict[info.QuestionnaireId] = info;
}
}
}
[Serializable]
public class QuestionnaireInfo
{
public string QuestionnaireId;
[MultilingualField] public string Title;
[MultilingualField] public string Description;
[MultilingualField] public string SubmitButtonText;
[MultilingualField] public string ResubmitButtonText;
[MultilingualField] public string CloseButtonText;
[MultilingualField] public string SubmittedMessage;
[MultilingualField] public string UploadingMessage;
[MultilingualField] public string UploadSuccessMessage;
[MultilingualField] public string UploadFailedMessage;
[MultilingualField] public string UploadAuthFailedMessage;
[MultilingualField] public string RequiredMessage;
[MultilingualField] public string RefillHintText;
[MultilingualField] public string SaveFailedMessage;
public List<QuestionnaireQuestionInfo> Questions = new List<QuestionnaireQuestionInfo>();
}
[Serializable]
public class QuestionnaireQuestionInfo
{
public string QuestionId;
public QuestionnaireQuestionType QuestionType;
[MultilingualField] public string Title;
[MultilingualField] public string Hint;
public bool Required;
public int MaxSelectCount;
public List<QuestionnaireOptionInfo> Options = new List<QuestionnaireOptionInfo>();
}
[Serializable]
public class QuestionnaireOptionInfo
{
public string OptionId;
[MultilingualField] public string Text;
}