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