Working on #3 - Implemented entity ticking

This commit is contained in:
OLEGSHA 2020-11-30 23:07:15 +03:00
parent 9dbeeb7e8d
commit 4c3f5caae6
4 changed files with 36 additions and 2 deletions

View File

@ -15,10 +15,13 @@ import ru.windcorp.progressia.client.world.tile.TileLocation;
import ru.windcorp.progressia.common.world.ChunkData;
import ru.windcorp.progressia.common.world.Coordinates;
import ru.windcorp.progressia.common.world.block.BlockFace;
import ru.windcorp.progressia.common.world.entity.EntityData;
import ru.windcorp.progressia.common.world.tile.TileData;
import ru.windcorp.progressia.server.world.block.BlockLogic;
import ru.windcorp.progressia.server.world.block.BlockLogicRegistry;
import ru.windcorp.progressia.server.world.block.TickableBlock;
import ru.windcorp.progressia.server.world.entity.EntityLogic;
import ru.windcorp.progressia.server.world.entity.EntityLogicRegistry;
import ru.windcorp.progressia.server.world.tasks.TickChunk;
import ru.windcorp.progressia.server.world.tile.TickableTile;
import ru.windcorp.progressia.server.world.tile.TileLogic;
@ -119,6 +122,15 @@ public class ChunkLogic {
});
}
public void forEachEntity(BiConsumer<EntityLogic, EntityData> action) {
getData().forEachEntity(data -> {
action.accept(
EntityLogicRegistry.getInstance().get(data.getId()),
data
);
});
}
public BlockLogic getBlock(Vec3i blockInChunk) {
return BlockLogicRegistry.getInstance().get(
getData().getBlock(blockInChunk).getId()

View File

@ -32,7 +32,7 @@ implements BlockTickContext {
public void init(Server server, Vec3i blockInWorld) {
setServer(server);
setCoordsInWorld(blockInWorld);
if (blockInWorld != null) setCoordsInWorld(blockInWorld);
}
}

View File

@ -5,11 +5,14 @@ import java.util.List;
import glm.vec._3.i.Vec3i;
import ru.windcorp.progressia.common.util.crash.CrashReports;
import ru.windcorp.progressia.common.world.block.BlockFace;
import ru.windcorp.progressia.common.world.entity.EntityData;
import ru.windcorp.progressia.server.Server;
import ru.windcorp.progressia.server.world.block.BlockLogic;
import ru.windcorp.progressia.server.world.block.BlockTickContext;
import ru.windcorp.progressia.server.world.block.TickableBlock;
import ru.windcorp.progressia.server.world.block.UpdateableBlock;
import ru.windcorp.progressia.server.world.entity.EntityLogic;
import ru.windcorp.progressia.server.world.entity.EntityLogicRegistry;
import ru.windcorp.progressia.server.world.tile.TickableTile;
import ru.windcorp.progressia.server.world.tile.TileLogic;
import ru.windcorp.progressia.server.world.tile.TileTickContext;
@ -111,6 +114,18 @@ public class TickAndUpdateUtil {
}
}
public static void tickEntity(EntityLogic logic, EntityData data, TickContext context) {
try {
logic.tick(data, context);
} catch (Exception e) {
CrashReports.report(e, "Could not tick entity {}", logic);
}
}
public static void tickEntity(EntityData data, Server server) {
tickEntity(EntityLogicRegistry.getInstance().get(data.getId()), data, getTickContext(server));
}
public static BlockTickContext getBlockTickContext(
Server server,
Vec3i blockInWorld
@ -131,6 +146,10 @@ public class TickAndUpdateUtil {
return result;
}
public static TickContext getTickContext(Server server) {
return getBlockTickContext(server, null);
}
private TickAndUpdateUtil() {}
}

View File

@ -6,6 +6,7 @@ import ru.windcorp.progressia.server.Server;
import ru.windcorp.progressia.server.world.ChunkLogic;
import ru.windcorp.progressia.server.world.MutableBlockTickContext;
import ru.windcorp.progressia.server.world.MutableTileTickContext;
import ru.windcorp.progressia.server.world.TickAndUpdateUtil;
import ru.windcorp.progressia.server.world.block.TickableBlock;
import ru.windcorp.progressia.server.world.ticking.Evaluation;
import ru.windcorp.progressia.server.world.tile.TickableTile;
@ -65,7 +66,9 @@ public class TickChunk extends Evaluation {
}
private void tickEntities(Server server) {
// TODO Implement
chunk.getData().forEachEntity(entity -> {
TickAndUpdateUtil.tickEntity(entity, server);
});
}
@Override