From 6512cd76cd7a07354af6d64a404f0e8965246ee8 Mon Sep 17 00:00:00 2001 From: Askou Date: Tue, 15 Jun 2021 16:45:58 +0200 Subject: [PATCH] add abs to vector --- sources/Models/Vector3.hpp | 7 ++++++- sources/Runner/GameScene.cpp | 3 ++- sources/System/Renderer/RenderSystem.cpp | 20 +++++++++++--------- sources/System/Renderer/RenderSystem.hpp | 5 +++-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/sources/Models/Vector3.hpp b/sources/Models/Vector3.hpp index 8e8b4093..2af89bbc 100644 --- a/sources/Models/Vector3.hpp +++ b/sources/Models/Vector3.hpp @@ -135,7 +135,7 @@ namespace BBM double magnitude() const { - return (std::sqrt(std::pow(this->x, 2) + std::pow(this->y, 2), std::pow(this->z, 2))); + return (std::sqrt(std::pow(this->x, 2) + std::pow(this->y, 2) + std::pow(this->z, 2))); } Vector3 normalize() @@ -168,6 +168,11 @@ namespace BBM return (point * this) / std::pow(this->magnitude(), 2) * this; } + Vector3 abs() const + { + return Vector3(std::abs(this->x), std::abs(this->y), std::abs(this->z)); + } + Vector3 round() const requires(std::is_floating_point_v) { return Vector3(std::round(this->x), std::round(this->y), std::round(this->z)); diff --git a/sources/Runner/GameScene.cpp b/sources/Runner/GameScene.cpp index 9adf1750..09e5d3b1 100644 --- a/sources/Runner/GameScene.cpp +++ b/sources/Runner/GameScene.cpp @@ -33,7 +33,8 @@ namespace BBM auto scene = std::make_shared(); scene->addEntity("camera") .addComponent(8, 20, 7) - .addComponent(Vector3f(8, 0, 8)); + .addComponent(Vector3f(8, 0, 8)) + .addComponent(); MapGenerator::loadMap(16, 16, MapGenerator::createMap(16, 16), scene); return scene; } diff --git a/sources/System/Renderer/RenderSystem.cpp b/sources/System/Renderer/RenderSystem.cpp index 8ca43dd5..6275b580 100644 --- a/sources/System/Renderer/RenderSystem.cpp +++ b/sources/System/Renderer/RenderSystem.cpp @@ -80,23 +80,28 @@ namespace BBM this->_window.endDrawing(); } - void RenderSystem::onUpdate(WAL::ViewEntity &entity, + void RenderSystem::onUpdate(WAL::ViewEntity &entity, std::chrono::nanoseconds dtime) { auto &pos = entity.get(); auto &cam = entity.get(); + auto &mov = entity.get(); Vector3f newCameraPos = Vector3f(-1, -1, -1); std::vector playerPos; float maxDist = 0; for (auto &[entity, pos, _] : this->_wal.getScene()->view>()) { + std::cout << "Player pos" << pos.position << std::endl; playerPos.emplace_back(pos.position); } for (int i = 0; i < playerPos.size(); i++) { - if (i == 0) + if (i == 0) { newCameraPos = playerPos[i]; - else + std::cout << "First Camera Pos" << newCameraPos << std::endl; + } else { + std::cout << "Other Player pos" << playerPos[i] << std::endl; newCameraPos = (newCameraPos + playerPos[i]) / 2; + } } for (int i = 0; i < playerPos.size(); i++) for (int j = 0; j < playerPos.size(); j++) { @@ -105,13 +110,10 @@ namespace BBM } if (maxDist < 14) maxDist = 14; + newCameraPos.y = maxDist; + newCameraPos.z -= 1; + mov.addForce((newCameraPos - pos.position.abs()) / 10); cam.target = newCameraPos; - pos.position = newCameraPos; - - pos.position.y = maxDist; - pos.position.z -= 1; - std::cout << pos.position << std::endl; - std::cout << cam.target << std::endl; _camera.setPosition(pos.position); _camera.setTarget(cam.target); } diff --git a/sources/System/Renderer/RenderSystem.hpp b/sources/System/Renderer/RenderSystem.hpp index bff17267..080f6dd9 100644 --- a/sources/System/Renderer/RenderSystem.hpp +++ b/sources/System/Renderer/RenderSystem.hpp @@ -6,6 +6,7 @@ #include "Component/Renderer/CameraComponent.hpp" #include "Component/Position/PositionComponent.hpp" +#include "Component/Movable/MovableComponent.hpp" #include "Component/Renderer/Drawable3DComponent.hpp" #include "System/System.hpp" #include "Camera/Camera2D.hpp" @@ -14,7 +15,7 @@ namespace BBM { - class RenderSystem : public WAL::System + class RenderSystem : public WAL::System { //! @brief The window to render on @@ -35,7 +36,7 @@ namespace BBM void onSelfUpdate() override; //! @inherit - void onUpdate(WAL::ViewEntity &entity, std::chrono::nanoseconds dtime) override; + void onUpdate(WAL::ViewEntity &entity, std::chrono::nanoseconds dtime) override; //! @param debug true if debug mode should be enabled void setDebug(bool debug);