Fixed chunk load radius and removed debug leftovers
This commit is contained in:
parent
b44540999b
commit
5d570a810b
@ -1,7 +1,5 @@
|
|||||||
package ru.windcorp.progressia.client;
|
package ru.windcorp.progressia.client;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
|
|
||||||
import ru.windcorp.progressia.client.comms.DefaultClientCommsListener;
|
import ru.windcorp.progressia.client.comms.DefaultClientCommsListener;
|
||||||
import ru.windcorp.progressia.client.comms.ServerCommsChannel;
|
import ru.windcorp.progressia.client.comms.ServerCommsChannel;
|
||||||
import ru.windcorp.progressia.client.graphics.world.Camera;
|
import ru.windcorp.progressia.client.graphics.world.Camera;
|
||||||
@ -48,8 +46,6 @@ public class Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onLocalPlayerEntityChanged(EntityData entity, EntityData lastKnownEntity) {
|
public void onLocalPlayerEntityChanged(EntityData entity, EntityData lastKnownEntity) {
|
||||||
LogManager.getLogger().info("LocalPlayer entity changed from {} to {}", lastKnownEntity, entity);
|
|
||||||
|
|
||||||
if (entity == null) {
|
if (entity == null) {
|
||||||
getCamera().setAnchor(null);
|
getCamera().setAnchor(null);
|
||||||
return;
|
return;
|
||||||
|
@ -21,6 +21,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
import gnu.trove.TCollections;
|
import gnu.trove.TCollections;
|
||||||
import gnu.trove.map.TLongObjectMap;
|
import gnu.trove.map.TLongObjectMap;
|
||||||
@ -35,7 +37,6 @@ import ru.windcorp.progressia.common.world.generic.GenericWorld;
|
|||||||
import ru.windcorp.progressia.common.world.generic.LongBasedChunkMap;
|
import ru.windcorp.progressia.common.world.generic.LongBasedChunkMap;
|
||||||
import ru.windcorp.progressia.common.world.tile.TileData;
|
import ru.windcorp.progressia.common.world.tile.TileData;
|
||||||
import ru.windcorp.progressia.common.world.tile.TileDataStack;
|
import ru.windcorp.progressia.common.world.tile.TileDataStack;
|
||||||
import ru.windcorp.progressia.test.TestContent;
|
|
||||||
|
|
||||||
public class WorldData
|
public class WorldData
|
||||||
implements GenericWorld<
|
implements GenericWorld<
|
||||||
@ -87,25 +88,18 @@ implements GenericWorld<
|
|||||||
return entities;
|
return entities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void forEachEntity(Consumer<? super EntityData> action) {
|
||||||
|
synchronized (entitiesById) { // TODO HORRIBLY MUTILATE THE CORPSE OF TROVE4J so that gnu.trove.impl.sync.SynchronizedCollection.forEach is synchronized
|
||||||
|
getEntities().forEach(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public TLongSet getLoadedEntities() {
|
public TLongSet getLoadedEntities() {
|
||||||
return entitiesById.keySet();
|
return entitiesById.keySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void tmp_generate() {
|
|
||||||
final int size = 1;
|
|
||||||
Vec3i cursor = new Vec3i(0, 0, 0);
|
|
||||||
|
|
||||||
for (cursor.x = -(size / 2); cursor.x <= (size / 2); ++cursor.x) {
|
|
||||||
for (cursor.y = -(size / 2); cursor.y <= (size / 2); ++cursor.y) {
|
|
||||||
for (cursor.z = -(size / 2); cursor.z <= (size / 2); ++cursor.z) {
|
|
||||||
ChunkData chunk = new ChunkData(cursor, this);
|
|
||||||
TestContent.generateChunk(chunk);
|
|
||||||
addChunk(chunk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addChunkListeners(ChunkData chunk) {
|
private void addChunkListeners(ChunkData chunk) {
|
||||||
getListeners().forEach(l -> l.getChunkListeners(this, chunk.getPosition(), chunk::addListener));
|
getListeners().forEach(l -> l.getChunkListeners(this, chunk.getPosition(), chunk::addListener));
|
||||||
}
|
}
|
||||||
|
@ -118,10 +118,8 @@ public interface GenericWorld<
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
default void forEachEntity(Consumer<? super E> action) {
|
default void forEachEntity(Consumer<? super E> action) {
|
||||||
synchronized (this) { // TODO HORRIBLY MUTILATE THE CORPSE OF TROVE4J so that gnu.trove.impl.sync.SynchronizedCollection.forEach is synchronized
|
|
||||||
getEntities().forEach(action);
|
getEntities().forEach(action);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
default void forEachEntityIn(Vec3i min, Vec3i max, Consumer<? super E> action) {
|
default void forEachEntityIn(Vec3i min, Vec3i max, Consumer<? super E> action) {
|
||||||
forEachEntity(e -> {
|
forEachEntity(e -> {
|
||||||
|
@ -4,8 +4,6 @@ import java.util.Collections;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
import ru.windcorp.progressia.common.world.ChunkData;
|
import ru.windcorp.progressia.common.world.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.PacketRevokeChunk;
|
import ru.windcorp.progressia.common.world.PacketRevokeChunk;
|
||||||
@ -120,8 +118,6 @@ public class ChunkManager {
|
|||||||
|
|
||||||
public void loadChunk(Vec3i chunkPos) {
|
public void loadChunk(Vec3i chunkPos) {
|
||||||
|
|
||||||
LogManager.getLogger().info("Loading {} {} {}", chunkPos.x, chunkPos.y, chunkPos.z);
|
|
||||||
|
|
||||||
WorldData world = getServer().getWorld().getData();
|
WorldData world = getServer().getWorld().getData();
|
||||||
|
|
||||||
ChunkData chunk = new ChunkData(chunkPos, world);
|
ChunkData chunk = new ChunkData(chunkPos, world);
|
||||||
@ -132,8 +128,6 @@ public class ChunkManager {
|
|||||||
|
|
||||||
public void unloadChunk(Vec3i chunkPos) {
|
public void unloadChunk(Vec3i chunkPos) {
|
||||||
|
|
||||||
LogManager.getLogger().info("Unloading {} {} {}", chunkPos.x, chunkPos.y, chunkPos.z);
|
|
||||||
|
|
||||||
WorldData world = getServer().getWorld().getData();
|
WorldData world = getServer().getWorld().getData();
|
||||||
|
|
||||||
ChunkData chunk = world.getChunk(chunkPos);
|
ChunkData chunk = world.getChunk(chunkPos);
|
||||||
@ -148,8 +142,6 @@ public class ChunkManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void sendChunk(Player player, Vec3i chunkPos) {
|
public void sendChunk(Player player, Vec3i chunkPos) {
|
||||||
LogManager.getLogger().info("Sending {} {} {}", chunkPos.x, chunkPos.y, chunkPos.z);
|
|
||||||
|
|
||||||
ChunkData chunk = server.getWorld().getData().getChunk(chunkPos);
|
ChunkData chunk = server.getWorld().getData().getChunk(chunkPos);
|
||||||
|
|
||||||
if (chunk == null) {
|
if (chunk == null) {
|
||||||
@ -167,8 +159,6 @@ public class ChunkManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void revokeChunk(Player player, Vec3i chunkPos) {
|
public void revokeChunk(Player player, Vec3i chunkPos) {
|
||||||
LogManager.getLogger().info("Revoking {} {} {}", chunkPos.x, chunkPos.y, chunkPos.z);
|
|
||||||
|
|
||||||
PacketRevokeChunk packet = new PacketRevokeChunk();
|
PacketRevokeChunk packet = new PacketRevokeChunk();
|
||||||
packet.set(chunkPos);
|
packet.set(chunkPos);
|
||||||
player.getClient().sendPacket(packet);
|
player.getClient().sendPacket(packet);
|
||||||
|
@ -4,8 +4,6 @@ import java.util.Collections;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.WeakHashMap;
|
import java.util.WeakHashMap;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
import gnu.trove.TCollections;
|
import gnu.trove.TCollections;
|
||||||
import gnu.trove.iterator.TLongIterator;
|
import gnu.trove.iterator.TLongIterator;
|
||||||
@ -132,8 +130,6 @@ public class EntityManager {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogManager.getLogger().info("Sending {}", entity);
|
|
||||||
|
|
||||||
PacketSendEntity packet = new PacketSendEntity();
|
PacketSendEntity packet = new PacketSendEntity();
|
||||||
packet.set(entity);
|
packet.set(entity);
|
||||||
player.getClient().sendPacket(packet);
|
player.getClient().sendPacket(packet);
|
||||||
@ -142,8 +138,6 @@ public class EntityManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void revokeEntity(Player player, long entityId) {
|
public void revokeEntity(Player player, long entityId) {
|
||||||
LogManager.getLogger().info("Revoking {}", new String(StringUtil.toFullHex(entityId)));
|
|
||||||
|
|
||||||
PacketRevokeEntity packet = new PacketRevokeEntity();
|
PacketRevokeEntity packet = new PacketRevokeEntity();
|
||||||
packet.set(entityId);
|
packet.set(entityId);
|
||||||
player.getClient().sendPacket(packet);
|
player.getClient().sendPacket(packet);
|
||||||
|
@ -36,19 +36,20 @@ public class Player extends PlayerData implements ChunkLoader {
|
|||||||
Coordinates.convertInWorldToChunk(start, start);
|
Coordinates.convertInWorldToChunk(start, start);
|
||||||
|
|
||||||
Vec3i cursor = new Vec3i();
|
Vec3i cursor = new Vec3i();
|
||||||
float radius = getServer().getLoadDistance(this);
|
float radius = getServer().getLoadDistance(this) / Units.get(16.0f, "m");
|
||||||
float radiusSq = radius / Units.get(16.0f, "m");
|
|
||||||
radiusSq *= radiusSq;
|
float radiusSq = radius * radius;
|
||||||
int iRadius = (int) Math.ceil(radius);
|
int iRadius = (int) Math.ceil(radius);
|
||||||
|
|
||||||
for (cursor.x = -iRadius; cursor.x <= +iRadius; ++cursor.x) {
|
for (cursor.x = -iRadius; cursor.x <= +iRadius; ++cursor.x) {
|
||||||
for (cursor.y = -iRadius; cursor.y <= +iRadius; ++cursor.y) {
|
for (cursor.y = -iRadius; cursor.y <= +iRadius; ++cursor.y) {
|
||||||
for (cursor.z = -iRadius; cursor.z <= +iRadius; ++cursor.z) {
|
for (cursor.z = -iRadius; cursor.z <= +iRadius; ++cursor.z) {
|
||||||
if (cursor.x * cursor.x + cursor.y * cursor.y + cursor.z * cursor.z <= radius) {
|
if (cursor.x * cursor.x + cursor.y * cursor.y + cursor.z * cursor.z <= radiusSq) {
|
||||||
|
|
||||||
cursor.add(start);
|
cursor.add(start);
|
||||||
chunkConsumer.accept(cursor);
|
chunkConsumer.accept(cursor);
|
||||||
cursor.sub(start);
|
cursor.sub(start);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ public class Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public float getLoadDistance(Player player) {
|
public float getLoadDistance(Player player) {
|
||||||
return Units.get(10.0f, "m");
|
return Units.get(100.0f, "m");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,7 +16,6 @@ public class ServerState {
|
|||||||
|
|
||||||
public static void startServer() {
|
public static void startServer() {
|
||||||
Server server = new Server(new WorldData());
|
Server server = new Server(new WorldData());
|
||||||
// server.getWorld().getData().tmp_generate();
|
|
||||||
setInstance(server);
|
setInstance(server);
|
||||||
server.start();
|
server.start();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user