anonl / nvlist

@@ -1,9 +1,12 @@
Loading
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,7 +14,6 @@
Loading
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,6 +25,7 @@
Loading
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,9 +46,19 @@
Loading
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,9 +148,7 @@
Loading
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,6 +16,7 @@
Loading
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,10 +88,13 @@
Loading
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,6 +42,8 @@
Loading
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,6 +135,10 @@
Loading
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,17 +253,19 @@
Loading
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,6 +136,11 @@
Loading
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%
1
codecov:
2
  status:
3
    project: yes
4
    patch: no
Sunburst
The inner-most circle is the entire project, moving away from the center are folders then, finally, a single file. The size and color of each slice is representing the number of statements and the coverage, respectively.
Icicle
The top section represents the entire project. Proceeding with folders and finally individual files. The size and color of each slice is representing the number of statements and the coverage, respectively.
Grid
Each block represents a single file in the project. The size and color of each block is represented by the number of statements and the coverage, respectively.
Loading