cache: rewrite map image dumper with logic from client

This commit is contained in:
Adam
2018-03-30 12:35:20 -04:00
parent 769ce714e4
commit 9f943832ea
5 changed files with 765 additions and 297 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -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"))

View File

@@ -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;

View File

@@ -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()

View File

@@ -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);
}
}
}
}