Skip to content

Commit 1c8fa28

Browse files
committed
CATROID-766 Fix CheckStyle warnings
1 parent ee88306 commit 1c8fa28

12 files changed

+110
-4
lines changed

catroid/src/main/java/org/catrobat/catroid/content/ConditionScriptTrigger.java

+43-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
package org.catrobat.catroid.content;
2525

26+
import android.os.SystemClock;
2627
import android.util.Log;
2728

2829
import org.catrobat.catroid.ProjectManager;
@@ -45,6 +46,13 @@ public class ConditionScriptTrigger {
4546
static final int ALREADY_TRIGGERED = 1;
4647
private static final String TAG = ConditionScriptTrigger.class.getSimpleName();
4748

49+
private boolean sceneFirstStart = false;
50+
private boolean sceneRestarted = false;
51+
private boolean sceneAlreadyStarted = false;
52+
53+
private long startTime = 0;
54+
static final long EVALUATE_AND_TRIGGER_ACTIONS_THRESHOLD = 200;
55+
4856
@TriggerStatus
4957
private int status = TRIGGER_NOW;
5058
private final Formula formula;
@@ -56,7 +64,28 @@ public class ConditionScriptTrigger {
5664
void evaluateAndTriggerActions(Sprite sprite) {
5765
try {
5866
Scope scope = new Scope(ProjectManager.getInstance().getCurrentProject(), sprite, null);
59-
boolean conditionValue = formula.interpretBoolean(scope);
67+
boolean conditionValue = false;
68+
69+
if (sceneFirstStart || sceneRestarted) {
70+
if (startTime == 0) {
71+
startTime = SystemClock.uptimeMillis();
72+
} else {
73+
long elapsedTime = SystemClock.uptimeMillis() - startTime;
74+
75+
if (elapsedTime >= EVALUATE_AND_TRIGGER_ACTIONS_THRESHOLD) {
76+
if (sceneFirstStart) {
77+
sceneFirstStart = false;
78+
} else if (sceneRestarted) {
79+
sceneRestarted = false;
80+
}
81+
startTime = 0;
82+
conditionValue = formula.interpretBoolean(scope);
83+
}
84+
}
85+
} else {
86+
conditionValue = formula.interpretBoolean(scope);
87+
}
88+
6089
if (conditionValue) {
6190
triggerScript(sprite);
6291
} else {
@@ -75,6 +104,19 @@ private void triggerScript(Sprite sprite) {
75104
}
76105
}
77106

107+
public void updateSceneFirstStart() {
108+
sceneFirstStart = true;
109+
sceneAlreadyStarted = true;
110+
}
111+
112+
public void resetStartTimeIfSceneRestarted() {
113+
if (sceneAlreadyStarted) {
114+
startTime = 0;
115+
sceneRestarted = true;
116+
sceneFirstStart = false;
117+
}
118+
}
119+
78120
@Override
79121
public boolean equals(Object o) {
80122
if (this == o) {

catroid/src/main/java/org/catrobat/catroid/content/Sprite.java

+46-2
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,15 @@
4242
import org.catrobat.catroid.content.actions.ScriptSequenceAction;
4343
import org.catrobat.catroid.content.bricks.Brick;
4444
import org.catrobat.catroid.content.bricks.FormulaBrick;
45+
import org.catrobat.catroid.content.bricks.IfLogicBeginBrick;
46+
import org.catrobat.catroid.content.bricks.IfThenLogicBeginBrick;
4547
import org.catrobat.catroid.content.bricks.PlaySoundBrick;
4648
import org.catrobat.catroid.content.bricks.UserDefinedBrick;
4749
import org.catrobat.catroid.content.bricks.WhenConditionBrick;
4850
import org.catrobat.catroid.content.eventids.EventId;
4951
import org.catrobat.catroid.embroidery.RunningStitch;
5052
import org.catrobat.catroid.formulaeditor.Formula;
53+
import org.catrobat.catroid.formulaeditor.FormulaElement;
5154
import org.catrobat.catroid.formulaeditor.UserData;
5255
import org.catrobat.catroid.formulaeditor.UserList;
5356
import org.catrobat.catroid.formulaeditor.UserVariable;
@@ -364,12 +367,53 @@ public void initConditionScriptTriggers() {
364367
for (Script script : scriptList) {
365368
if (script instanceof WhenConditionScript) {
366369
WhenConditionBrick conditionBrick = (WhenConditionBrick) script.getScriptBrick();
367-
Formula condition = conditionBrick.getFormulaWithBrickField(Brick.BrickField.IF_CONDITION);
368-
conditionScriptTriggers.add(new ConditionScriptTrigger(condition));
370+
Formula formula = conditionBrick.getFormulaWithBrickField(Brick.BrickField.IF_CONDITION);
371+
ConditionScriptTrigger conditionScriptTrigger = new ConditionScriptTrigger(formula);
372+
373+
if (waitBeforeCheckingCollision(formula)) {
374+
conditionScriptTrigger.updateSceneFirstStart();
375+
}
376+
conditionScriptTriggers.add(conditionScriptTrigger);
377+
}
378+
}
379+
}
380+
381+
public void resetConditionScriptTriggers() {
382+
for (ConditionScriptTrigger conditionScriptTrigger : conditionScriptTriggers) {
383+
conditionScriptTrigger.resetStartTimeIfSceneRestarted();
384+
}
385+
}
386+
387+
public void initIfConditionBrickTriggers() {
388+
for (Script script : scriptList) {
389+
if (!script.getBrickList().isEmpty()) {
390+
Brick brick = script.getBrickList().get(0);
391+
392+
if (brick instanceof IfThenLogicBeginBrick) {
393+
for (Formula formula : ((IfThenLogicBeginBrick) brick).getFormulas()) {
394+
if (waitBeforeCheckingCollision(formula)) {
395+
formula.sceneFirstStart(true);
396+
}
397+
}
398+
} else if (brick instanceof IfLogicBeginBrick) {
399+
for (Formula formula : ((IfLogicBeginBrick) brick).getFormulas()) {
400+
if (waitBeforeCheckingCollision(formula)) {
401+
formula.sceneFirstStart(true);
402+
}
403+
}
404+
}
369405
}
370406
}
371407
}
372408

409+
boolean waitBeforeCheckingCollision(Formula formula) {
410+
boolean wait = false;
411+
if (formula.getRoot() != null) {
412+
wait = formula.getRoot().getElementType() == FormulaElement.ElementType.COLLISION_FORMULA;
413+
}
414+
return wait;
415+
}
416+
373417
void evaluateConditionScriptTriggers() {
374418
for (ConditionScriptTrigger conditionScriptTrigger : conditionScriptTriggers) {
375419
conditionScriptTrigger.evaluateAndTriggerActions(this);

catroid/src/main/java/org/catrobat/catroid/formulaeditor/Formula.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class Formula implements Serializable {
4343

4444
private transient InternFormula internFormula = null;
4545

46+
private boolean sceneFirstStart = false;
47+
4648
public Formula(FormulaElement formulaElement) {
4749
formulaTree = formulaElement;
4850
internFormula = new InternFormula(formulaTree.getInternTokenList());
@@ -132,7 +134,12 @@ public Integer interpretInteger(Scope scope) throws InterpretationException {
132134

133135
public Double interpretDouble(Scope scope) throws InterpretationException {
134136
try {
135-
return assertNotNaN(interpretDoubleInternal(scope));
137+
if (sceneFirstStart) {
138+
sceneFirstStart = false;
139+
return 0.0;
140+
} else {
141+
return assertNotNaN(interpretDoubleInternal(scope));
142+
}
136143
} catch (ClassCastException | NumberFormatException exception) {
137144
throw new InterpretationException("Couldn't interpret Formula.", exception);
138145
}
@@ -255,4 +262,8 @@ private String toLocalizedString(boolean value, StringProvider stringProvider) {
255262
public interface StringProvider {
256263
String getTrueOrFalse(Boolean value);
257264
}
265+
266+
public void sceneFirstStart(boolean sceneFirstStart) {
267+
this.sceneFirstStart = sceneFirstStart;
268+
}
258269
}

catroid/src/main/java/org/catrobat/catroid/stage/StageListener.java

+9
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,8 @@ public void create() {
199199
physicsWorld = scene.resetPhysicsWorld();
200200
sprites = new ArrayList<>(scene.getSpriteList());
201201

202+
resetConditionScriptTriggers();
203+
202204
embroideryPatternManager = new DSTPatternManager();
203205
initActors(sprites);
204206

@@ -208,6 +210,12 @@ public void create() {
208210
axes = new Texture(Gdx.files.internal("stage/red_pixel.bmp"));
209211
}
210212

213+
private void resetConditionScriptTriggers() {
214+
for (Sprite sprite : sprites) {
215+
sprite.resetConditionScriptTriggers();
216+
}
217+
}
218+
211219
public void setPaused(boolean paused) {
212220
this.paused = paused;
213221
}
@@ -538,6 +546,7 @@ public void render() {
538546
for (Sprite sprite : sprites) {
539547
sprite.initializeEventThreads(EventId.START);
540548
sprite.initConditionScriptTriggers();
549+
sprite.initIfConditionBrickTriggers();
541550
if (!sprite.getLookList().isEmpty()) {
542551
sprite.look.setLookData(sprite.getLookList().get(0));
543552
}

0 commit comments

Comments
 (0)