package org.catrobat.html5player.client.bricks;
import org.catrobat.html5player.client.CatrobatDebug;
import org.catrobat.html5player.client.Sprite;
import org.catrobat.html5player.client.formulaeditor.Formula;
public class IfLogicBrick extends Brick {
private Brick ifAction = null;
private Brick elseAction = null;
private Formula ifCondition;
private boolean ifConditionValue;
//private boolean isInitialized = false;
private boolean isIfPartInitialized = false;
public IfLogicBrick(String spriteName, Formula ifCondition) {
super(spriteName);
this.ifCondition = ifCondition;
}
@Override
protected boolean execute(Sprite sprite) {
//TODO: cleanup initialization, condition has to be recheckt everytime!
/*if (!isInitialized) {
begin(sprite);
isInitialized = true;
}*/
begin(sprite);
CatrobatDebug.debug("iflogic executed with conditionvalue: " + ifConditionValue +" "+ sprite.getName());
if (ifConditionValue) {
if (ifAction == null) {
return true;
}
return ifAction.execute(sprite);
} else {
if (elseAction == null) {
return true;
}
return elseAction.execute(sprite);
}
}
protected void begin(Sprite sprite) {
ifConditionValue = ifCondition.interpretBoolean(sprite);
}
public void setIfAction(Brick ifAction) {
this.ifAction = ifAction;
}
public void setElseAction(Brick elseAction) {
this.elseAction = elseAction;
}
public void setIfCondition(Formula ifCondition) {
this.ifCondition = ifCondition;
}
public void addAction(Brick b, String spriteName) {
if (!this.isIfPartInitialized) {
if (this.ifAction == null) {
this.ifAction = b;
} else if (this.ifAction instanceof SequenceBrick) {
((SequenceBrick) this.ifAction).getBrickList().add(b);
} else {
SequenceBrick sb = new SequenceBrick(spriteName);
sb.getBrickList().add(this.ifAction);
sb.getBrickList().add(b);
this.ifAction = sb;
}
} else {
if (this.elseAction == null) {
this.elseAction = b;
} else if (this.elseAction instanceof SequenceBrick) {
((SequenceBrick) this.elseAction).getBrickList().add(b);
} else {
SequenceBrick sb = new SequenceBrick(spriteName);
sb.getBrickList().add(this.elseAction);
sb.getBrickList().add(b);
this.elseAction = sb;
}
}
}
public boolean isIfPartInitialized() {
return isIfPartInitialized;
}
public void setIfPartInitialized(boolean isIfPartInitialized) {
this.isIfPartInitialized = isIfPartInitialized;
}
}