package ttt.organization.managers;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import nu.xom.Element;
import nu.xom.Elements;
import ttt.io.JythonFactory;
import ttt.io.XMLSerializeable;
import ttt.organization.TTT_Entity;
import ttt.organization.TTT_EntityScript;
import ttt.organization.TTT_Scene;
public class TTT_ScriptManager implements XMLSerializeable, TTT_EntityScript {
final private static HashMap<String, TTT_EntityScript> library;
static {
library = new HashMap<String, TTT_EntityScript>();
}
final private List<String> scripts;
public TTT_ScriptManager() {
scripts = new LinkedList<String>();
}
@Override
public Element writeToElement() {
Element scriptss = new Element(getElementName());
for (String file : scripts) {
Element tt = new Element("script");
tt.appendChild(file);
scriptss.appendChild(tt);
}
return scriptss;
}
@Override
public void assembleFromElement(Element entity) {
scripts.clear();
Elements ele = entity.getChildElements();
for (int i = 0; i < ele.size(); i++) {
scripts.add(ele.get(i).getValue());
}
}
@Override
public String getElementName() {
return "scripts";
}
@Override
public String getName() {
return "scriptgroup";
}
@Override
public void onSpawn(TTT_Entity self, TTT_Scene scene) {
for (String key : scripts) {
library.get(key).onSpawn(self, scene);
}
}
@Override
public void onUpdate(TTT_Entity self, TTT_Scene scene, long timeDelta) {
for (String key : scripts) {
library.get(key).onUpdate(self, scene, timeDelta);
}
}
@Override
public void onDeath(TTT_Entity self, TTT_Scene scene, boolean isRoomExit) {
for (String key : scripts) {
library.get(key).onDeath(self, scene, isRoomExit);
}
}
public static TTT_EntityScript getScriptFromLibrary(String key) {
return library.get(key);
}
public static void addScriptToLibrary(String fileString) {
library.put(fileString, TTT_EntityScript.BLANK);
reloadLibrary();
}
public void addScript(String fileKey) {
if (!library.containsKey(fileKey)) {
addScriptToLibrary(fileKey);
}
scripts.add(fileKey);
}
public static void reloadLibrary() {
Set<Entry<String, TTT_EntityScript>> s = library.entrySet();
for (Entry<String, TTT_EntityScript> scr : s) {
String loc = scr.getKey();
try {
TTT_EntityScript eType = (TTT_EntityScript) JythonFactory.getJythonObject(
"ttt.organization.TTT_EntityScript", loc);
library.put(loc, eType);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
public String toString() {
return getElementName();
}
}