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); }
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); }
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); }
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); } }
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); } }
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); } } }
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); } }