Commit f59a3700 authored by Martin LOISEAU's avatar Martin LOISEAU 🎄
Browse files

Add port and forgeron to scenario, bug fixes

parent 1ba648ea
......@@ -14,4 +14,4 @@ Le point d'entrée du scénario est la première node du scénario, qui ne doit
Ce projet est un prototype. La license permet la réutilisation du code sans contraintes.
Contact: martin.loiseau1@etu.univ-nantes.fr
\ No newline at end of file
Contact : martin.loiseau1@etu.univ-nantes.fr
\ No newline at end of file
These files are the original edit files with layers from the png pictures.
You can open them with aseprite if you wish to edit them.
Font used is Rouli : https://drive.google.com/drive/u/0/folders/1SeA4el8y83xyz9u8n_6lLHtElX7qC9UQ
\ No newline at end of file
No preview for this file type
poeme.png

93.3 KB

......@@ -100,15 +100,16 @@ public class MainActivity extends AppCompatActivity {
*/
// this supposedly prevents java.util.ConcurrentModificationException
if(NodesToAdd.size()>0) {
OpenNodes.addAll(NodesToAdd);
NodesToAdd.clear();
}
if(NodesToRemove.size()>0) {
OpenNodes.removeAll(NodesToRemove);
NodesToRemove.clear();
}
if(NodesToAdd.size()>0) {
OpenNodes.addAll(NodesToAdd);
NodesToAdd.clear();
}
// mainThread contains the rest of the logic
// threading should prevent blocking of use but as it is user input seems still locked for some actions (TTS)
if(OpenNodes.size()>0) mainThread.run();
......
......@@ -16,6 +16,7 @@ public class MainThread implements Runnable {
public void CheckOpenNodes() {
Log.d("Debug2", "CheckOpenNodes called");
Log.d("Debug2", "===================================================================");
Log.d("Debug2", "Open Nodes:");
// First we display every open node and every atom (useful for debug)
for (Node n : mainActivity.OpenNodes)
......@@ -32,6 +33,7 @@ public class MainThread implements Runnable {
{
Log.d("Debug2", a.displayType() + a.GetStringValue());
}
Log.d("Debug2", "===================================================================");
// Then we check every node and trigger the first one twhere the conditions are satisfied (every required atom present)
for (Node n : mainActivity.OpenNodes)
......
package com.example.qrquest.actions;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import com.example.qrquest.MainActivity;
import com.example.qrquest.TTSReader;
......@@ -22,6 +23,7 @@ public class TTSReading extends Action {
super.Do();
// read TextToRead
mainActivity.ttsreader.PlayTTS(TextToRead);
Log.d("Debug2", "Reading : \"" + TextToRead + "\"");
while(!mainActivity.ttsreader.isOver()) {} // block while speaking
// This seems to blocks other inputs from the player such as changing volume
End();
......
......@@ -46,11 +46,10 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<AddNode>200</AddNode> <!-- mine -->
<AddNode>300</AddNode> <!-- port -->
<AddNode>400</AddNode> <!-- forgeron sable et fer -->
<AddNode>400</AddNode> <!-- forgeron rien (renvoi) -->
<AddNode>401</AddNode> <!-- forgeron rien (renvoi) -->
<AddNode>500</AddNode> <!-- menuisier -->
<AddNode>3</AddNode> <!-- scanned QR isn't a destination -->
<CaptureQR></CaptureQR>
<RemoveNode>2</RemoveNode>
</action_list>
</node>
......@@ -88,7 +87,8 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Kouzou est de retour avec le miroir. Il récite la formule magique et le miroir s'illumine. "Ça y est j'ai réussi s'exclame Kouzou !". Kouzou remet le miroir à sa place, tout est bien qui finit bien !</TTSReading>
<TTSReading>Kouzou est de retour avec le miroir. Il récite la formule magique et le miroir s'illumine.
"Ça y est j'ai réussi s'exclame Kouzou !". Kouzou remet le miroir à sa place, tout est bien qui finit bien !</TTSReading>
<AddNode>102</AddNode>
</action_list>
</node>
......@@ -134,7 +134,9 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<action_list>
<ClearAtoms>QRAtom</ClearAtoms>
<ClearNodes></ClearNodes>
<TTSReading>Kouzou arrive à la vieille mine de fer du village. À l'intérieur, il pourra trouver le fer dont il a besoin. Mais sur la porte de la mine, il y a un gros cadenas à 3 chiffres. Au dessus du cadenas, il est marqué : "Pour ouvrir le cadenas tu dois savoir multiplier 7 par 8". Quel nombre doit saisir Kouzou pour déverrouiller le cadenas ?</TTSReading>
<TTSReading>Kouzou arrive à la vieille mine de fer du village. À l'intérieur, il pourra trouver le fer dont il a besoin. Mais sur la porte de la mine,
il y a un gros cadenas à 3 chiffres. Au dessus du cadenas, il est marqué : "Pour ouvrir le cadenas tu dois savoir multiplier 7 par 8".
Quel nombre doit saisir Kouzou pour déverrouiller le cadenas ?</TTSReading>
<CaptureSpeech></CaptureSpeech>
<AddNode>201</AddNode>
<AddNode>202</AddNode>
......@@ -159,7 +161,7 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<!-- Add fer -->
<AddAtom>
<type>ItemAtom</type>
<content>100</content>
<content>200</content>
</AddAtom>
<AddNode>2</AddNode>
</action_list>
......@@ -214,19 +216,105 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Kouzou arrive au port et voit des pêcheurs. Il s'approche de l'un d'eux et lui demande si il peut avoir du sable pour son miroir. Le pêcheur lui répond : "Je te donnerai du sable si tu m'aides à corriger la lettre que j'écris à la belle sirène Séphora". Oulala, tous les verbes de la lettre ne sont pas conjugués, aide Kouzou à corriger la lettre.</TTSReading>
<TTSReading>Kouzou arrive au port et voit des pêcheurs.
Il s'approche de l'un d'eux et lui demande si il peut avoir du sable pour son miroir.
Le pêcheur lui répond : "Je te donnerai du sable si tu m'aides à corriger la lettre que j'écris à la belle sirène Séphora".
Oulala, tous les verbes de la lettre ne sont pas conjugués, aide Kouzou à corriger la lettre.
Scanne le code du bon verbe pour la première ligne du poème !</TTSReading>
<CaptureQR></CaptureQR>
<AddNode>301</AddNode>
<AddNode>305</AddNode>
</action_list>
</node>
<node> <!-- Port success -->
<node> <!-- Port premier ver detection -->
<id>301</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QRQUESTgrammar_es</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Bravo !
Tu es la plus belle des sirènes...
Complète maintenant le deuxième ver !</TTSReading>
<CaptureQR></CaptureQR>
<AddNode>302</AddNode>
<AddNode>305</AddNode>
</action_list>
</node>
<node> <!-- Port deuxième ver detection -->
<id>302</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QRQUESTgrammar_ai</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Bravo !
Quand tu pars, j'ai trop de peine,
Complète maintenant la troisième ligne !</TTSReading>
<CaptureQR></CaptureQR>
<AddNode>303</AddNode>
<AddNode>305</AddNode>
</action_list>
</node>
<node> <!-- Port troisième ver detection -->
<id>303</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QRQUESTgrammar_sommes</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Le pêcheur est fou de joie et donne à Kouzou un sac de sable qui lui sera bien utile.</TTSReading>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Bravo !
Nous sommes faits l'un pour l'autre,
Complète maintenant la dernière ligne !</TTSReading>
<CaptureQR></CaptureQR>
<AddNode>304</AddNode>
<AddNode>305</AddNode>
</action_list>
</node>
<node> <!-- Port dernier ver success -->
<id>304</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QRQUESTgrammar_attendrai</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading> Bravo, le poème est complété !
Tu es la plus belle des sirènes,
Quand tu pars, j'ai trop de peine,
Nous sommes faits l'un pour l'autre,
Je t'attendrai sur la plage près du rocher des pirates.
Le pêcheur est fou de joie et donne à Kouzou un sac de sable qui lui sera bien utile.</TTSReading>
<AddAtom>
<type>ItemAtom</type>
<content>300</content>
......@@ -236,28 +324,56 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
</node>
<node> <!-- Port fail -->
<id>302</id>
<id>305</id>
<required_atoms>
<!--
<type>Any</type>
<content></content> -->
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Zut ce n'est pas ça, il faut que je retourne m'entraîner.</TTSReading>
<AddAtom>
<type>ItemAtom</type>
<content>300</content>
</AddAtom>
<AddNode>2</AddNode>
</action_list>
<atom>
<type>Any</type>
<content>QRAtom</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Zut ce n'est pas ça, il faut que je retourne m'entraîner.</TTSReading>
<AddNode>2</AddNode>
</action_list>
</node>
<node> <!-- Forgeron -->
<id>400</id>
<id>400</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QRQUESTforgeron</content>
</atom>
<atom>
<type>ItemAtom</type>
<content>200</content> <!-- sable -->
</atom>
<atom>
<type>ItemAtom</type>
<content>300</content> <!-- fer -->
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Kouzou apporte chez le forgeron le sable et le fer qu'il a trouvé.
Le forgeron lui dit : Aides moi à faire un peu de tri parmis mes métaux.
Peux tu me dire quel est le métal le plus léger de la liste ?</TTSReading>
<AddNode>402</AddNode>
<AddNode>405</AddNode>
<CaptureSpeech></CaptureSpeech>
</action_list>
</node>
<node> <!-- Forgeron sans sable et fer -->
<id>401</id>
<required_atoms>
<atom>
<type>QRAtom</type>
......@@ -268,7 +384,70 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Bienvenue chez le forgeron</TTSReading>
<TTSReading>Kouzou entre chez le forgeron lui demandant de l'aide pour fabriquer son miroir. Je peux t'aider si tu m'apportes du sable et du fer.</TTSReading>
<AddNode>2</AddNode>
</action_list>
</node>
<node> <!-- Forgeron métal le plus léger -->
<id>402</id>
<required_atoms>
<atom>
<type>SpeechAtom</type>
<content>or</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>SpeechAtom</ClearAtoms>
<TTSReading> Le forgeron semble content :
Merci, l'or est bien le métal le plus léger de la liste !
Maintenant peux-tu me dire quel est le métal le plus lourd ?</TTSReading>
<AddNode>403</AddNode>
<AddNode>405</AddNode>
<CaptureSpeech></CaptureSpeech>
</action_list>
</node>
<node> <!-- Forgeron métal le plus lourd -->
<id>403</id>
<required_atoms>
<atom>
<type>SpeechAtom</type>
<content>cuivre</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>SpeechAtom</ClearAtoms>
<TTSReading> Bravo Kouzou, s'exclame le forgeon ! Prend ce miroir. Mais attention, tu auras besoin d'un joli cadre pour le maintenir.</TTSReading>
<AddNode>2</AddNode>
<AddAtom>
<type>ItemAtom</type>
<content>400</content>
</AddAtom>
</action_list>
</node>
<node> <!-- Forgeron échec -->
<id>405</id>
<required_atoms>
<atom>
<type>Any</type>
<content>SpeechAtom</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>SpeechAtom</ClearAtoms>
<TTSReading> Non, c'est le mauvais métal, retourne t'entrainer ! dis le forgeron à Kouzou. </TTSReading>
<AddNode>2</AddNode>
</action_list>
</node>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment