package Roguelike.Dialogue;
import Roguelike.Dialogue.DialogueManager.ReturnType;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.XmlReader.Element;
public class DialogueActionBranch extends AbstractDialogueAction
{
public Array<BranchWrapper> branches = new Array<BranchWrapper>();
public int currentBranch = -1;
@Override
public ReturnType process()
{
if ( currentBranch == -1 )
{
for ( int i = 0; i < branches.size; i++ )
{
if ( processCondition( branches.get( i ).condition, branches.get( i ).reliesOn ) )
{
currentBranch = i;
branches.get( currentBranch ).dialogue.index = 0;
break;
}
}
}
if ( currentBranch != -1 )
{
ReturnType returnType = branches.get( currentBranch ).dialogue.advance();
if ( returnType != ReturnType.RUNNING && branches.get( currentBranch ).dialogue.index == branches.get( currentBranch ).dialogue.actions.size )
{
currentBranch = -1;
return returnType;
}
else
{
return ReturnType.RUNNING;
}
}
else
{
return ReturnType.ADVANCE;
}
}
@Override
public void parse( Element xml )
{
for ( int i = 0; i < xml.getChildCount(); i++ )
{
branches.add( BranchWrapper.load( xml.getChild( i ), manager ) );
}
}
private static class BranchWrapper
{
public Dialogue dialogue;
public String condition;
public String[] reliesOn;
public void parse( Element xml, DialogueManager manager )
{
condition = xml.get( "Condition" ).toLowerCase();
reliesOn = xml.getAttribute( "ReliesOn", "" ).toLowerCase().split( "," );
dialogue = Dialogue.load( xml, manager );
}
public static BranchWrapper load( Element xml, DialogueManager manager )
{
BranchWrapper bw = new BranchWrapper();
bw.parse( xml, manager );
return bw;
}
}
}