X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2Fworld.cpp;h=e4fb968ddfbb8014004a2b7a6a7647be53b2c2a5;hb=04531ab5fc3d82ba5b5d456bcc277fe6499e1150;hp=f648baad45c082da5139066bf7fed8f68e6a1334;hpb=a50aa0f2a2fea14f5f8c56209e2ecde3088ef913;p=blank.git diff --git a/src/world/world.cpp b/src/world/world.cpp index f648baa..e4fb968 100644 --- a/src/world/world.cpp +++ b/src/world/world.cpp @@ -136,6 +136,19 @@ Player::~Player() { } +bool Player::SuitableSpawn(BlockLookup &spawn_block) const noexcept { + if (!spawn_block || spawn_block.GetType().collide_block) { + return false; + } + + BlockLookup head_block(spawn_block.Next(Block::FACE_UP)); + if (!head_block || head_block.GetType().collide_block) { + return false; + } + + return true; +} + void Player::Update(int dt) { chunks.Rebase(entity.ChunkCoords()); } @@ -145,8 +158,6 @@ World::World(const BlockTypeRegistry &types, const Config &config) : config(config) , block_type(types) , chunks(types) -// TODO: set spawn base and extent from config -, spawn_index(chunks.MakeIndex(Chunk::Pos(0, 0, 0), 3)) , players() , entities() , light_direction(config.light_direction) @@ -155,7 +166,7 @@ World::World(const BlockTypeRegistry &types, const Config &config) } World::~World() { - chunks.UnregisterIndex(spawn_index); + } @@ -169,7 +180,6 @@ Player *World::AddPlayer(const std::string &name) { entity.Name(name); entity.Bounds({ { -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f } }); entity.WorldCollidable(true); - entity.Position(config.spawn); ChunkIndex &index = chunks.MakeIndex(entity.ChunkCoords(), 6); players.emplace_back(entity, index); return &players.back(); @@ -188,7 +198,6 @@ Player *World::AddPlayer(const std::string &name, std::uint32_t id) { entity->Name(name); entity->Bounds({ { -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f } }); entity->WorldCollidable(true); - entity->Position(config.spawn); ChunkIndex &index = chunks.MakeIndex(entity->ChunkCoords(), 6); players.emplace_back(*entity, index); return &players.back();