Interface::Interface(
const Config &config,
Environment &env,
- World &world)
+ World &world,
+ const Player &player)
: env(env)
, world(world)
-// let's assume this succeeds and hope for the best for now
-, ctrl(*world.AddPlayer(config.player_name))
+, player(player)
+, ctrl(*player.entity)
, hud(world.BlockTypes(), env.assets.small_ui_font)
, aim{{ 0, 0, 0 }, { 0, 0, -1 }}
, aim_world()
void Interface::PlaceBlock() {
if (!aim_world) return;
- glm::vec3 next_pos = aim_world.BlockCoords() + aim_world.normal;
- BlockLookup next_block(&aim_world.GetChunk(), next_pos);
- if (next_block) {
+ BlockLookup next_block(aim_world.chunk, aim_world.BlockPos(), Block::NormalFace(aim_world.normal));
+ if (!next_block) {
+ return;
}
next_block.SetBlock(selection);
const Entity &player = ctrl.Controlled();
env.audio.Play(
place_sound,
- aim_world.GetChunk().ToSceneCoords(player.ChunkCoords(), next_pos)
+ next_block.GetChunk().ToSceneCoords(player.ChunkCoords(), next_block.GetBlockCoords())
);
}
outl_buf.Clear();
aim_world.GetType().FillOutlineModel(outl_buf);
outline.Update(outl_buf);
- outline_transform = aim_world.GetChunk().Transform(Player().ChunkCoords());
+ outline_transform = aim_world.GetChunk().Transform(player.entity->ChunkCoords());
outline_transform *= aim_world.BlockTransform();
outline_transform *= glm::scale(glm::vec3(1.005f));
}