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.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()
|
||||
|
@ -32,7 +32,7 @@ implements BlockTickContext {
|
||||
|
||||
public void init(Server server, Vec3i blockInWorld) {
|
||||
setServer(server);
|
||||
setCoordsInWorld(blockInWorld);
|
||||
if (blockInWorld != null) setCoordsInWorld(blockInWorld);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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() {}
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user