예제 #1
0
    public static void SendDisplayQuestionMenu(this NetState ns, QuestionMenu menu)
    {
        if (ns == null || menu == null)
        {
            return;
        }

        var question       = menu.Question?.Trim();
        var questionLength = question?.Length ?? 0;

        var answers       = menu.Answers;
        int answersLength = (byte)answers.Length;

        var maxLength = 11 + questionLength;

        for (int i = 0; i < answersLength; i++)
        {
            maxLength += 5 + answers[i]?.Length ?? 0; // could be trimmed
        }

        var writer = new SpanWriter(stackalloc byte[maxLength]);

        writer.Write((byte)0x7C); // Packet ID
        writer.Seek(2, SeekOrigin.Current);
        writer.Write(menu.Serial);
        writer.Write((ushort)0);
        writer.Write((byte)questionLength);

        if (question != null)
        {
            writer.WriteAscii(question);
        }

        writer.Write((byte)answersLength);

        for (var i = 0; i < answersLength; ++i)
        {
            writer.Write(0);

            var answer = answers[i]?.Trim();

            if (answer == null)
            {
                writer.Write((byte)0);
            }
            else
            {
                var nameLength = answer.Length;
                writer.Write((byte)nameLength);
                writer.WriteAscii(answer);
            }
        }

        writer.WritePacketLength();
        ns.Send(writer.Span);
    }
예제 #2
0
        public static void SendDisplayQuestionMenu(this NetState ns, QuestionMenu menu)
        {
            if (ns == null || menu == null || !ns.GetSendBuffer(out var buffer))
            {
                return;
            }

            var writer = new CircularBufferWriter(buffer);

            writer.Write((byte)0x7C);           // Packet ID
            writer.Seek(2, SeekOrigin.Current); // Length
            writer.Write(menu.Serial);
            writer.Write((ushort)0);

            var question = menu.Question?.Trim();

            if (question == null)
            {
                writer.Write((byte)0);
            }
            else
            {
                var questionLength = question.Length;
                writer.Write((byte)questionLength);
                writer.WriteAscii(question);
            }

            var answers = menu.Answers;

            int answersLength = (byte)answers.Length;

            writer.Write((byte)answersLength);

            for (var i = 0; i < answersLength; ++i)
            {
                writer.Write(0);

                var answer = answers[i]?.Trim();

                if (answer == null)
                {
                    writer.Write((byte)0);
                }
                else
                {
                    var nameLength = answer.Length;
                    writer.Write((byte)nameLength);
                    writer.WriteAscii(answer);
                }
            }

            writer.WritePacketLength();

            ns.Send(ref buffer, writer.Position);
        }
예제 #3
0
        public void TestDisplayQuestionMenu()
        {
            var menu = new QuestionMenu(
                "Which option would you choose?",
                new[]
            {
                "Option 1",
                "Option 2",
                "Option 3"
            }
                );

            var data = new DisplayQuestionMenu(menu).Compile();

            var question       = menu.Question;
            var questionLength = Math.Min(255, question.Length);
            var answersCount   = 0;
            var length         = 11 + questionLength;

            foreach (var answer in menu.Answers)
            {
                length += 5 + answer.Length;
                if (answersCount == 255)
                {
                    break;
                }

                answersCount++;
            }

            Span <byte> expectedData = stackalloc byte[length];

            var pos = 0;

            expectedData.Write(ref pos, (byte)0x7C); // Packet ID
            expectedData.Write(ref pos, (ushort)length);
            expectedData.Write(ref pos, menu.Serial);
            expectedData.Write(ref pos, (ushort)0x00);
            expectedData.Write(ref pos, (byte)question.Length);
            expectedData.WriteAscii(ref pos, question, 255);
            expectedData.Write(ref pos, (byte)answersCount);
            for (var i = 0; i < answersCount; i++)
            {
                var answer = menu.Answers[i];
#if NO_LOCAL_INIT
                expectedData.Write(ref pos, 0);
#else
                pos += 4;
#endif
                expectedData.Write(ref pos, (byte)Math.Min(255, answer.Length));
                expectedData.WriteAscii(ref pos, answer, 255);
            }

            AssertThat.Equal(data, expectedData);
        }
