X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fai%2FSpawner.cpp;fp=src%2Fai%2FSpawner.cpp;h=8ba32ffaf0e17ee6e5c50a179efdb94493a42dff;hb=43820582217f7e4b707d98f2e69d969eb77fc7c3;hp=6a692b11077b47f3d7b871505d0ab2db0ab606d3;hpb=bb83e2c9db0fc9746eb076a0ecbd5c64f899d7eb;p=blank.git diff --git a/src/ai/Spawner.cpp b/src/ai/Spawner.cpp index 6a692b1..8ba32ff 100644 --- a/src/ai/Spawner.cpp +++ b/src/ai/Spawner.cpp @@ -2,7 +2,8 @@ #include "Chaser.hpp" #include "RandomWalk.hpp" -#include "../model/shapes.hpp" +#include "../model/CompositeModel.hpp" +#include "../model/Skeletons.hpp" #include "../world/BlockLookup.hpp" #include "../world/BlockType.hpp" #include "../world/Entity.hpp" @@ -11,8 +12,9 @@ namespace blank { -Spawner::Spawner(World &world, std::uint64_t seed) +Spawner::Spawner(World &world, Skeletons &skeletons, std::uint64_t seed) : world(world) +, skeletons(skeletons) , controllers() , random(seed) , timer(64) @@ -20,37 +22,6 @@ Spawner::Spawner(World &world, std::uint64_t seed) , spawn_distance(16 * 16) , max_entities(16) , chunk_range(4) { - EntityModel::Buffer buf; - { - AABB bounds{{ -0.25f, -0.5f, -0.25f }, { 0.25f, 0.5f, 0.25f }}; - CuboidShape shape(bounds); - shape.Vertices(buf, 1.0f); - buf.colors.resize(shape.VertexCount(), { 1.0f, 1.0f, 0.0f }); - models[0].Update(buf); - skeletons[0].Bounds(bounds); - skeletons[0].SetNodeModel(&models[0]); - } - { - AABB bounds{{ -0.5f, -0.25f, -0.5f }, { 0.5f, 0.25f, 0.5f }}; - CuboidShape shape(bounds); - buf.Clear(); - shape.Vertices(buf, 2.0f); - buf.colors.resize(shape.VertexCount(), { 0.0f, 1.0f, 1.0f }); - models[1].Update(buf); - skeletons[1].Bounds(bounds); - skeletons[1].SetNodeModel(&models[1]); - } - { - AABB bounds{{ -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f }}; - StairShape shape(bounds, { 0.4f, 0.4f }); - buf.Clear(); - shape.Vertices(buf, 3.0f); - buf.colors.resize(shape.VertexCount(), { 1.0f, 0.0f, 1.0f }); - models[2].Update(buf); - skeletons[2].Bounds(bounds); - skeletons[2].SetNodeModel(&models[2]); - } - timer.Start(); } @@ -120,7 +91,6 @@ void Spawner::TrySpawn() { random.Next() % Chunk::depth ); - // distance check glm::vec3 diff(glm::vec3(chunk * Chunk::Extent() - pos) + player.Position()); float dist = dot(diff, diff); @@ -155,7 +125,7 @@ void Spawner::Spawn(Entity &reference, const glm::ivec3 &chunk, const glm::vec3 e.Position(chunk, pos); e.Bounds({ { -0.5f, -0.5f, -0.5f }, { 0.5f, 0.5f, 0.5f } }); e.WorldCollidable(true); - skeletons[random.Next() % 3].Instantiate(e.GetModel()); + skeletons[random.Next() % skeletons.Size()].Instantiate(e.GetModel()); e.AngularVelocity(rot); Controller *ctrl; if (random()) {