package loon.action;
import loon.utils.Array;
public class ReplayTo extends ActionEvent {
private Array<ActionEvent> repeatList;
Array<ActionEvent> replays;
Array<ActionEvent> _cache_list;
ActionEvent currentEvent;
boolean replay;
int count;
public ReplayTo(Array<ActionEvent> list) {
this(list, true);
}
public ReplayTo(Array<ActionEvent> list, boolean rp) {
this.replay = rp;
this.set(list);
}
public ReplayTo set(Array<ActionEvent> list) {
if (list == null || list.size() == 0) {
return this;
}
this._cache_list = new Array<ActionEvent>(list);
this.replays = new Array<ActionEvent>();
for (; _cache_list.hashNext();) {
ActionEvent result = _cache_list.next();
if (result != null) {
replays.add(result);
}
}
_cache_list.stopNext();
return this;
}
@Override
public void update(long elapsedTime) {
if (replays == null) {
_isCompleted = true;
return;
}
if (replays != null) {
if (currentEvent != null && !currentEvent.isComplete()) {
return;
} else if (currentEvent != null && currentEvent.isComplete()) {
if (repeatList == null) {
repeatList = new Array<ActionEvent>();
}
if (!(currentEvent instanceof ReplayTo)) {
repeatList.add(currentEvent);
}
}
ActionEvent event = replays.last();
if (event != currentEvent && event != null) {
replays.remove();
if (replay) {
if (event instanceof ReplayTo && repeatList != null
&& repeatList.size() > 0) {
Array<ActionEvent> tmp = new Array<ActionEvent>();
for (; repeatList.hashNext();) {
tmp.add(repeatList.next().reverse());
}
repeatList.stopNext();
((ReplayTo) event).set(tmp);
repeatList.clear();
repeatList.addAll(tmp);
}
}
ActionControl.get().addAction(event, original);
currentEvent = event;
} else {
_isCompleted = true;
}
}
}
@Override
public void onLoad() {
}
@Override
public boolean isComplete() {
return _isCompleted;
}
@Override
public ActionEvent cpy() {
ReplayTo r = new ReplayTo(_cache_list, replay);
r.set(this);
return r;
}
@Override
public ActionEvent reverse() {
if (_cache_list == null || _cache_list.size() == 0) {
return null;
}
ReplayTo r = new ReplayTo(_cache_list.reverse(), replay);
r.set(this);
return r;
}
@Override
public String getName() {
return "replay";
}
}