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