package gamelogic; import gui.simpleUI.ModifierGroup; import java.util.HashMap; import system.Container; import util.EfficientList; import worldData.Updateable; import android.util.Log; public abstract class GameElementList<T extends GameElement> implements Updateable, Container<T> { private static final String LOG_TAG = "GameElementList"; private EfficientList<T> myList = new EfficientList<T>(); /** * an additional structure for fast searching for special GameElements */ private HashMap<String, T> mySearchIndex = new HashMap<String, T>(); @Override public void clear() { myList.clear(); mySearchIndex.clear(); } @Override public boolean update(float timeDelta, Updateable parent) { for (int i = 0; i < myList.myLength; i++) { if (!myList.get(i).update(timeDelta, this)) { Log.w(LOG_TAG, "Removing " + myList.get(i) + " from list because it returned" + " false on update()"); myList.remove(myList.get(i)); } } return true; } @Override public int length() { return myList.myLength; } @Override public EfficientList<T> getAllItems() { return myList; } @Override public boolean isCleared() { return myList.myLength == 0; } @Override public void removeEmptyItems() { for (int i = 0; i < myList.myLength; i++) { GameElement e = myList.get(i); if (e.shouldBeRemoved()) myList.remove(e); } } @Override public boolean add(T item) { mySearchIndex.put(item.myName, item); return myList.add(item); } /** * @param uniqueName * @return null if the elemtent can't be found */ public T get(String uniqueName) { return mySearchIndex.get(uniqueName); } public boolean remove(String uniqueName) { GameElement itemToDelete = mySearchIndex.get(uniqueName); mySearchIndex.remove(uniqueName); return myList.remove(itemToDelete); } @Override public boolean remove(T item) { mySearchIndex.remove(item.myName); return myList.remove(item); } public void generateViewGUI(ModifierGroup s) { for (int i = 0; i < myList.myLength; i++) { myList.get(i).generateViewGUI(s); } } @Override public boolean insert(int pos, T item) { return myList.insert(pos, item); }; public void generateEditGUI(ModifierGroup s) { for (int i = 0; i < myList.myLength; i++) { myList.get(i).generateEditGUI(s); } } }