Skip to content

Плеер: прокрутка лога игры

Mikhail edited this page Oct 28, 2023 · 7 revisions

Требования

Требования сформированы в запросе #88.

Правила прокрутки лога:

  1. После ввода команды игроком эта команда должна быть первой строкой в логе.
  2. После вывода текст в логе не по команде игрока (т.е. программно - например, по таймеру) начало выведенного текста должно быть первой строкой в логе.
  3. Блоки текста, выведенного по пунктам как 1, так и 2, должны отделяться друг от друга пустой строкой.

Видение полного решения

Общая архитектура

Вывод в лог осуществляется блоками. Блок может состоять из текста и картинок. Формирование блоков приведено в таблице ниже.

Ситуация Блок Прокрутка
Игрок ввёл команду Введённая игроком команда, а также всё, что выводится в ответ игры на команду. Первая строка лога - введённая игроком команда.
Сработал таймер Всё, что выводится по таймеру. Первая строка - начало блока.
Вызов стартовой процедуры при [ре]старте игры Всё, что выводится во время работы стартовой процедуры. Первая строка - начало блока.

Движок

Движок выводит медиа (текст и картинки) в плеер блоками.

Плеер

Плеер принимает от движка медиа блоками и выводит их. Прокручивает по правилам, описанным в разделе Требований.

Реализация

Модель

classDiagram
    OutputBlock <|-- CommandAnswerOutputBlock
    OutputBlock *-- OutputElement : содержит список

    class CommandAnswerOutputBlock {
        String PlayerCommand
    }

    <<abstract>> OutputElement
    OutputElement <|-- OutputTextElement
    OutputElement <|-- OutputImageElement

    class OutputTextElement {
        String Text
    }

    class OutputImageElement {
        Image Image
    }
Loading

Текущая реализация

sequenceDiagram
    VirtualMachine-->>+Engine: outText(text, args)
    Engine->>Engine: outputPlainText(text)
    Engine->>-IOutputPlainTextProvider: outputPlainText(text)

    VirtualMachine-->>+Engine: outIcon(filePath, maxHeight, maxWidth)
    Engine->>-IOutputIconProvider: outputIcon(icon)
Loading
Clone this wiki locally