O emulador de flash player do Ruffle no iOS
Trabalho em andamento.
Veja Ruffle.RS para uma introdução geral.
Escolhas de design
Uma pessoa normal pode ter envolvido a ferrugem em alguns extern "C" fn e depois usada SwiftUi, ou pelo menos Objetivo-C para a concha da interface do usuário. Eu provavelmente recomendaria isso para a maioria dos casos de uso.
Porém, estou desenvolvendo objc2 e quero melhorar a interface do usuário disso, então decidi ser um pouco desortodoxo e fazer tudo em ferrugem.
Teste
Execute o Core Player no Mac Catalyst com:
cargo bundle --target=aarch64-apple-ios-macabi --bin run_swf && ./target/aarch64-apple-ios-macabi/debug/bundle/ios/Ruffle.app/run_swf
Ui
Semelhante a https://getutm.app/, devemos ter:
- Uma biblioteca de links "instalados" SWFs/pacotes/salvados, editáveis.
- Ao selecionar um SWF, a barra de navegação no topo mostra várias opções
- Abertura do teclado (talvez?)
- Menu de contexto "Jogue, rebobinando, para a frente, de volta, etc."?
- Permitir a mudança entre a escala
- Botão traseiro para voltar à biblioteca
- "Add" e "Edit" são dois fluxos diferentes e devem mostrar duas UIs diferentes
- "Add" não precisa mostrar todas as configurações extras; Trata -se apenas de obter o arquivo. O usuário pode editá -lo mais tarde.
Configurações do item da biblioteca
As configurações são armazenadas por pacote de babados.
-
PlayerOptions- https://github.com/Ruffles/Ruffle/blob/master/frontend-utils/src/bunle/readme.md#player
- Entradas:
- Configurável
- Deslizar para as teclas de seta?
- https://openemu.org/ é muito bem, equivalente ao iOS?
- Nome personalizado?
- Imagem personalizada?
Idéias de armazenamento
Metas:
- Armazene um pacote de babados.
- Armazenar as configurações do usuário.
- Armazene dados O próprio SWF pode ter armazenado (o armazenamento de valor-chave).
- Sincronizar ao iCloud.
- Seja para trás e para frente compatível com novas versões do aplicativo Ruffle.
- Apitada para pacotes de trafue.
Então, queremos apoiar vários modos de lançamento:
- Pacote de importação permanentemente.
- Abra um pacote de babados sem importar.
- O que acontece quando um pacote se move em relação às configurações do usuário?
Os pacotes, quando importados, são desempacotados do ZIP, renomeados para bundle.ruf e mudados para a library/$random_uuid/ , para não entrar em conflito com outros pacotes com o mesmo nome. Os SWFs importados são convertidos em um pacote de babados com name = "file_stem", url = "file:///file_stem.swf" . Os arquivos são armazenados no disco no diretório do aplicativo. As configurações do usuário são armazenadas em settings.toml ao lado do bundle.ruf . Dados do aplicativo em app_data/ .
A regra para sincronizar é "vitórias mais recentes". Isso deve ficar bem se, por exemplo, o usuário modificar suas configurações em dois dispositivos diferentes, embora possa exigir uma lógica diferente para os dados do aplicativo.
Observe que poderíamos ter usado um modelo de dados principal, mas isso é difícil e não nos ajudará quando nossas configurações são definidas principalmente pelo pacote de babados.
Terminologia
O que chamamos de SWF? "Jogo"? "Filme"? "SWF"? "Animação Flash"?
Plano
- Faça a interface do usuário do traje em um
UIView - Faça uma maneira de iniciá -lo usando um SWF no dispositivo local
PENDÊNCIA
- Defina
idleTimerDisabled no momento apropriado - Use branco para rótulos, laranja para botões
- Adicionar botão de configurações no item da biblioteca
Escolhas
- Use intencionalmente
public.app-category.games para obter melhor desempenho ("modo de jogo" no macOS).- Esta não é necessariamente a escolha correta para o babado, mas é a mais próxima.
- Não faz sentido ter configurações raiz como na versão da área de trabalho
- Nenhuma barra de guia, não é realmente desejada, já que geralmente queremos que a interface do usuário do SWF preencha a maior parte da tela
- Embora se decidirmos adicionar uma maneira fácil de baixar de fontes "confiáveis", poderíamos adicionar uma barra de guia para isso
- Uma barra de navegação é útil
- Para exibir algumas configurações para o SWF atual
- Voltar para a biblioteca
- Esconder ao entrar em tela cheia?