Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions TeamCode/src/main/java/codebase/actions/Action.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package codebase.actions;

import codebase.Loop;

public interface Action extends Loop {
void init();

boolean isComplete();
}
52 changes: 52 additions & 0 deletions TeamCode/src/main/java/codebase/actions/SequentialAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package codebase.actions;

import java.util.Arrays;
import java.util.stream.Stream;

public class SequentialAction implements Action {

private ActionNode currentActionNode;

public SequentialAction(Action first, Action... rest) {
this.currentActionNode = new ActionNode(Stream.concat(Stream.of(first), Arrays.stream(rest)).toArray(Action[]::new));
}

@Override
public void init() {
currentActionNode.action.init();
}

@Override
public boolean isComplete() {
return this.currentActionNode == null;
}

@Override
public void loop() {
if (this.currentActionNode.action.isComplete()) {
this.currentActionNode = this.currentActionNode.next;
}

if (this.currentActionNode == null) {
return;
}

this.currentActionNode.action.loop();
}
}

class ActionNode {
public Action action;
public ActionNode next;

public ActionNode(Action[] actions) {
this.action = actions[0];

if (actions.length == 1) {
this.next = null;
return;
}

this.next = new ActionNode(Arrays.copyOfRange(actions, 1, actions.length));
}
}
61 changes: 61 additions & 0 deletions TeamCode/src/main/java/codebase/actions/SimultaneousAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package codebase.actions;

import androidx.annotation.NonNull;

import java.util.ArrayList;

public class SimultaneousAction implements Action {

private final ArrayList<Action> actions;

public SimultaneousAction(Action first, Action... rest) {
this.actions = new ArrayList<>();

this.actions.add(first);

for (Action action : rest) {
this.add(action, false);
}
}

@Override
public void init() {
for (Action action : actions) {
action.init();
}
}

@Override
public boolean isComplete() {
for (Action action : actions) {
if (!action.isComplete()) {
return false;
}
}
return true;
}

@Override
public void loop() {
for (Action action : actions) {
if (!action.isComplete()) {
action.loop();
}
}
}

public void add(@NonNull Action action, boolean init) {
String actionName = action.getClass().getName();

for (Action a : actions) {
if (a.getClass().getName().equals(actionName)) {
throw new IllegalArgumentException("You can't add multiple of the same class of Action to SimultaneousAction.");
}
}
actions.add(action);

if (init) {
action.init();
}
}
}
27 changes: 27 additions & 0 deletions TeamCode/src/main/java/codebase/actions/SleepAction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package codebase.actions;

public class SleepAction implements Action {

private final long ms;

private long endMs;

public SleepAction(long ms) {
this.ms = ms;
}


@Override
public void init() {
this.endMs = System.currentTimeMillis() + this.ms;
}

@Override
public boolean isComplete() {
return System.currentTimeMillis() >= this.endMs;
}

@Override
public void loop() {
}
}
Loading