Эмулятор плеера Flash Ruffle на iOS
Работа в процессе.
См. Ruffle.rs для общего введения.
Выбор дизайна
Нормальный человек мог обернуть ржавчину на какую-то extern "C" fn S, а затем использовал Swiftui или, по крайней мере, Objective-C для оболочки пользовательского интерфейса. Я бы, наверное, рекомендовал бы это для большинства случаев использования.
Я разрабатываю objc2 , и я хочу улучшить пользовательское интерфейс этого, поэтому я решил быть немного неорганизованным и делать все в ржавчине.
Тестирование
Запустите основной игрок на Mac Catalyst с:
cargo bundle --target=aarch64-apple-ios-macabi --bin run_swf && ./target/aarch64-apple-ios-macabi/debug/bundle/ios/Ruffle.app/run_swf
UI
Похоже на https://getutm.app/, мы должны иметь:
- Библиотека «Установленных» SWFS/Bundles/Saved Links, редактируемые.
- При выборе SWF навигационная панель вверху показывает различные варианты
- Открытие клавиатуры (может быть?)
- Контекстное меню «Игра, перемотка, вперед, назад и т. Д.»?
- Разрешить изменение между масштабами
- Кнопка назад, чтобы вернуться в библиотеку
- «Добавить» и «Редактировать» - это два разных потока, и они должны показывать два разных интерфейса
- «Добавить» не должен показывать все дополнительные настройки; Речь идет только о получении файла. Пользователь может отредактировать его позже.
Настройки элемента библиотеки
Настройки хранятся на пакет рюши.
-
PlayerOptions- https://github.com/ruffle-rs/ruffle/blob/master/frontend-utils/src/bundle/readme.md#player
- Входные данные:
- Настраивается
- Пытать для клавиш стрелы?
- https://openemu.org/ Это довольно хорошо, эквивалентно для iOS?
- Пользовательское имя?
- Пользовательский изображение?
Идеи хранения
Цели:
- Храните пакет с рюшами.
- Хранить настройки пользователя.
- Хранили данные, сама SWF мог храниться (магазин ключевых значений).
- Синхронизирован с iCloud.
- Будьте назад и вперед, совместимы с новыми версиями приложения Ruffle.
- Поддержание для обмоток пучков.
Итак, мы хотим поддержать несколько режимов запуска:
- Импорт пакет навсегда.
- Откройте пакет с рюшами без импорта.
- Что происходит, когда пакет перемещался по сравнению с настройками пользователя?
Связки, когда импортируются, непаковываются от ZIP, переименованы в bundle.ruf и переходят в library/$random_uuid/ , не конфликтовать с другими связками с тем же именем. Импортированные SWF преобразуются в пакет Ruffle с name = "file_stem", url = "file:///file_stem.swf" . Файлы хранятся на диске в каталоге приложения. Настройки пользователя хранятся в settings.toml bundle.ruf Данные приложения в app_data/ .
Правило для синхронизации - «новейшие победы». Это должно быть хорошо, если, например, пользователь изменил свои настройки на двух разных устройствах, хотя может потребоваться различная логика для данных приложения.
Обратите внимание, что мы могли бы использовать основную модель данных, но это сложно и не поможет нам, когда наши настройки в основном определяются пакетом Ruffle.
Терминология
Как мы называем SWF? "Игра"? "Фильм"? "SWF"? «Флэш -анимация»?
План
- Получите reffle ui, работающий в
UIView - Проверьте какой -нибудь способ запустить его, используя SWF на локальном устройстве
Тодо
- Установите
idleTimerDisabled в подходящее время - Используйте белый для ярлыков, оранжевый для кнопок
- Добавить кнопку «Настройки» в элемент библиотеки
Выбор
- Намеренно используйте
public.app-category.games , чтобы получить лучшую производительность («игровой режим» на macOS).- Это не обязательно правильный выбор для Ruffle, но это самый близкий.
- Не имеет смысла иметь корневые настройки, как в настольной версии
- Нет панели вкладок, не очень желательно, так как мы, как правило, хотим, чтобы пользовательский интерфейс SWF заполнил большую часть экрана
- Хотя, если мы решим добавить простой способ загрузки из «доверенных» источников, мы могли бы добавить панель вкладок для этого
- Навигационная планка полезна, хотя
- Чтобы отобразить некоторые настройки для текущего SWF
- Вернуться в библиотеку
- Скрыть при входе на полный экран?