package Roguelike.Save;
import Roguelike.Ability.AbilityTree;
/**
* Created by Philip on 16-Dec-15.
*/
public class SaveAbilityTree extends SaveableObject<AbilityTree>
{
public String treePath;
public SaveAbilityStage root;
public String currentName;
@Override
public void store( AbilityTree obj )
{
treePath = obj.treePath;
root = new SaveAbilityStage();
root.store( obj.root );
currentName = obj.current.current.getName();
}
@Override
public AbilityTree create()
{
AbilityTree tree = new AbilityTree( treePath );
writeData( tree );
return tree;
}
public void writeData(AbilityTree tree)
{
tree.current = root.writeData( tree.root, currentName );
}
public static class SaveAbilityStage extends SaveableObject<AbilityTree.AbilityStage>
{
public int level;
public int exp;
public int expToNextLevel;
public int cooldown;
public SaveAbilityStage branch1;
public SaveAbilityStage branch2;
@Override
public void store( AbilityTree.AbilityStage obj )
{
level = obj.level;
exp = obj.exp;
expToNextLevel = obj.expToNextLevel;
cooldown = obj.current.getCooldown();
if (obj.branch1 != null)
{
branch1 = new SaveAbilityStage();
branch1.store( obj.branch1 );
branch2 = new SaveAbilityStage();
branch2.store( obj.branch2 );
}
}
@Override
public AbilityTree.AbilityStage create()
{
return null;
}
public AbilityTree.AbilityStage writeData( AbilityTree.AbilityStage stage, String currentName )
{
stage.level = level;
stage.exp = exp;
stage.expToNextLevel = expToNextLevel;
stage.current.setCooldown( cooldown );
AbilityTree.AbilityStage currentStage = stage.current.getName() == currentName || stage.current.getName().equals( currentName ) ? stage : null;
if (stage.branch1 != null)
{
AbilityTree.AbilityStage temp = branch1.writeData( stage.branch1, currentName );
if (temp != null) { currentStage = temp; }
temp = branch2.writeData( stage.branch2, currentName );
if (temp != null) { currentStage = temp; }
}
return currentStage;
}
}
}