Other files ignored by Codecov
CHANGELOG.md
has changed.
1 | 1 | package nl.weeaboo.vn.impl.core; |
|
2 | 2 | ||
3 | + | import java.io.IOException; |
|
4 | + | import java.io.ObjectInputStream; |
|
3 | 5 | import java.io.Serializable; |
|
4 | 6 | ||
5 | 7 | import nl.weeaboo.common.Dim; |
|
6 | 8 | import nl.weeaboo.common.Rect; |
|
9 | + | import nl.weeaboo.io.CustomSerializable; |
|
7 | 10 | import nl.weeaboo.lua2.LuaRunState; |
|
8 | 11 | import nl.weeaboo.vn.core.IContextManager; |
|
9 | 12 | import nl.weeaboo.vn.core.IEnvironment; |
11 | 14 | import nl.weeaboo.vn.core.ISystemModule; |
|
12 | 15 | import nl.weeaboo.vn.image.IImageModule; |
|
13 | 16 | import nl.weeaboo.vn.impl.script.lua.LuaScriptEnv; |
|
14 | - | import nl.weeaboo.vn.impl.signal.SignalUtil; |
|
15 | 17 | import nl.weeaboo.vn.render.IRenderEnv; |
|
16 | 18 | import nl.weeaboo.vn.save.ISaveModule; |
|
17 | 19 | import nl.weeaboo.vn.signal.RenderEnvChangeSignal; |
23 | 25 | /** |
|
24 | 26 | * Default implementation of {@link IEnvironment}. |
|
25 | 27 | */ |
|
28 | + | @CustomSerializable |
|
26 | 29 | public class DefaultEnvironment extends AbstractEnvironment implements Serializable { |
|
27 | 30 | ||
28 | 31 | private static final long serialVersionUID = CoreImpl.serialVersionUID; |
43 | 46 | private boolean destroyed; |
|
44 | 47 | ||
45 | 48 | public DefaultEnvironment() { |
|
49 | + | initTransients(); |
|
50 | + | } |
|
51 | + | ||
52 | + | private void initTransients() { |
|
46 | 53 | getPrefStore().addPreferenceListener(this); |
|
47 | 54 | } |
|
48 | 55 | ||
56 | + | private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { |
|
57 | + | in.defaultReadObject(); |
|
58 | + | ||
59 | + | initTransients(); |
|
60 | + | } |
|
61 | + | ||
49 | 62 | @Override |
|
50 | 63 | public void destroy() { |
|
51 | 64 | if (destroyed) { |
135 | 148 | IRenderEnv old = getRenderEnv(); |
|
136 | 149 | renderEnv = new RenderEnv(old.getVirtualSize(), realClip, realScreenSize); |
|
137 | 150 | ||
138 | - | RenderEnvChangeSignal signal = new RenderEnvChangeSignal(renderEnv); |
|
139 | - | SignalUtil.forward(signal, getModules()); |
|
140 | - | SignalUtil.forward(signal, contextManager); |
|
151 | + | fireSignal(new RenderEnvChangeSignal(renderEnv)); |
|
141 | 152 | } |
|
142 | 153 | ||
143 | 154 | } |
16 | 16 | import nl.weeaboo.vn.gdx.res.GdxCleaner; |
|
17 | 17 | import nl.weeaboo.vn.gdx.res.NativeMemoryTracker; |
|
18 | 18 | import nl.weeaboo.vn.impl.signal.SignalUtil; |
|
19 | + | import nl.weeaboo.vn.signal.ISignal; |
|
19 | 20 | import nl.weeaboo.vn.signal.PrefsChangeSignal; |
|
20 | 21 | import nl.weeaboo.vn.stats.IResourceLoadLog; |
|
21 | 22 |
87 | 88 | /** Called when the global preferences change. */ |
|
88 | 89 | @Override |
|
89 | 90 | public <T> void onPreferenceChanged(Preference<T> pref, T oldValue, T newValue) { |
|
90 | - | IPreferenceStore prefsStore = getPrefStore(); |
|
91 | - | PrefsChangeSignal prefsChangeSignal = new PrefsChangeSignal(prefsStore); |
|
92 | - | SignalUtil.forward(prefsChangeSignal, getModules()); |
|
93 | - | SignalUtil.forward(prefsChangeSignal, getContextManager()); |
|
91 | + | fireSignal(new PrefsChangeSignal(getPrefStore())); |
|
92 | + | } |
|
93 | + | ||
94 | + | @Override |
|
95 | + | public final void fireSignal(ISignal signal) { |
|
96 | + | SignalUtil.forward(signal, getModules()); |
|
97 | + | SignalUtil.forward(signal, getContextManager()); |
|
94 | 98 | } |
|
95 | 99 | ||
96 | 100 | @Override |
42 | 42 | import nl.weeaboo.vn.save.IStorage; |
|
43 | 43 | import nl.weeaboo.vn.save.SaveFormatException; |
|
44 | 44 | import nl.weeaboo.vn.save.ThumbnailInfo; |
|
45 | + | import nl.weeaboo.vn.signal.PrefsChangeSignal; |
|
46 | + | import nl.weeaboo.vn.signal.RenderEnvChangeSignal; |
|
45 | 47 | import nl.weeaboo.vn.stats.IStatsModule; |
|
46 | 48 | ||
47 | 49 | /** |
133 | 135 | for (IPersistentSavePlugin plugin : Lists.reverse(getPersistentSavePlugins())) { |
|
134 | 136 | plugin.loadPersistent(writer); |
|
135 | 137 | } |
|
138 | + | ||
139 | + | // The external environment may have also changed |
|
140 | + | env.fireSignal(new RenderEnvChangeSignal(env.getRenderEnv())); |
|
141 | + | env.fireSignal(new PrefsChangeSignal(env.getPrefStore())); |
|
136 | 142 | } |
|
137 | 143 | ||
138 | 144 | @Override |
247 | 253 | is.setDepthWarnLimit(125); |
|
248 | 254 | try { |
|
249 | 255 | novel.readAttributes(is); |
|
250 | - | ||
251 | - | /* |
|
252 | - | * Note: be very careful here. We've just recreated the env in novel, but we're still running |
|
253 | - | * in the SaveModule of the previous env. |
|
254 | - | */ |
|
255 | - | novel.getEnv().getSaveModule().loadPersistent(); |
|
256 | + | is.close(); |
|
256 | 257 | } catch (ClassNotFoundException e) { |
|
257 | 258 | throw new IOException(e); |
|
258 | 259 | } finally { |
|
260 | + | // Note: The 'readDelayed' objects are resolved during close() |
|
259 | 261 | is.close(); |
|
260 | 262 | } |
|
263 | + | ||
264 | + | /* |
|
265 | + | * Note: be very careful here. We've just recreated the env in novel, but we're still running |
|
266 | + | * in the SaveModule of the previous env. |
|
267 | + | */ |
|
268 | + | novel.getEnv().getSaveModule().loadPersistent(); |
|
261 | 269 | } finally { |
|
262 | 270 | in.close(); |
|
263 | 271 | } |
136 | 136 | ||
137 | 137 | static boolean callFunction(IEnvironment env, String functionName) { |
|
138 | 138 | IContext context = env.getContextManager().getPrimaryContext(); |
|
139 | + | if (context == null) { |
|
140 | + | LOG.warn("No context is active, unable to call {}", functionName); |
|
141 | + | return false; |
|
142 | + | } |
|
143 | + | ||
139 | 144 | try { |
|
140 | 145 | LuaScriptUtil.callFunction(context, functionName); |
|
141 | 146 | return true; |
Files | Complexity | Coverage |
---|---|---|
api/src/main/java/nl/weeaboo/vn | 91.53% | 96.76% |
buildtools/src/main/java/nl/weeaboo/vn/buildtools | 83.33% | 89.43% |
core/src/main/java/nl/weeaboo/vn | 82.37% | 86.62% |
Project Totals (369 files) | 83.24% | 87.66% |