Fixed PacketSendEntity

- Moved PacketSendEntity to correct package (.common.world.entity)
- Temporarily added position, velocity and direction to EntityData
read/write methods

- Increased view distance to 150 m
- Squashed visible area vertically (to load less underground and air
chunks)
This commit is contained in:
OLEGSHA 2021-01-02 17:06:55 +03:00
parent 16c89b963e
commit ea56b642ee
6 changed files with 60 additions and 15 deletions

View File

@ -1,10 +1,15 @@
package ru.windcorp.progressia.common.world.entity; package ru.windcorp.progressia.common.world.entity;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import glm.vec._2.Vec2; import glm.vec._2.Vec2;
import glm.vec._3.Vec3; import glm.vec._3.Vec3;
import ru.windcorp.jputil.chars.StringUtil; import ru.windcorp.jputil.chars.StringUtil;
import ru.windcorp.progressia.common.collision.Collideable; import ru.windcorp.progressia.common.collision.Collideable;
import ru.windcorp.progressia.common.collision.CollisionModel; import ru.windcorp.progressia.common.collision.CollisionModel;
import ru.windcorp.progressia.common.state.IOContext;
import ru.windcorp.progressia.common.state.StatefulObject; import ru.windcorp.progressia.common.state.StatefulObject;
import ru.windcorp.progressia.common.world.generic.GenericEntity; import ru.windcorp.progressia.common.world.generic.GenericEntity;
@ -150,5 +155,51 @@ public class EntityData extends StatefulObject implements Collideable, GenericEn
public static String formatEntityId(long entityId) { public static String formatEntityId(long entityId) {
return new String(StringUtil.toFullHex(entityId)); return new String(StringUtil.toFullHex(entityId));
} }
/*
* tmp
*/
@Override
public void write(DataOutput output, IOContext context) throws IOException {
output.writeFloat(getPosition().x);
output.writeFloat(getPosition().y);
output.writeFloat(getPosition().z);
output.writeFloat(getVelocity().x);
output.writeFloat(getVelocity().y);
output.writeFloat(getVelocity().z);
output.writeFloat(getDirection().x);
output.writeFloat(getDirection().y);
super.write(output, context);
}
@Override
public void read(DataInput input, IOContext context) throws IOException {
Vec3 position = new Vec3(
input.readFloat(),
input.readFloat(),
input.readFloat()
);
Vec3 velocity = new Vec3(
input.readFloat(),
input.readFloat(),
input.readFloat()
);
Vec2 direction = new Vec2(
input.readFloat(),
input.readFloat()
);
setPosition(position);
setVelocity(velocity);
setDirection(direction);
super.read(input, context);
}
} }

View File

