package Roguelike.Quests;
import Roguelike.DungeonGeneration.DungeonFileParser;
import Roguelike.Global;
import Roguelike.Quests.Input.AbstractQuestInput;
import Roguelike.Quests.Output.AbstractQuestOutputCondition;
import Roguelike.Quests.Output.QuestOutput;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.ObjectSet;
import com.badlogic.gdx.utils.XmlReader;
import java.io.IOException;
/**
* Created by Philip on 23-Jan-16.
*/
public class Quest
{
public Global.Rarity rarity;
public String path;
public Array<AbstractQuestInput> inputs = new Array<AbstractQuestInput>( );
public Array<QuestOutput> outputs = new Array<QuestOutput>( );
public Array<DungeonFileParser.DFPRoom> rooms = new Array<DungeonFileParser.DFPRoom>( );
public ObjectSet<String> allowedLevels = new ObjectSet<String>( );
public boolean evaluateInputs()
{
for (AbstractQuestInput input : inputs)
{
if (!input.evaluate())
{
return false;
}
}
return true;
}
public void evaluateOutputs()
{
for (QuestOutput output : outputs)
{
output.evaluate();
}
}
public void parse( XmlReader.Element xml )
{
rarity = Global.Rarity.valueOf( xml.get("Rarity", "Common").toUpperCase() );
XmlReader.Element inputsElement = xml.getChildByName( "Inputs" );
if (inputsElement != null)
{
for (int i = 0; i < inputsElement.getChildCount(); i++)
{
XmlReader.Element inputElement = inputsElement.getChild( i );
AbstractQuestInput input = AbstractQuestInput.load( inputElement );
inputs.add( input );
}
}
XmlReader.Element outputsElement = xml.getChildByName( "Outputs" );
if (outputsElement != null)
{
for (int i = 0; i < outputsElement.getChildCount(); i++)
{
XmlReader.Element outputElement = outputsElement.getChild( i );
QuestOutput output = new QuestOutput();
output.parse( outputElement );
outputs.add( output );
}
}
XmlReader.Element roomsElement = xml.getChildByName( "Rooms" );
for ( int i = 0; i < roomsElement.getChildCount(); i++ )
{
XmlReader.Element roomElement = roomsElement.getChild( i );
DungeonFileParser.DFPRoom room = DungeonFileParser.DFPRoom.parse( roomElement );
rooms.add( room );
}
allowedLevels.addAll(xml.get( "AllowedLevels", "any" ).split( "," ));
}
public static Quest load(String name)
{
Quest quest = new Quest();
quest.path = name;
XmlReader reader = new XmlReader();
XmlReader.Element xml = null;
try
{
xml = reader.parse( Gdx.files.internal( "Quests/" + name + ".xml" ) );
}
catch ( IOException e )
{
e.printStackTrace();
}
quest.parse( xml );
return quest;
}
}