Working on #3 - Implemented entity ticking
This commit is contained in:
parent
9dbeeb7e8d
commit
4c3f5caae6
@ -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.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.Coordinates;
|
import ru.windcorp.progressia.common.world.Coordinates;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
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.common.world.tile.TileData;
|
||||||
import ru.windcorp.progressia.server.world.block.BlockLogic;
|
import ru.windcorp.progressia.server.world.block.BlockLogic;
|
||||||
import ru.windcorp.progressia.server.world.block.BlockLogicRegistry;
|
import ru.windcorp.progressia.server.world.block.BlockLogicRegistry;
|
||||||
import ru.windcorp.progressia.server.world.block.TickableBlock;
|
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.tasks.TickChunk;
|
||||||
import ru.windcorp.progressia.server.world.tile.TickableTile;
|
import ru.windcorp.progressia.server.world.tile.TickableTile;
|
||||||
import ru.windcorp.progressia.server.world.tile.TileLogic;
|
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) {
|
public BlockLogic getBlock(Vec3i blockInChunk) {
|
||||||
return BlockLogicRegistry.getInstance().get(
|
return BlockLogicRegistry.getInstance().get(
|
||||||
getData().getBlock(blockInChunk).getId()
|
getData().getBlock(blockInChunk).getId()
|
||||||
|
@ -32,7 +32,7 @@ implements BlockTickContext {
|
|||||||
|
|
||||||
public void init(Server server, Vec3i blockInWorld) {
|
public void init(Server server, Vec3i blockInWorld) {
|
||||||
setServer(server);
|
setServer(server);
|
||||||
setCoordsInWorld(blockInWorld);
|
if (blockInWorld != null) setCoordsInWorld(blockInWorld);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,11 +5,14 @@ import java.util.List;
|
|||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
import ru.windcorp.progressia.common.util.crash.CrashReports;
|
import ru.windcorp.progressia.common.util.crash.CrashReports;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockFace;
|
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.Server;
|
||||||
import ru.windcorp.progressia.server.world.block.BlockLogic;
|
import ru.windcorp.progressia.server.world.block.BlockLogic;
|
||||||
import ru.windcorp.progressia.server.world.block.BlockTickContext;
|
import ru.windcorp.progressia.server.world.block.BlockTickContext;
|
||||||
import ru.windcorp.progressia.server.world.block.TickableBlock;
|
import ru.windcorp.progressia.server.world.block.TickableBlock;
|
||||||
import ru.windcorp.progressia.server.world.block.UpdateableBlock;
|
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.TickableTile;
|
||||||
import ru.windcorp.progressia.server.world.tile.TileLogic;
|
import ru.windcorp.progressia.server.world.tile.TileLogic;
|
||||||
import ru.windcorp.progressia.server.world.tile.TileTickContext;
|
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(
|
public static BlockTickContext getBlockTickContext(
|
||||||
Server server,
|
Server server,
|
||||||
Vec3i blockInWorld
|
Vec3i blockInWorld
|
||||||
@ -131,6 +146,10 @@ public class TickAndUpdateUtil {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static TickContext getTickContext(Server server) {
|
||||||
|
return getBlockTickContext(server, null);
|
||||||
|
}
|
||||||
|
|
||||||
private TickAndUpdateUtil() {}
|
private TickAndUpdateUtil() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import ru.windcorp.progressia.server.Server;
|
|||||||
import ru.windcorp.progressia.server.world.ChunkLogic;
|
import ru.windcorp.progressia.server.world.ChunkLogic;
|
||||||
import ru.windcorp.progressia.server.world.MutableBlockTickContext;
|
import ru.windcorp.progressia.server.world.MutableBlockTickContext;
|
||||||
import ru.windcorp.progressia.server.world.MutableTileTickContext;
|
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.block.TickableBlock;
|
||||||
import ru.windcorp.progressia.server.world.ticking.Evaluation;
|
import ru.windcorp.progressia.server.world.ticking.Evaluation;
|
||||||
import ru.windcorp.progressia.server.world.tile.TickableTile;
|
import ru.windcorp.progressia.server.world.tile.TickableTile;
|
||||||
@ -65,7 +66,9 @@ public class TickChunk extends Evaluation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void tickEntities(Server server) {
|
private void tickEntities(Server server) {
|
||||||
// TODO Implement
|
chunk.getData().forEachEntity(entity -> {
|
||||||
|
TickAndUpdateUtil.tickEntity(entity, server);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user