@ -1,4 +1,4 @@
package ru.windcorp.progressia.server; package ru.windcorp.progressia.common.world.entity;
import java.io.DataInput; import java.io.DataInput;
import java.io.DataOutput; import java.io.DataOutput;
@ -10,8 +10,6 @@ import ru.windcorp.progressia.common.util.crash.CrashReports;
import ru.windcorp.progressia.common.world.DecodingException; import ru.windcorp.progressia.common.world.DecodingException;
import ru.windcorp.progressia.common.world.PacketWorldChange; import ru.windcorp.progressia.common.world.PacketWorldChange;
import ru.windcorp.progressia.common.world.WorldData; import ru.windcorp.progressia.common.world.WorldData;
import ru.windcorp.progressia.common.world.entity.EntityData;
import ru.windcorp.progressia.common.world.entity.EntityDataRegistry;
public class PacketSendEntity extends PacketWorldChange { public class PacketSendEntity extends PacketWorldChange {

View File

@ -13,6 +13,7 @@ import ru.windcorp.jputil.chars.StringUtil;
import ru.windcorp.progressia.common.util.Vectors; import ru.windcorp.progressia.common.util.Vectors;
import ru.windcorp.progressia.common.world.entity.EntityData; import ru.windcorp.progressia.common.world.entity.EntityData;
import ru.windcorp.progressia.common.world.entity.PacketRevokeEntity; import ru.windcorp.progressia.common.world.entity.PacketRevokeEntity;
import ru.windcorp.progressia.common.world.entity.PacketSendEntity;
import ru.windcorp.progressia.common.world.generic.ChunkSet; import ru.windcorp.progressia.common.world.generic.ChunkSet;
public class EntityManager { public class EntityManager {

View File

@ -4,6 +4,7 @@ import java.util.function.Consumer;
import glm.vec._3.i.Vec3i; import glm.vec._3.i.Vec3i;
import ru.windcorp.progressia.common.Units; import ru.windcorp.progressia.common.Units;
import ru.windcorp.progressia.common.world.ChunkData;
import ru.windcorp.progressia.common.world.Coordinates; import ru.windcorp.progressia.common.world.Coordinates;
import ru.windcorp.progressia.common.world.PlayerData; import ru.windcorp.progressia.common.world.PlayerData;
import ru.windcorp.progressia.common.world.entity.EntityData; import ru.windcorp.progressia.common.world.entity.EntityData;
@ -36,7 +37,7 @@ 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) / Units.get(16.0f, "m"); float radius = getServer().getLoadDistance(this) / Units.get(ChunkData.BLOCKS_PER_CHUNK, "m");
float radiusSq = radius * radius; float radiusSq = radius * radius;
int iRadius = (int) Math.ceil(radius); int iRadius = (int) Math.ceil(radius);
@ -44,7 +45,7 @@ public class Player extends PlayerData implements ChunkLoader {
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 <= radiusSq) { if (cursor.x * cursor.x + cursor.y * cursor.y + (cursor.z * 2) * (cursor.z * 2) <= radiusSq) {
cursor.add(start); cursor.add(start);
chunkConsumer.accept(cursor); chunkConsumer.accept(cursor);

View File

@ -7,7 +7,6 @@ import java.util.Collections;
import glm.vec._2.Vec2; import glm.vec._2.Vec2;
import glm.vec._3.Vec3; import glm.vec._3.Vec3;
import glm.vec._3.i.Vec3i; import glm.vec._3.i.Vec3i;
import ru.windcorp.progressia.common.util.Vectors;
import ru.windcorp.progressia.common.util.crash.CrashReports; import ru.windcorp.progressia.common.util.crash.CrashReports;
import ru.windcorp.progressia.common.world.entity.EntityData; import ru.windcorp.progressia.common.world.entity.EntityData;
import ru.windcorp.progressia.common.world.entity.EntityDataRegistry; import ru.windcorp.progressia.common.world.entity.EntityDataRegistry;
@ -31,16 +30,11 @@ public class PlayerManager {
this.players.add(player); this.players.add(player);
} }
private static final Vec3i SPAWN = new Vec3i(8, 8, 20);
public EntityData conjurePlayerEntity(String login) { public EntityData conjurePlayerEntity(String login) {
// TODO Live up to the name // TODO Live up to the name
if (TestContent.PLAYER_LOGIN.equals(login)) { if (TestContent.PLAYER_LOGIN.equals(login)) {
Vec3i chunkPos = Vectors.ZERO_3i;
if (getServer().getWorld().getChunk(chunkPos) == null) {
getServer().getChunkManager().loadChunk(chunkPos);
}
EntityData entity = spawnPlayerEntity(login); EntityData entity = spawnPlayerEntity(login);
return entity; return entity;
} else { } else {
@ -52,7 +46,7 @@ public class PlayerManager {
EntityData player = EntityDataRegistry.getInstance().create("Test:Player"); EntityData player = EntityDataRegistry.getInstance().create("Test:Player");
player.setEntityId(TestContent.PLAYER_ENTITY_ID); player.setEntityId(TestContent.PLAYER_ENTITY_ID);
player.setPosition(new Vec3(8, 8, 8)); player.setPosition(new Vec3(SPAWN.x, SPAWN.y, SPAWN.z));
player.setDirection(new Vec2( player.setDirection(new Vec2(
Math.toRadians(40), Math.toRadians(10) Math.toRadians(40), Math.toRadians(10)
)); ));

View File

@ -174,7 +174,7 @@ public class Server {
} }
public float getLoadDistance(Player player) { public float getLoadDistance(Player player) {
return Units.get(100.0f, "m"); return Units.get(150.0f, "m");
} }
/** /**