mirror of
https://github.com/collinsmith/riiablo.git
synced 2025-07-04 23:38:28 +07:00
Created Dt1Params instance for library ref
Created Dt1Params.library() Changed Dt1Loader to use Dt1Params.library() in preference to self defined reference Refactor renamed Dt1Decoder7.readLibHeader -> Dt1Decoder7.readLibraryHeader Changed MpqViewer Dt1 loader to save reference to Dt1 library and load tiles as-needed MpqViewer Dt1 will dispose Dt1 library when switching Dt1 libraries
This commit is contained in:
@ -23,7 +23,7 @@ import com.riiablo.map5.Dt1Decoder;
|
||||
public class Dt1Loader extends AssetLoader<Dt1> {
|
||||
private static final Logger log = LogManager.getLogger(Dt1Loader.class);
|
||||
|
||||
private static final Dt1Params PARENT_DT1 = Dt1Params.of(-1);
|
||||
private static final Dt1Params PARENT_DT1 = Dt1Params.library();
|
||||
|
||||
@Override
|
||||
protected AssetDesc[] dependencies0(AssetDesc<Dt1> asset) {
|
||||
|
@ -6,6 +6,13 @@ import com.riiablo.map5.Dt1;
|
||||
import com.riiablo.mpq_bytebuf.Mpq;
|
||||
|
||||
public class Dt1Params extends MpqParams<Dt1> {
|
||||
private static final int LIBRARY_TILE_ID = -1;
|
||||
private static final Dt1Params LIBRARY = new Dt1Params(LIBRARY_TILE_ID);
|
||||
|
||||
public static Dt1Params library() {
|
||||
return LIBRARY;
|
||||
}
|
||||
|
||||
public static Dt1Params of(int tileId) {
|
||||
return new Dt1Params(tileId);
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ public enum Dt1Decoder7 {
|
||||
}
|
||||
|
||||
public static Dt1 readHeaders(Dt1 dt1, ByteInputStream in) {
|
||||
readLibHeader(dt1, in);
|
||||
readLibraryHeader(dt1, in);
|
||||
log.trace("dt1: {}", dt1);
|
||||
Tile[] tiles = dt1.tiles;
|
||||
for (int i = 0, s = dt1.numTiles; i < s; i++) {
|
||||
@ -85,7 +85,7 @@ public enum Dt1Decoder7 {
|
||||
return dt1;
|
||||
}
|
||||
|
||||
public static Dt1 readLibHeader(Dt1 dt1, ByteInputStream in) {
|
||||
public static Dt1 readLibraryHeader(Dt1 dt1, ByteInputStream in) {
|
||||
assert dt1.version == VERSION : "dt1.version(" + dt1.version + ") != VERSION(" + VERSION + ")";
|
||||
dt1.flags = in.read32();
|
||||
in.skipBytes(RESERVED_BYTES);
|
||||
|
@ -2091,24 +2091,22 @@ public class MpqViewer extends Tool {
|
||||
} else if (extension.equals("DT1")) {
|
||||
tileControls.setCollapsed(false);
|
||||
paletteControls.setCollapsed(false);
|
||||
AssetDesc<Dt1> asset = AssetDesc.of(filename, Dt1.class, Dt1Params.of(0));
|
||||
AtomicReference<AssetDesc<Dt1>> ref = new AtomicReference<>(asset);
|
||||
final AssetDesc<Dt1> dt1Library = AssetDesc.of(filename, Dt1.class, Dt1Params.library());
|
||||
AtomicReference<AssetDesc<Dt1>> ref = new AtomicReference<>();
|
||||
AtomicReference<Dt1> dt1Ref = new AtomicReference<>();
|
||||
assets.load(asset)
|
||||
assets.load(dt1Library)
|
||||
.addListener(future -> {
|
||||
dt1Ref.set((Dt1) future.getNow());
|
||||
log.debug("Loaded {}", asset);
|
||||
log.debug("Loaded dt1 library {}", dt1Library);
|
||||
renderer.initialize();
|
||||
});
|
||||
renderer.setDrawable(new DelegatingDrawable<Drawable>() {
|
||||
int tileId = 0;
|
||||
int curTileId = 0;
|
||||
int tileId = -1;
|
||||
|
||||
@Override
|
||||
protected void initialize() {
|
||||
Dt1 dt1 = dt1Ref.get();
|
||||
dt1Info.setDt1(dt1);
|
||||
dt1Info.update(tileId);
|
||||
|
||||
slTileIndex.setValue(0);
|
||||
slTileIndex.setRange(0, dt1.numTiles() - 1);
|
||||
@ -2118,22 +2116,19 @@ public class MpqViewer extends Tool {
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
assets.unload(ref.get());
|
||||
log.debug("Unloading {}", ref.get());
|
||||
}
|
||||
|
||||
void updateInfo() {
|
||||
if (tileId < 0) return;
|
||||
dt1Info.update(tileId);
|
||||
assets.unload(ref.get());
|
||||
log.debug("Unloading dt1 library {}", dt1Library);
|
||||
assets.unload(dt1Library);
|
||||
}
|
||||
|
||||
void updateTile(int t) {
|
||||
if (curTileId == t) return; // prevents multiple calls during init
|
||||
if (tileId == t) return; // unnecessary call
|
||||
log.traceEntry("updateTile(t: {})", t);
|
||||
curTileId = t;
|
||||
tileId = t;
|
||||
final AssetDesc<Dt1> oldAsset = ref.get();
|
||||
assert oldAsset.params(Dt1Params.class).tileId != t;
|
||||
final AssetDesc<Dt1> asset = AssetDesc.of(oldAsset, oldAsset.params(Dt1Params.class).copy(t));
|
||||
assert oldAsset == null || oldAsset.params(Dt1Params.class).tileId != t;
|
||||
final AssetDesc<Dt1> asset = AssetDesc.of(dt1Library, dt1Library.params(Dt1Params.class).copy(t));
|
||||
ref.set(asset);
|
||||
assets.load(asset)
|
||||
.addListener(future -> {
|
||||
@ -2148,12 +2143,13 @@ public class MpqViewer extends Tool {
|
||||
return;
|
||||
}
|
||||
|
||||
log.debug("Loaded {}", asset);
|
||||
if (oldAsset != null) {
|
||||
log.debug("Unloading {}", oldAsset);
|
||||
assets.unload(oldAsset);
|
||||
final Dt1 dt1 = (Dt1) future.getNow();
|
||||
dt1Info.setDt1(dt1);
|
||||
dt1Info.update(tileId);
|
||||
}
|
||||
|
||||
log.debug("Loaded {}", asset);
|
||||
dt1Info.update(asset.params(Dt1Params.class).tileId);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2176,9 +2172,7 @@ public class MpqViewer extends Tool {
|
||||
@Override
|
||||
protected void changed(ChangeEvent event, Actor actor) {
|
||||
if (actor == slTileIndex) {
|
||||
tileId = (int) slTileIndex.getValue();
|
||||
updateTile(tileId);
|
||||
updateInfo();
|
||||
updateTile((int) slTileIndex.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user