cache: rewrite map image dumper with logic from client
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -27,9 +27,10 @@ package net.runelite.cache;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.runelite.cache.definitions.ObjectDefinition;
|
||||
import net.runelite.cache.definitions.exporters.ObjectExporter;
|
||||
import net.runelite.cache.definitions.loaders.ObjectLoader;
|
||||
@@ -44,7 +45,7 @@ import net.runelite.cache.util.Namer;
|
||||
public class ObjectManager
|
||||
{
|
||||
private final Store store;
|
||||
private final List<ObjectDefinition> objects = new ArrayList<>();
|
||||
private final Map<Integer, ObjectDefinition> objects = new HashMap<>();
|
||||
private final Namer namer = new Namer();
|
||||
|
||||
public ObjectManager(Store store)
|
||||
@@ -66,20 +67,25 @@ public class ObjectManager
|
||||
for (FSFile f : files.getFiles())
|
||||
{
|
||||
ObjectDefinition def = loader.load(f.getFileId(), f.getContents());
|
||||
objects.add(def);
|
||||
objects.put(f.getFileId(), def);
|
||||
}
|
||||
}
|
||||
|
||||
public List<ObjectDefinition> getObjects()
|
||||
public Collection<ObjectDefinition> getObjects()
|
||||
{
|
||||
return Collections.unmodifiableList(objects);
|
||||
return Collections.unmodifiableCollection(objects.values());
|
||||
}
|
||||
|
||||
public ObjectDefinition getObject(int id)
|
||||
{
|
||||
return objects.get(id);
|
||||
}
|
||||
|
||||
public void dump(File out) throws IOException
|
||||
{
|
||||
out.mkdirs();
|
||||
|
||||
for (ObjectDefinition def : objects)
|
||||
for (ObjectDefinition def : objects.values())
|
||||
{
|
||||
ObjectExporter exporter = new ObjectExporter(def);
|
||||
|
||||
@@ -100,7 +106,7 @@ public class ObjectManager
|
||||
fw.println("");
|
||||
fw.println("public final class ObjectID");
|
||||
fw.println("{");
|
||||
for (ObjectDefinition def : objects)
|
||||
for (ObjectDefinition def : objects.values())
|
||||
{
|
||||
String name;
|
||||
if (def.getName().equalsIgnoreCase("NULL"))
|
||||
|
||||
@@ -28,7 +28,7 @@ import net.runelite.cache.definitions.TextureDefinition;
|
||||
import net.runelite.cache.definitions.providers.SpriteProvider;
|
||||
import net.runelite.cache.definitions.providers.TextureProvider;
|
||||
|
||||
class RSTextureProvider
|
||||
public class RSTextureProvider
|
||||
{
|
||||
private final SpriteProvider spriteProvider;
|
||||
TextureDefinition[] textures;
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
package net.runelite.cache.region;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import net.runelite.cache.IndexType;
|
||||
import net.runelite.cache.definitions.LocationsDefinition;
|
||||
import net.runelite.cache.definitions.MapDefinition;
|
||||
@@ -50,7 +51,7 @@ public class RegionLoader
|
||||
private final Index index;
|
||||
private final XteaKeyManager keyManager;
|
||||
|
||||
private final List<Region> regions = new ArrayList<>();
|
||||
private final Map<Integer, Region> regions = new HashMap<>();
|
||||
private Region lowestX = null, lowestY = null;
|
||||
private Region highestX = null, highestY = null;
|
||||
|
||||
@@ -69,7 +70,7 @@ public class RegionLoader
|
||||
Region region = this.loadRegionFromArchive(i);
|
||||
if (region != null)
|
||||
{
|
||||
regions.add(region);
|
||||
regions.put(i, region);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -117,7 +118,7 @@ public class RegionLoader
|
||||
|
||||
public void calculateBounds()
|
||||
{
|
||||
for (Region region : regions)
|
||||
for (Region region : regions.values())
|
||||
{
|
||||
if (lowestX == null || region.getBaseX() < lowestX.getBaseX())
|
||||
{
|
||||
@@ -141,9 +142,16 @@ public class RegionLoader
|
||||
}
|
||||
}
|
||||
|
||||
public List<Region> getRegions()
|
||||
public Collection<Region> getRegions()
|
||||
{
|
||||
return regions;
|
||||
return regions.values();
|
||||
}
|
||||
|
||||
public Region findRegionForWorldCoordinates(int x, int y)
|
||||
{
|
||||
x >>>= 6;
|
||||
y >>>= 6;
|
||||
return regions.get((x << 8) | y);
|
||||
}
|
||||
|
||||
public Region getLowestX()
|
||||
|
||||
@@ -30,6 +30,7 @@ import java.io.IOException;
|
||||
import javax.imageio.ImageIO;
|
||||
import net.runelite.cache.fs.Store;
|
||||
import net.runelite.cache.region.Region;
|
||||
import net.runelite.cache.region.RegionLoader;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
@@ -46,7 +47,7 @@ public class MapImageDumperTest
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void extract() throws IOException
|
||||
public void dumpMap() throws IOException
|
||||
{
|
||||
File base = StoreLocation.LOCATION,
|
||||
outDir = folder.newFolder();
|
||||
@@ -69,4 +70,31 @@ public class MapImageDumperTest
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void dumpRegions() throws Exception
|
||||
{
|
||||
File base = StoreLocation.LOCATION,
|
||||
outDir = folder.newFolder();
|
||||
|
||||
try (Store store = new Store(base))
|
||||
{
|
||||
store.load();
|
||||
|
||||
RegionLoader regionLoader = new RegionLoader(store);
|
||||
regionLoader.loadRegions();
|
||||
|
||||
MapImageDumper dumper = new MapImageDumper(store);
|
||||
dumper.load();
|
||||
|
||||
int z = 0;
|
||||
for (Region region : regionLoader.getRegions())
|
||||
{
|
||||
File imageFile = new File(outDir, "img-" + z + "-" + region.getRegionID() + ".png");
|
||||
BufferedImage image = dumper.drawRegion(region, z);
|
||||
ImageIO.write(image, "png", imageFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user