L'émulateur de lecteur Ruffle Flash sur iOS
Travail en cours.
Voir Ruffle.RS pour une introduction générale.
Choix de conception
Une personne normale a peut-être enveloppé la rouille dans certains extern "C" fn , puis a utilisé Swiftui, ou du moins objectif-C pour la coque d'interface utilisateur. Je recommanderais probablement cela pour la plupart des cas d'utilisation.
Je développe cependant objc2 , et je veux améliorer l'interface de l'utilisateur, alors j'ai décidé d'être un peu peu désarodoxes et de tout faire en rouille.
Essai
Exécutez le lecteur principal sur Mac Catalyst avec:
cargo bundle --target=aarch64-apple-ios-macabi --bin run_swf && ./target/aarch64-apple-ios-macabi/debug/bundle/ios/Ruffle.app/run_swf
Ui
Semblable à https://getutm.app/, nous devrions avoir:
- Une bibliothèque de liens SWFS / Bundles / enregistrés "installés", modifiables.
- Lors de la sélection d'un SWF, la barre de navigation en haut affiche diverses options
- Clavier d'ouverture (peut-être?)
- Menu contextuel "Play, rembobinage, avant, dos, etc."?
- Permettre de changer entre l'échelle
- Bouton de retour pour revenir à la bibliothèque
- "Ajouter" et "éditer" sont deux flux différents, et devraient afficher deux UIS différentes
- "Ajouter" n'a pas à afficher tous les paramètres supplémentaires; Il s'agit seulement d'obtenir le fichier. L'utilisateur peut le modifier plus tard.
Paramètres de l'élément de bibliothèque
Les paramètres sont stockés par paquet à volants.
-
PlayerOptions- https://github.com/ruffle-rs/ruffle/blob/master/fronttend-utils/src/bundle/readme.md#player
- Entrées:
- Configurable
- Glissez les touches de flèches?
- https://openemu.org/ fait-il assez bien, équivalent pour iOS?
- Nom personnalisé?
- Image personnalisée?
Idées de stockage
Objectifs:
- Stockez un paquet à volants.
- Stocker les paramètres des utilisateurs.
- Stocker les données que le SWF lui-même peut avoir stocké (le magasin de valeurs clés).
- Synchronisation avec iCloud.
- Soyez en arrière et transmettez-vous compatible avec les nouvelles versions de l'application Ruffle.
- Maintenu pour les paquets à volants.
Nous voulons donc prendre en charge plusieurs modes de lancement:
- Importer le faisceau en permanence.
- Ouvrez un paquet à volants sans importer.
- Que se passe-t-il lorsqu'un bundle s'est déplacé par rapport aux paramètres utilisateur?
Les faisceaux, lorsqu'ils sont importés, sont déballés de Zip, renommés à bundle.ruf et déplacés vers library/$random_uuid/ , pour ne pas entrer en conflit avec d'autres bundles avec le même nom. Les SWF importés sont convertis en un bundle à volants avec name = "file_stem", url = "file:///file_stem.swf" . Les fichiers sont stockés sur le disque dans le répertoire de l'application. Les paramètres utilisateur sont stockés dans settings.toml à côté de bundle.ruf . Données d'application dans app_data/ .
La règle pour la synchronisation est "les plus récentes". Cela devrait être bien si par exemple, l'utilisateur a modifié ses paramètres sur deux appareils différents, mais peut nécessiter une logique différente pour les données d'application.
Notez que nous aurions pu utiliser un modèle de données de base, mais cela est difficile et ne nous aidera pas vraiment lorsque nos paramètres sont principalement définis par le pack à volants.
Terminologie
Comment appelons-nous un SWF? "Jeu"? "Film"? "SWF"? "Animation flash"?
Plan
- Faites fonctionner l'interface utilisateur à volants dans un
UIView - Tirez un moyen pour le démarrer à l'aide d'un SWF sur l'appareil local
FAIRE
- Définir
idleTimerDisabled au moment approprié - Utilisez du blanc pour les étiquettes, orange pour les boutons
- Ajouter le bouton Paramètres dans l'élément de bibliothèque
Choix
- Utilisez intentionnellement
public.app-category.games pour obtenir de meilleures performances ("mode de jeu" sur macOS).- Ce n'est pas nécessairement le bon choix pour Ruffle, mais c'est le plus proche.
- Il n'a pas de sens d'avoir des paramètres racine comme dans la version de bureau
- Pas de barre d'onglet, pas vraiment souhaité, car nous voulons généralement que l'interface utilisateur SWF remplit la majeure partie de l'écran
- Bien que si nous décidons d'ajouter un moyen facile de télécharger à partir de sources "de confiance", nous pourrions ajouter une barre d'onglet pour cela
- Une barre de navigation est utile cependant
- Pour afficher certains paramètres pour le SWF actuel
- Retourner à la bibliothèque
- Vous masquer lors de l'entrée en plein écran?