using System;
using UnityEngine;
namespace Unity.Multiplayer.Center.Questionnaire
{
///
/// The serializable data of the questionnaire
///
[Serializable]
internal class QuestionnaireData
{
/// The version of the format to serialize/deserialize data
public string FormatVersion = "1.0.0";
/// The version of the questionnaire itself (different questions, answer choice)
public string Version ="1.2";
/// All the questions in the right order (some might be hidden though)
public Question[] Questions;
/// The predefined answers for presets. The content should match the questions.
public PresetData PresetData;
}
///
/// Possible multiplayer solution that needs to be scored in order to assess a match. Some are mutually exclusive,
/// some are not.
///
[Serializable]
internal enum PossibleSolution
{
/// Netcode for GameObject, incompatible with N4E
NGO,
/// Netcode for Entities, incompatible with NGO
N4E,
/// Client Hosted Architecture (also called "Listen server"; using a host and not a dedicated server)
LS,
/// Dedicated server architecture (using a dedicated server and not a host)
DS,
/// Distributed authority (Authority will be distributed across different players)
DA,
/// Not using Netcode for GameObjects nor Netcode for Entities
CustomNetcode,
/// Works asynchronously, with a database
NoNetcode,
/// Recommended backend for async games, without a Netcode (goes with )
CloudCode
}
[Serializable]
internal enum ViewType
{
/// Yes or No type of question best represented by a toggle
Toggle,
/// A question with multiple choices and where you can select only one answer
Radio,
/// A question with multiple choices and where you can select multiple answers
Checkboxes,
/// A question with a Drop Down
DropDown
}
[Serializable]
internal class Question
{
/// Id (unique across questions)
public string Id;
/// Short string to refer to the question (e.g. "Player Count")
public string Title;
/// Longer string to describe the question, which will be displayed in the tooltip
public string Description;
/// Optional weight to increase/decrease importance of this question, applied to all answers.
//TODO: use ignore if default
public float GlobalWeight = 1f;
/// The type of view to use to display the question
public ViewType ViewType;
/// The possible answers to the question
public Answer[] Choices;
/// If the question is mandatory or not. Not overwritten by presets
public bool IsMandatory;
}
[Serializable]
internal class Answer
{
/// Id (unique across answers)
public string Id;
/// What is displayed to the user
public string Title;
/// Optional description that will be shown in a tooltip
public string Description;
/// How picking this answer will impact the score of a given solution
public ScoreImpact[] ScoreImpacts;
}
[Serializable]
internal class ScoreImpact
{
/// Which score is impacted
public PossibleSolution Solution;
/// Absolute value to add or subtract from the target score
public float Score;
/// A comment displayed to the user as for why this score is impacted
public string Comment;
}
}