package org.tjuscs.bulletgame.task; import java.util.HashMap; import java.util.Map; import org.apache.commons.jexl2.JexlContext; import org.apache.commons.jexl2.JexlEngine; import org.tjuscs.bulletgame.util.MathUtils; import org.tjuscs.bulletgame.util.RandomUtil; public abstract class Task { public static JexlEngine scriptEngine = new JexlEngine(); static{ Map<String, Object> funcs = new HashMap<String, Object>(); funcs.put("MathUtils", MathUtils.class); funcs.put("Math", Math.class); funcs.put("ran", RandomUtil.class); funcs.put("TaskList", TaskList.class); funcs.put("Tasks", Tasks.class); scriptEngine.setFunctions(funcs); } private boolean canceled; private boolean completed; protected MapContext context; public Task() { completed = false; canceled = false; context = new MapContext(); context.setLocal("context", context); } public boolean act() { if (completed || canceled) return true; completed = work(); return completed; } public void cancel() { canceled = true; } public void reset() { completed = false; canceled = false; } public void setParentContext(JexlContext context) { this.context.setParentContext((MapContext) context); } public Task bind(String name, Object value){ setBinding(name, value); return this; } public void setBinding(String name, Object value){ this.context.set(name, value); } public Object getBinding(String name){ return this.context.get(name); } public abstract boolean work(); }