/** prepares Lua state and some bookkeeping */ protected void prepareState() throws IOException { ui.debugMsg("Creating state...\n"); state = new LuaState(System.out); /*write("Registering base libs...\n"); BaseLib.register(state); MathLib.register(state); StringLib.register(state); CoroutineLib.register(state); OsLib.register(state);*/ ui.debugMsg("Building javafunc map...\n"); savegame.buildJavafuncMap(state.getEnvironment()); ui.debugMsg("Loading stdlib..."); InputStream stdlib = getClass().getResourceAsStream("/cz/matejcik/openwig/stdlib.lbc"); LuaClosure closure = LuaPrototype.loadByteCode(stdlib, state.getEnvironment()); ui.debugMsg("calling...\n"); state.call(closure, null, null, null); stdlib.close(); stdlib = null; ui.debugMsg("Registering WIG libs...\n"); WherigoLib.register(state); ui.debugMsg("Building event queue...\n"); eventRunner = new BackgroundRunner(true); eventRunner.setQueueListener( new Runnable() { public void run() { ui.refresh(); } }); }
public void run() { // perform the actual sync try { ui.blockForSaving(); savegame.store(state.getEnvironment()); } catch (IOException e) { log("STOR: save failed: " + e.toString(), LOG_WARN); ui.showError("Sync failed.\n" + e.getMessage()); } finally { ui.unblock(); } }
/** invokes creation of clean new game environment */ private void newGame() throws IOException { // starting game normally ui.debugMsg("Loading gwc..."); if (gwcfile == null) throw new IOException("invalid cartridge file"); ui.debugMsg("pre-setting properties..."); player.rawset("CompletionCode", gwcfile.code); player.rawset("Name", gwcfile.member); ui.debugMsg("loading code..."); byte[] lbc = gwcfile.getBytecode(); ui.debugMsg("parsing..."); LuaClosure closure = LuaPrototype.loadByteCode(new ByteArrayInputStream(lbc), state.getEnvironment()); ui.debugMsg("calling...\n"); state.call(closure, null, null, null); lbc = null; closure = null; }
/** invokes game restore */ private void restoreGame() throws IOException { ui.debugMsg("Restoring saved state..."); cartridge = new Cartridge(); savegame.restore(state.getEnvironment()); }