예제 #4
0
 public void Quit()
 {
     if (!isSaved)
     {
         PauseMenuObject.SetActive(false);
         QuestionMenu.YesNoQuestion("Quitter",
                                    "Votre partie n'est pas sauveardée.\nVoulez-vous vraiment quitter sans sauvegarder ? (votre partie sera perdue)",
                                    InternalQuit);
     }
     else
     {
         InternalQuit(true);
     }
 }
예제 #5
0
 public void ReturnStart()
 {
     ClearMessage();
     if (!isSaved)
     {
         PauseMenuObject.SetActive(false);
         QuestionMenu.YesNoQuestion("Quitter",
                                    "Votre partie n'est pas sauveardée.\nVoulez-vous vraiment retourner à l'accueil sans sauvegarder ? (votre partie sera perdue)",
                                    InternalReturnStart);
     }
     else
     {
         InternalReturnStart(true);
     }
 }
예제 #6
0
        public DisplayQuestionMenu(QuestionMenu menu) : base(0x7C)
        {
            EnsureCapacity(256);

            Stream.Write(((IMenu)menu).Serial);
            Stream.Write((short)0);

            var question = menu.Question;

            if (question == null)
            {
                Stream.Write((byte)0);
            }
            else
            {
                var questionLength = question.Length;
                Stream.Write((byte)questionLength);
                Stream.WriteAsciiFixed(question, questionLength);
            }

            var answers = menu.Answers;

            int answersLength = (byte)answers.Length;

            Stream.Write((byte)answersLength);

            for (var i = 0; i < answersLength; ++i)
            {
                Stream.Write(0);

                var answer = answers[i];

                if (answer == null)
                {
                    Stream.Write((byte)0);
                }
                else
                {
                    var answerLength = answer.Length;
                    Stream.Write((byte)answerLength);
                    Stream.WriteAsciiFixed(answer, answerLength);
                }
            }
        }
예제 #7
0
        public void TestDisplayQuestionMenu()
        {
            var menu = new QuestionMenu(
                "Which option would you choose?",
                new[]
            {
                "Option 1",
                "Option 2",
                "Option 3"
            }
                );

            string question       = menu.Question?.Trim() ?? "";
            int    questionLength = Math.Min(255, question.Length);

            int length = 11 + questionLength + menu.Answers.Sum(answer => 5 + answer?.Trim().Length ?? 0);

            Span <byte> data = new DisplayQuestionMenu(menu).Compile();

            Span <byte> expectedData = stackalloc byte[length];

            int pos = 0;

            expectedData[pos++] = 0x7C; // Packet ID
            ((ushort)length).CopyTo(ref pos, expectedData);
            menu.Serial.CopyTo(ref pos, expectedData);
            pos += 2; // ((ushort)0x00).CopyTo(ref pos, expectedData);
            expectedData[pos++] = (byte)questionLength;
            question?.CopyASCIITo(ref pos, expectedData);
            expectedData[pos++] = (byte)menu.Answers.Length;
            for (int i = 0; i < menu.Answers.Length; i++)
            {
                pos += 4; // 0x0.CopyTo(ref pos, expectedData);
                var answer = menu.Answers[i]?.Trim() ?? "";
                expectedData[pos++] = (byte)answer.Length;
                answer.CopyASCIITo(ref pos, expectedData);
            }

            AssertThat.Equal(data, expectedData);
        }
        // Methods
        public DisplayQuestionMenu(QuestionMenu menu) : base(124)
        {
            int    num3;
            string text2;
            int    num4;

            base.EnsureCapacity(256);
            this.m_Stream.Write(menu.Serial);
            this.m_Stream.Write(((short)0));
            string text1 = menu.Question;

            if (text1 == null)
            {
                text1 = "";
            }
            int num1 = ((byte)text1.Length);

            this.m_Stream.Write(((byte)num1));
            this.m_Stream.WriteAsciiFixed(text1, num1);
            string[] textArray1 = menu.Answers;
            int      num2       = ((byte)textArray1.Length);

            this.m_Stream.Write(((byte)num2));
            for (num3 = 0; (num3 < num2); ++num3)
            {
                this.m_Stream.Write(0);
                text2 = textArray1[num3];
                if (text2 == null)
                {
                    text2 = "";
                }
                num4 = ((byte)text2.Length);
                this.m_Stream.Write(((byte)num4));
                this.m_Stream.WriteAsciiFixed(text2, num4);
            }
        }