Skip to content

Conversation

@Restioson
Copy link

@Restioson Restioson commented Jun 14, 2024

This PR implements a very coarse diffing algorithm for map templates. It is intended to be used with NucleoidMC/plasmid#293 as such:

The functionality offered is therefore pretty much the bare minimum to support that use case.

        if (newTemplate.diff(oldTemplate).needsRegeneration()) {
            gameSpace.getWorlds().regenerate(world, new TemplateChunkGenerator(server, newTemplate), newTemplate.getBounds().union(oldTemplate.getBounds()));
        }

The diffing algorithm uses the BLAKE3 hash function internally to compare MapChunks.

It takes around 100ms to hash a map that takes 400ms to load (based on siege:jungle). Therefore, the first hot reload of the map would take 100ms (hash old map) + 400ms (load new map) + 100ms (hash new map) + (negligible comparison) = 600ms. On second reload, the old map doesn't need to be hashed, so it would be 500ms.

@Restioson
Copy link
Author

Restioson commented Jun 14, 2024

This could probably be optimised somewhat by keeping the hash on the entire template rather than each MapChunk, but this would somewhat weaken encapsulation. I don't really have the bandwidth to change it and it's a minor optimisation for a use-case that isn't very performance-critical (reloading).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant