package com.amadornes.framez.util; import java.util.ArrayList; import java.util.List; import com.amadornes.framez.tile.TileMotor; public class ThreadBlockChecking extends Thread { private static final ThreadBlockChecking instance = new ThreadBlockChecking(); public static ThreadBlockChecking instance() { return instance; } private List<TileMotor> toCheck = new ArrayList<TileMotor>(); private boolean inWorld = false; public void addMotor(TileMotor te) { if (te == null) return; if (toCheck.contains(te)) return; toCheck.add(te); } public void removeMotor(TileMotor te) { toCheck.remove(te); } public void onJoinWorld() { inWorld = true; } public void onLeaveWorld() { inWorld = false; } @Override public void run() { while (true) { if (!inWorld) { toCheck.clear(); sleep(); continue; } List<TileMotor> removed = new ArrayList<TileMotor>(); for (TileMotor m : new ArrayList<TileMotor>(toCheck)) { if (m.isInvalid() || m.move()) removed.add(m); } toCheck.removeAll(removed); removed.clear(); sleep(); } } private void sleep() { try { Thread.sleep(500); } catch (Exception ex) { } } }