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

Fix crash by only triggering first node, add ClearAtoms action, more

parent bc6dabb9
......@@ -105,6 +105,7 @@ public class MainActivity extends AppCompatActivity {
}
if(OpenNodes.size()>0) mainThread.run();
else Log.d("Debug2", "NO OPEN NODE - GAME OVER");
}
public Node GetNode(int ID)
......
......@@ -46,7 +46,8 @@ public class MainThread implements Runnable {
// n.Trigger();
//NodeThread.run();
//NodeThread.join();
n.Trigger();
n.Trigger(); // Triggers only the first node
break;
//while(NodeThread.isAlive()) {};
//this.CheckOpenNodes();
}
......
......@@ -9,6 +9,7 @@ import com.example.qrquest.actions.AddNode;
import com.example.qrquest.actions.CaptureQR;
import com.example.qrquest.actions.CaptureSpeech;
import com.example.qrquest.actions.AbsoluteChecker;
import com.example.qrquest.actions.ClearAtoms;
import com.example.qrquest.actions.ClearNodes;
import com.example.qrquest.actions.RemoveAtom;
import com.example.qrquest.actions.RemoveNode;
......@@ -129,11 +130,19 @@ public class ScenarioLoader {
String name = parser.getName();
Log.d("Debug2", "action name read in xml: " + name);
if (name.equals("atom")) { // Add atom
if (name.equals("AddAtom")) {
Log.d("Debug2", "AddAtom action tag detected");
Actions.add(new AddAtom(mainActivity, nodeID, readAtom(parser)));
Actions.add(new AddAtom(mainActivity, nodeID, readAtom(parser, "AddAtom")));
Log.d("Debug2", "AddAtom action added");
}
else if (name.equals("RemoveAtom")) {
Log.d("Debug2", "AddAtom action tag detected");
Actions.add(new RemoveAtom(mainActivity, nodeID, readAtom(parser, "RemoveAtom")));
Log.d("Debug2", "AddAtom action added");
}
else if (name.equals("ClearAtoms")) {
Actions.add(new ClearAtoms(mainActivity, nodeID, getClassFromName(readText(parser, "ClearAtoms"))));
}
else if (name.equals("TTSReading")) {
Log.d("Debug2", "TTSReading action tag detected");
Actions.add(new TTSReading(mainActivity, nodeID, readText(parser, "TTSReading")));
......@@ -182,7 +191,7 @@ public class ScenarioLoader {
String name = parser.getName();
if (name.equals("atom")) {
Atoms.add(readAtom(parser));
Atoms.add(readAtom(parser, "atom"));
} else {
throw new Error("A non-atom tag was found in atom list in XML file");
}
......@@ -191,8 +200,8 @@ public class ScenarioLoader {
}
private Atom readAtom(XmlPullParser parser) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "atom");
private Atom readAtom(XmlPullParser parser, String tag) throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, tag);
String type = "", Content = "";
......@@ -213,10 +222,10 @@ public class ScenarioLoader {
}
else
{
throw new Error("An unexpected tag was found in an atom definition (other than type or content)");
throw new Error("An unexpected tag was found in an atom definition (other than type or content) in <" + tag + ">");
}
}
parser.require(XmlPullParser.END_TAG, ns, "atom");
parser.require(XmlPullParser.END_TAG, ns, tag);
if(type.equals("QRAtom")) return new QRAtom(Content);
else if(type.equals("SpeechAtom")) return new SpeechAtom(Content);
else if(type.equals("Any")) return new Any(Content);
......
package com.example.qrquest.actions;
import com.example.qrquest.MainActivity;
import com.example.qrquest.atom.Atom;
import java.util.ArrayList;
public class ClearAtoms extends Action {
private Class atom_class;
public ClearAtoms(MainActivity mainActivity, int nodeID, Class atom_class) {
super(mainActivity, nodeID);
this.atom_class = atom_class;
}
@Override
public void Do() {
super.Do();
ArrayList<Atom> AtomsToRemove = new ArrayList<Atom>();
for (Atom a:mainActivity.Atoms)
{
if(a.getClass() == atom_class) AtomsToRemove.add(a);
}
for(Atom a:AtomsToRemove) mainActivity.Atoms.remove(a);
End();
}
}
......@@ -9,6 +9,9 @@ public class RemoveAtom extends Action {
Atom _atom;
public RemoveAtom(MainActivity mainActivity, int nodeID, Atom atom) {
/*
* Remove a specific atom
*/
super(mainActivity, nodeID);
_atom = atom;
}
......
......@@ -30,14 +30,21 @@ public class Node {
public boolean CheckConditions(List<Atom> AvailableAtoms)
{
List<Atom> UnresolvedConditions = Conditions; // will be empty at the end if every requirement is met
List<Atom> UnresolvedConditions = new ArrayList<>();
UnresolvedConditions.addAll(Conditions); // will be empty at the end if every requirement is met
ArrayList<Atom> ResolvedConditions = new ArrayList<>();
for (Atom a1:AvailableAtoms) {
for(Atom a2:UnresolvedConditions)
{
if(a1.isSame(a2)) UnresolvedConditions.remove(a2);
if(a1.isSame(a2)) ResolvedConditions.add(a2);
}
}
for (Atom a :
ResolvedConditions) {
UnresolvedConditions.remove(a);
}
return (UnresolvedConditions.size() == 0);
}
......
......@@ -29,10 +29,6 @@ Dès le premier jour Ozgor essaya de s'échapper et Kouzou lui couru après pour
Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTSReading>
<RemoveNode>1</RemoveNode>
<AddNode>2</AddNode>
<atom>
<type>ItemAtom</type>
<content>0</content>
</atom>
</action_list>
</node>
......@@ -43,18 +39,40 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Choisis une destination !</TTSReading>
<AddNode>100</AddNode>
<AddNode>200</AddNode>
<AddNode>300</AddNode>
<AddNode>400</AddNode>
<AddNode>500</AddNode>
<AddNode>100</AddNode> <!-- home avec miroir (fin)-->
<AddNode>101</AddNode> <!-- home sans miroir (renvoi) -->
<AddNode>200</AddNode> <!-- mine -->
<AddNode>300</AddNode> <!-- port -->
<AddNode>400</AddNode> <!-- forgeron sable et fer -->
<AddNode>400</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>
<node> <!-- Triggers when a scanned QR isn't a destination -->
<id>3</id>
<required_atoms>
<atom>
<type>Any</type>
<content>QRAtom</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Le code scanné ne correspond pas à une destination !</TTSReading>
<ClearAtoms>QRAtom</ClearAtoms>
<AddNode>2</AddNode>
</action_list>
</node>
<node> <!-- Home -->
<node> <!-- Home avec miroir -->
<id>100</id>
<required_atoms>
......@@ -62,11 +80,44 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<type>QRAtom</type>
<content>QRQUESThutte</content>
</atom>
<atom>
<type>ItemAtom</type>
<content>400</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Bienvenue à la hutte</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>
<node> <!-- Home sans miroir -->
<id>101</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QRQUESThutte</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Non, je n'ai pas encore fini de fabriquer le miroir je reviendrais quand j'aurais terminé</TTSReading>
<AddNode>2</AddNode>
</action_list>
</node>
<node> <!-- auto loop node -->
<id>102</id>
<required_atoms>
</required_atoms>
<action_list>
</action_list>
</node>
......@@ -81,6 +132,7 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
</required_atoms>
<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>
<CaptureSpeech></CaptureSpeech>
......@@ -101,13 +153,14 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
</required_atoms>
<action_list>
<ClearAtoms>SpeechAtom</ClearAtoms>
<ClearNodes></ClearNodes>
<TTSReading>Le cadenas est déverouillé et Kouzou a pu prendre tout le fer dont il a besoin.</TTSReading>
<!-- Add fer -->
<atom>
<AddAtom>
<type>ItemAtom</type>
<content>100</content>
</atom>
</AddAtom>
<AddNode>2</AddNode>
</action_list>
</node>
......@@ -123,6 +176,7 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
</required_atoms>
<action_list>
<ClearAtoms>SpeechAtom</ClearAtoms>
<ClearNodes></ClearNodes>
<TTSReading>Zut ce n'est pas ça, il faut que je retourne m'entraîner.</TTSReading>
<AddNode>2</AddNode>
......@@ -159,6 +213,7 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Bienvenue au port</TTSReading>
</action_list>
</node>
......@@ -175,6 +230,7 @@ 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>
</action_list>
</node>
......@@ -191,14 +247,54 @@ Aide Kouzou à fabriquer le miroir afin de le sortir de ce mauvais pas. --></TTS
<action_list>
<ClearNodes></ClearNodes>
<TTSReading>Bienvenue chez le menuisier</TTSReading>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Kouzou entre chez le menuisier. Le menuisier lui dit "Je peux te fabriquer un cadre, mais il faut que tu m'aides à retrouver le bon modèle. Je cherche un cadre en forme de losange, peux tu me montrer le bon modèle ?"
Montre au menuisier la bonne forme en scannant son code !"</TTSReading>
<CaptureQR></CaptureQR>
<AddNode>501</AddNode>
<AddNode>502</AddNode>
</action_list>
</node>
<node> <!-- Menuisier success -->
<id>501</id>
<required_atoms>
<atom>
<type>QRAtom</type>
<content>QUQUESTshape_losange</content>
</atom>
</required_atoms>
<action_list>
<ClearNodes></ClearNodes>
<ClearAtoms>QRAtom</ClearAtoms>
<TTSReading>Grâce au modèle, le menuisier fabrique un joli cadre pour le miroir de Kouzou."</TTSReading>
<AddAtom>
<type>ItemAtom</type>
<content>500</content>
</AddAtom>
<AddNode>2</AddNode>
</action_list>
</node>
<node> <!-- Menuisier fail QR atom catcher -->
<id>502</id>
<required_atoms>
<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> <!-- Test -->
<id>99</id>
......
shapes.png

21.6 KB | W: | H:

shapes.png

28.4 KB | W: | H:

shapes.png
shapes.png
shapes.png
shapes.png
  • 2-up
  • Swipe
  • Onion skin
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