From 7e7dfd97b7545542c7b262d90bfa49100a353f9e Mon Sep 17 00:00:00 2001 From: Ethan Adams Date: Sat, 22 Jun 2024 00:08:59 -0400 Subject: [PATCH] Removed UNIX (..) from headers Cleaned up the weapon class moved mousestate.h out of gameplay into utility --- YuppleMayham/CMakeLists.txt | 3 +- YuppleMayham/gameplay/camera.h | 2 +- YuppleMayham/gameplay/entity.h | 2 +- YuppleMayham/gameplay/gameactor.h | 4 +- YuppleMayham/gameplay/input.h | 2 +- YuppleMayham/gameplay/map.h | 2 +- YuppleMayham/gameplay/weapons/bullet.h | 2 +- YuppleMayham/gameplay/weapons/weapon.h | 22 ++- YuppleMayham/graphics/sprite.h | 2 +- YuppleMayham/src/gameplay/ai.cpp | 8 +- YuppleMayham/src/gameplay/camera.cpp | 2 +- YuppleMayham/src/gameplay/entity.cpp | 6 +- YuppleMayham/src/gameplay/game.cpp | 16 +- YuppleMayham/src/gameplay/gameactor.cpp | 14 +- YuppleMayham/src/gameplay/input.cpp | 6 +- YuppleMayham/src/gameplay/map.cpp | 11 +- YuppleMayham/src/gameplay/physics.cpp | 7 +- YuppleMayham/src/gameplay/scene.cpp | 30 ++-- YuppleMayham/src/gameplay/weapons/bullet.cpp | 6 +- .../src/gameplay/weapons/bulletmanager.cpp | 10 +- YuppleMayham/src/gameplay/weapons/weapon.cpp | 148 ++++++++++-------- YuppleMayham/src/graphics/instancedraw.cpp | 4 +- YuppleMayham/src/graphics/mesh.cpp | 2 +- YuppleMayham/src/graphics/shader.cpp | 2 +- YuppleMayham/src/graphics/sprite.cpp | 8 +- YuppleMayham/src/graphics/texture.cpp | 4 +- YuppleMayham/src/graphics/tile.cpp | 6 +- YuppleMayham/src/main.cpp | 2 +- YuppleMayham/src/util.cpp | 2 +- YuppleMayham/src/utility/command.cpp | 4 +- YuppleMayham/src/utility/debugdraw.cpp | 2 +- YuppleMayham/src/utility/ftfont.cpp | 2 +- YuppleMayham/src/utility/resourcemanager.cpp | 16 +- YuppleMayham/src/utility/script.cpp | 10 +- YuppleMayham/src/utility/xmlloader.cpp | 4 +- YuppleMayham/utility/command.h | 2 +- YuppleMayham/utility/component.h | 8 +- YuppleMayham/utility/events.h | 2 +- .../{gameplay => utility}/mousestate.h | 0 YuppleMayham/utility/raycaster.h | 2 +- YuppleMayham/utility/resourcemanager.h | 2 +- 41 files changed, 213 insertions(+), 176 deletions(-) rename YuppleMayham/{gameplay => utility}/mousestate.h (100%) diff --git a/YuppleMayham/CMakeLists.txt b/YuppleMayham/CMakeLists.txt index 7d5615a..cfb9ab1 100644 --- a/YuppleMayham/CMakeLists.txt +++ b/YuppleMayham/CMakeLists.txt @@ -5,6 +5,7 @@ find_package(SDL2 REQUIRED) find_package(SDL2_IMAGE REQUIRED) +include_directories(SYSTEM "${PROJECT_SOURCE_DIR}/YuppleMayham") include_directories(SYSTEM "c:/sdks/glad/include") include_directories(SYSTEM "c:/sdks/tinyxml2-10.0.0/debug/include") include_directories(SYSTEM "c:/sdks/glm") @@ -21,7 +22,7 @@ include_directories(${PROJECT_SOURCE_DIR}/YupplyMayham/gameplay/weapons) include_directories(${PROJECT_SOURCE_DIR}/YupplyMayham) # Add source to this project's executable. -add_executable (YuppleMayham "src/main.cpp" "c:/sdks/glad/src/glad.c" "graphics/glwindow.h" "src/graphics/sprite.cpp" "src/graphics/mesh.cpp" "src/gameplay/entity.cpp" "src/gameplay/gameactor.cpp" "src/graphics/shader.cpp" "src/util.cpp" "gameplay/camera.h" "src/gameplay/camera.cpp" "src/utility/command.cpp" "src/gameplay/input.cpp" "gameplay/mousestate.h" "src/gameplay/weapons/bullet.cpp" "gameplay/weapons/bulletmanager.h" "src/gameplay/weapons/bulletmanager.cpp" "src/gameplay/scene.cpp" "gameplay/scene.h" "graphics/tile.h" "graphics/texture.h" "src/graphics/texture.cpp" "src/graphics/tile.cpp" "graphics/tiletype.h" "utility/resourcemanager.h" "src/utility/resourcemanager.cpp" "utility/xmlloader.h" "src/utility/xmlloader.cpp" "gameplay/game.h" "src/gameplay/game.cpp" "src/graphics/instancedraw.cpp" "gameplay/map.h" "src/gameplay/map.cpp" "src/gameplay/weapons/weapon.cpp" "gameplay/physics.h" "src/gameplay/physics.cpp" "utility/events.h" "utility/debugdraw.h" "src/utility/debugdraw.cpp" "utility/script.h" "src/utility/script.cpp" "gameplay/ai.h" "utility/raycaster.h" "src/gameplay/ai.cpp" "utility/ftfont.h" "src/utility/ftfont.cpp" "utility/direction.h") +add_executable (YuppleMayham "src/main.cpp" "c:/sdks/glad/src/glad.c" "graphics/glwindow.h" "src/graphics/sprite.cpp" "src/graphics/mesh.cpp" "src/gameplay/entity.cpp" "src/gameplay/gameactor.cpp" "src/graphics/shader.cpp" "src/util.cpp" "gameplay/camera.h" "src/gameplay/camera.cpp" "src/utility/command.cpp" "src/gameplay/input.cpp" "utility/mousestate.h" "src/gameplay/weapons/bullet.cpp" "gameplay/weapons/bulletmanager.h" "src/gameplay/weapons/bulletmanager.cpp" "src/gameplay/scene.cpp" "gameplay/scene.h" "graphics/tile.h" "graphics/texture.h" "src/graphics/texture.cpp" "src/graphics/tile.cpp" "graphics/tiletype.h" "utility/resourcemanager.h" "src/utility/resourcemanager.cpp" "utility/xmlloader.h" "src/utility/xmlloader.cpp" "gameplay/game.h" "src/gameplay/game.cpp" "src/graphics/instancedraw.cpp" "gameplay/map.h" "src/gameplay/map.cpp" "src/gameplay/weapons/weapon.cpp" "gameplay/physics.h" "src/gameplay/physics.cpp" "utility/events.h" "utility/debugdraw.h" "src/utility/debugdraw.cpp" "utility/script.h" "src/utility/script.cpp" "gameplay/ai.h" "utility/raycaster.h" "src/gameplay/ai.cpp" "utility/ftfont.h" "src/utility/ftfont.cpp" "utility/direction.h") add_custom_command(TARGET YuppleMayham PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Resources/ $) diff --git a/YuppleMayham/gameplay/camera.h b/YuppleMayham/gameplay/camera.h index 3fee5c2..6491698 100644 --- a/YuppleMayham/gameplay/camera.h +++ b/YuppleMayham/gameplay/camera.h @@ -1,7 +1,7 @@ #ifndef _H_CAMERA_H #define _H_CAMERA_H -#include "entity.h" +#include "gameplay/entity.h" class Camera { diff --git a/YuppleMayham/gameplay/entity.h b/YuppleMayham/gameplay/entity.h index 06207e3..6c5b623 100644 --- a/YuppleMayham/gameplay/entity.h +++ b/YuppleMayham/gameplay/entity.h @@ -5,7 +5,7 @@ #include #include -#include "../graphics/shader.h" +#include "graphics/shader.h" class Camera; struct PhysicsComponent; diff --git a/YuppleMayham/gameplay/gameactor.h b/YuppleMayham/gameplay/gameactor.h index 9867428..d117840 100644 --- a/YuppleMayham/gameplay/gameactor.h +++ b/YuppleMayham/gameplay/gameactor.h @@ -4,8 +4,8 @@ #include #include -#include "entity.h" -#include "mousestate.h" +#include "gameplay/entity.h" +#include "utility/mousestate.h" class Component; class AI; diff --git a/YuppleMayham/gameplay/input.h b/YuppleMayham/gameplay/input.h index 197eb40..71112e9 100644 --- a/YuppleMayham/gameplay/input.h +++ b/YuppleMayham/gameplay/input.h @@ -5,7 +5,7 @@ #include #include -#include "mousestate.h" +#include "utility/mousestate.h" class Command; class MouseCommand; diff --git a/YuppleMayham/gameplay/map.h b/YuppleMayham/gameplay/map.h index f66ce1d..25e28f9 100644 --- a/YuppleMayham/gameplay/map.h +++ b/YuppleMayham/gameplay/map.h @@ -4,7 +4,7 @@ #include #include -#include "../graphics/instancedraw.h" +#include "graphics/instancedraw.h" //class TileTextureInstance; class Shader; diff --git a/YuppleMayham/gameplay/weapons/bullet.h b/YuppleMayham/gameplay/weapons/bullet.h index 922221a..1806373 100644 --- a/YuppleMayham/gameplay/weapons/bullet.h +++ b/YuppleMayham/gameplay/weapons/bullet.h @@ -1,7 +1,7 @@ #ifndef _H_BULLET_H #define _H_BULLET_H -#include "../entity.h" +#include "gameplay/entity.h" #include #include class Component; diff --git a/YuppleMayham/gameplay/weapons/weapon.h b/YuppleMayham/gameplay/weapons/weapon.h index bf5843b..be36032 100644 --- a/YuppleMayham/gameplay/weapons/weapon.h +++ b/YuppleMayham/gameplay/weapons/weapon.h @@ -5,10 +5,11 @@ #include #include -#include "../../util.h" +#include "util.h" -#include "../../gameplay/entity.h" -#include "../../utility/direction.h" +#include "gameplay/entity.h" +#include "gameplay/weapons/bullet.h" +#include "utility/direction.h" // TODO: Put all weapons inside of this base, we don't need a class for every weapon, we only need one class! @@ -35,6 +36,21 @@ public: void render(const std::shared_ptr& camera); private: + + struct BulletData { + glm::vec3 origin; + glm::vec2 direction; + float mass; + float sizeMod; + float speedMod; + float dropMod; + }; + + void adjustWeapon(); + + BulletData genBulletData(); + std::shared_ptr createBullet(const BulletData& data); + glm::vec2 weaponSize; glm::vec2 weaponOffset; diff --git a/YuppleMayham/graphics/sprite.h b/YuppleMayham/graphics/sprite.h index e1c375f..8c2656c 100644 --- a/YuppleMayham/graphics/sprite.h +++ b/YuppleMayham/graphics/sprite.h @@ -10,7 +10,7 @@ #include #include -#include "../utility/direction.h" +#include "utility/direction.h" enum class TileType; class Texture; diff --git a/YuppleMayham/src/gameplay/ai.cpp b/YuppleMayham/src/gameplay/ai.cpp index e78b304..5bf18b3 100644 --- a/YuppleMayham/src/gameplay/ai.cpp +++ b/YuppleMayham/src/gameplay/ai.cpp @@ -1,8 +1,8 @@ -#include "../../gameplay/ai.h" -#include "../../gameplay/gameactor.h" +#include "gameplay/ai.h" +#include "gameplay/gameactor.h" -#include "../../utility/raycaster.h" -#include "../../utility/script.h" +#include "utility/raycaster.h" +#include "utility/script.h" AI::AI(const std::shared_ptr& actor, const std::shared_ptr& raycaster) diff --git a/YuppleMayham/src/gameplay/camera.cpp b/YuppleMayham/src/gameplay/camera.cpp index 1ad3221..d4fd83c 100644 --- a/YuppleMayham/src/gameplay/camera.cpp +++ b/YuppleMayham/src/gameplay/camera.cpp @@ -1,4 +1,4 @@ -#include "../../gameplay/camera.h" +#include "gameplay/camera.h" void Camera::update(float deltaTime) { diff --git a/YuppleMayham/src/gameplay/entity.cpp b/YuppleMayham/src/gameplay/entity.cpp index 955d82f..e7a88a9 100644 --- a/YuppleMayham/src/gameplay/entity.cpp +++ b/YuppleMayham/src/gameplay/entity.cpp @@ -1,6 +1,6 @@ -#include "../../gameplay/entity.h" -#include "../../gameplay/camera.h" -#include "../../gameplay/physics.h" +#include "gameplay/entity.h" +#include "gameplay/camera.h" +#include "gameplay/physics.h" void Entity::setPosition(const glm::vec3& position) { diff --git a/YuppleMayham/src/gameplay/game.cpp b/YuppleMayham/src/gameplay/game.cpp index 48415f8..54be37b 100644 --- a/YuppleMayham/src/gameplay/game.cpp +++ b/YuppleMayham/src/gameplay/game.cpp @@ -1,10 +1,12 @@ -#include "../../gameplay/game.h" -#include "../../graphics/glwindow.h" -#include "../../gameplay/input.h" -#include "../../utility/command.h" -#include "../../gameplay/scene.h" -#include "../../utility/resourcemanager.h" -#include "../../utility/ftfont.h" +#include "gameplay/game.h" +#include "gameplay/input.h" +#include "gameplay/scene.h" + +#include "utility/command.h" +#include "utility/resourcemanager.h" +#include "utility/ftfont.h" + +#include "graphics/glwindow.h" #include #include diff --git a/YuppleMayham/src/gameplay/gameactor.cpp b/YuppleMayham/src/gameplay/gameactor.cpp index 3b57800..0fce811 100644 --- a/YuppleMayham/src/gameplay/gameactor.cpp +++ b/YuppleMayham/src/gameplay/gameactor.cpp @@ -1,10 +1,10 @@ -#include "../../gameplay/gameactor.h" -#include "../../utility/component.h" -#include "../../gameplay/entity.h" -#include "../../gameplay/physics.h" -#include "../../gameplay/weapons/weapon.h" -#include "../../utility/events.h" -#include "../../utility/direction.h" +#include "gameplay/gameactor.h" +#include "gameplay/entity.h" +#include "gameplay/physics.h" +#include "gameplay/weapons/weapon.h" +#include "utility/events.h" +#include "utility/direction.h" +#include "utility/component.h" GameActor::~GameActor() { } diff --git a/YuppleMayham/src/gameplay/input.cpp b/YuppleMayham/src/gameplay/input.cpp index 9cf54f7..e62a751 100644 --- a/YuppleMayham/src/gameplay/input.cpp +++ b/YuppleMayham/src/gameplay/input.cpp @@ -1,6 +1,6 @@ -#include "../../gameplay/input.h" -#include "../../utility/command.h" -#include "../../gameplay/gameactor.h" +#include "gameplay/input.h" +#include "utility/command.h" +#include "gameplay/gameactor.h" #include diff --git a/YuppleMayham/src/gameplay/map.cpp b/YuppleMayham/src/gameplay/map.cpp index 5ca145d..461b7dc 100644 --- a/YuppleMayham/src/gameplay/map.cpp +++ b/YuppleMayham/src/gameplay/map.cpp @@ -1,9 +1,8 @@ -#include "../../gameplay/map.h" -//#include "../../graphics/instancedraw.h" -#include "../../utility/xmlloader.h" -#include "../../graphics/tiletype.h" -#include "../../graphics/shader.h" -#include "../../gameplay/camera.h" +#include "gameplay/map.h" +#include "utility/xmlloader.h" +#include "graphics/tiletype.h" +#include "graphics/shader.h" +#include "gameplay/camera.h" #include diff --git a/YuppleMayham/src/gameplay/physics.cpp b/YuppleMayham/src/gameplay/physics.cpp index 603da0b..11a44eb 100644 --- a/YuppleMayham/src/gameplay/physics.cpp +++ b/YuppleMayham/src/gameplay/physics.cpp @@ -1,6 +1,6 @@ -#include "../../gameplay/physics.h" -#include "../../gameplay/weapons/bullet.h" -#include "../../utility/events.h" +#include "gameplay/physics.h" +#include "gameplay/weapons/bullet.h" +#include "utility/events.h" #include @@ -115,6 +115,7 @@ void PhysicsEngine::resolvePossibleCollisions() glm::vec3 correctionVector = normal * (penetrationDepth / ((1 / objs.first->rigidBody.mass) + (1 / objs.second->rigidBody.mass))); glm::vec3 vrel = objs.first->rigidBody.velocity - objs.second->rigidBody.velocity; + // smallest elasticity of the two colliders float e = std::min(objs.first->rigidBody.elasticity, objs.second->rigidBody.elasticity); float impulseMag = (-(1 + e) * glm::dot(vrel, normal)) / ((1 / objs.first->rigidBody.mass) + (1 / objs.second->rigidBody.mass)); diff --git a/YuppleMayham/src/gameplay/scene.cpp b/YuppleMayham/src/gameplay/scene.cpp index 6ff48ef..ed7c45f 100644 --- a/YuppleMayham/src/gameplay/scene.cpp +++ b/YuppleMayham/src/gameplay/scene.cpp @@ -1,20 +1,20 @@ -#include "../../gameplay/scene.h" -#include "../../gameplay/camera.h" -#include "../../gameplay/gameactor.h" -#include "../../gameplay/weapons/weapons.h" -#include "../../gameplay/map.h" -#include "../../gameplay/physics.h" -#include "../../gameplay/ai.h" +#include "gameplay/scene.h" +#include "gameplay/camera.h" +#include "gameplay/gameactor.h" +#include "gameplay/weapons/weapons.h" +#include "gameplay/map.h" +#include "gameplay/physics.h" +#include "gameplay/ai.h" -#include "../../graphics/tile.h" -#include "../../graphics/sprite.h" +#include "graphics/tile.h" +#include "graphics/sprite.h" -#include "../../utility/component.h" -#include "../../utility/xmlloader.h" -#include "../../utility/resourcemanager.h" -#include "../../utility/events.h" -#include "../../utility/raycaster.h" -#include "../../utility/debugdraw.h" +#include "utility/component.h" +#include "utility/xmlloader.h" +#include "utility/resourcemanager.h" +#include "utility/events.h" +#include "utility/raycaster.h" +#include "utility/debugdraw.h" // Scene xml files, should contain a node called that holds the sprite location /* diff --git a/YuppleMayham/src/gameplay/weapons/bullet.cpp b/YuppleMayham/src/gameplay/weapons/bullet.cpp index 850dea6..b4e0951 100644 --- a/YuppleMayham/src/gameplay/weapons/bullet.cpp +++ b/YuppleMayham/src/gameplay/weapons/bullet.cpp @@ -1,6 +1,6 @@ -#include "../../../gameplay/weapons/bullet.h" -#include "../../../utility/component.h" -#include "../../../gameplay/physics.h" +#include "gameplay/weapons/bullet.h" +#include "gameplay/physics.h" +#include "utility/component.h" void Bullet::addComponent(std::shared_ptr component) { diff --git a/YuppleMayham/src/gameplay/weapons/bulletmanager.cpp b/YuppleMayham/src/gameplay/weapons/bulletmanager.cpp index f77f269..c9a996f 100644 --- a/YuppleMayham/src/gameplay/weapons/bulletmanager.cpp +++ b/YuppleMayham/src/gameplay/weapons/bulletmanager.cpp @@ -1,8 +1,8 @@ -#include "../../../gameplay/weapons/bulletmanager.h" -#include "../../../gameplay/weapons/bullet.h" -#include "../../../utility/component.h" -#include "../../../gameplay/physics.h" -#include "../../../utility/events.h" +#include "gameplay/weapons/bulletmanager.h" +#include "gameplay/weapons/bullet.h" +#include "gameplay/physics.h" +#include "utility/events.h" +#include "utility/component.h" #include diff --git a/YuppleMayham/src/gameplay/weapons/weapon.cpp b/YuppleMayham/src/gameplay/weapons/weapon.cpp index 07ffc2c..503c2ea 100644 --- a/YuppleMayham/src/gameplay/weapons/weapon.cpp +++ b/YuppleMayham/src/gameplay/weapons/weapon.cpp @@ -1,14 +1,14 @@ -#include "../../../gameplay/weapons/weapon.h" -#include "../../../utility/resourcemanager.h" -#include "../../../gameplay/weapons/bulletmanager.h" -#include "../../../gameplay/weapons/bullet.h" -#include "../../../gameplay/gameactor.h" -#include "../../../utility/component.h" -#include "../../../utility/events.h" -#include "../../../gameplay/physics.h" +#include "gameplay/weapons/weapon.h" +#include "utility/resourcemanager.h" +#include "gameplay/weapons/bulletmanager.h" +#include "gameplay/weapons/bullet.h" +#include "gameplay/gameactor.h" +#include "utility/component.h" +#include "utility/events.h" +#include "gameplay/physics.h" #include -#include "../../../utility/debugdraw.h" +#include "utility/debugdraw.h" // TODO: Regular clean up, make this mess readable! @@ -52,37 +52,9 @@ void Weapon::shoot() Uint32 currentTime = SDL_GetTicks(); if (currentTime - lastFireTime >= fireSpeed) { - float rotation = glm::radians(wielder->getRotation()); - float mass = 0.1f; - glm::vec2 facing = glm::vec2( - cos(rotation + glm::radians(static_cast(bulletSpread->genFloat()))), - sin(rotation + glm::radians(static_cast(bulletSpread->genFloat()))) - ); - facing = glm::normalize(facing); - float sizeMod = bulletModifer->genFloat(); - float speedMod = bulletModifer->genFloat(); - float dropMod = bulletModifer->genFloat(); - - float radius = wielder->getScale().x + (weaponSize.x * 0.5) + weaponOffset.x; - - glm::vec3 offset = glm::vec3( - // x offset from the wielder - wielder->getCenter().x + cos(rotation) * radius - sin(rotation) * weaponOffset.y, - // y offset from the wielder - wielder->getCenter().y + sin(rotation) * radius + cos(rotation) * weaponOffset.y, - 0.0f - ); - glm::vec3 origin = offset; - origin.x -= ((bulletSize.x) * sizeMod) * 0.5f; - origin.y -= ((bulletSize.y) * sizeMod) * 0.5f; - - auto bullet = std::make_shared(wielder->getActorID(), bulletShader, origin, facing, bulletSpeed, bulletDrop, bulletSize); - bullet->addComponent(bulletSprite); - bullet->addPhysicsComponent(std::make_shared(PhysicsComponentFactory::makeBullet(wielder->getActorID(), origin, mass, bulletSize.x / 2))); - bullet->getPhysicsComponent()->rigidBody.velocity += bulletSpeed * glm::vec3(facing.x, facing.y, 0.f) / mass; - if (eventManager) - eventManager->notify(std::make_shared(bullet)); - bulletManager->addBullet(bullet); + // create bullet using this generated data + BulletData b = genBulletData(); + bulletManager->addBullet(createBullet(b)); lastFireTime = currentTime; } } @@ -97,32 +69,10 @@ void Weapon::hookEventManager(const std::shared_ptr& eventManager) void Weapon::update(float deltaTime) { Entity::update(deltaTime); + // move the weapon into place as the wielder rotates and moves if (wielder) - { - float rotation = glm::radians(wielder->getRotation()); + adjustWeapon(); - glm::vec3 offset = glm::vec3( - cos(rotation) * ((wielder->getScale().x) - weaponSize.x * 0.5f), - sin(rotation) * ((wielder->getScale().y) - weaponSize.y * 0.5f), - 0.0f - ); - glm::vec3 origin = wielder->getCenter() + offset; - origin.x -= (weaponSize.x) * 0.5f; - origin.y -= (weaponSize.y) * 0.5f; - - // Flip the texture if the weapon is facing upwards or downwards - Direction d = getDirectionFromRotation(glm::degrees(rotation)); - if ((lastDir == Direction::Up || lastDir == Direction::Left) && - (d == Direction::Down || d == Direction::Right) && !isFlipped()) - flip(); - if ((lastDir == Direction::Down || lastDir == Direction::Right) && - (d == Direction::Up || d == Direction::Left) && isFlipped()) - flip(); - - setRotation(wielder->getRotation() - 180); - setPosition(origin); - lastDir = getDirectionFromRotation(glm::degrees(rotation)); - } for (auto& component : components) component->update(); bulletManager->update(deltaTime); @@ -137,4 +87,72 @@ void Weapon::render(const std::shared_ptr& camera) component->render(); } bulletManager->render(camera); -} \ No newline at end of file +} + +void Weapon::adjustWeapon() +{ + float rotation = glm::radians(wielder->getRotation()); + + glm::vec3 offset = glm::vec3( + cos(rotation) * ((wielder->getScale().x) - weaponSize.x * 0.5f), + sin(rotation) * ((wielder->getScale().y) - weaponSize.y * 0.5f), + 0.0f + ); + glm::vec3 origin = wielder->getCenter() + offset; + origin.x -= (weaponSize.x) * 0.5f; + origin.y -= (weaponSize.y) * 0.5f; + + // Flip the texture if the weapon is facing upwards or downwards + Direction d = getDirectionFromRotation(glm::degrees(rotation)); + if ((lastDir == Direction::Up || lastDir == Direction::Left) && + (d == Direction::Down || d == Direction::Right) && !isFlipped()) + flip(); + if ((lastDir == Direction::Down || lastDir == Direction::Right) && + (d == Direction::Up || d == Direction::Left) && isFlipped()) + flip(); + + setRotation(wielder->getRotation() - 180); + setPosition(origin); + lastDir = getDirectionFromRotation(glm::degrees(rotation)); +} + +Weapon::BulletData Weapon::genBulletData() +{ + BulletData b; + float rotation = glm::radians(wielder->getRotation()); + b.mass = 0.1f; + glm::vec2 facing = glm::vec2( + cos(rotation + glm::radians(static_cast(bulletSpread->genFloat()))), + sin(rotation + glm::radians(static_cast(bulletSpread->genFloat()))) + ); + b.direction = glm::normalize(facing); + b.sizeMod = bulletModifer->genFloat(); + b.speedMod = bulletModifer->genFloat(); + b.dropMod = bulletModifer->genFloat(); + + float radius = wielder->getScale().x + (weaponSize.x * 0.5) + weaponOffset.x; + + b.origin = glm::vec3( + // x offset from the wielder + wielder->getCenter().x + cos(rotation) * radius - sin(rotation) * weaponOffset.y, + // y offset from the wielder + wielder->getCenter().y + sin(rotation) * radius + cos(rotation) * weaponOffset.y, + 0.0f + ); + b.origin.x -= ((bulletSize.x) * b.sizeMod) * 0.5f; + b.origin.y -= ((bulletSize.y) * b.sizeMod) * 0.5f; + return b; +} + +std::shared_ptr Weapon::createBullet(const Weapon::BulletData& data) +{ + auto bullet = std::make_shared(wielder->getActorID(), bulletShader, data.origin, data.direction, bulletSpeed, bulletDrop, bulletSize); + bullet->addComponent(bulletSprite); + bullet->addPhysicsComponent(std::make_shared(PhysicsComponentFactory::makeBullet(wielder->getActorID(), data.origin, data.mass, bulletSize.x / 2))); + bullet->getPhysicsComponent()->rigidBody.velocity += bulletSpeed * glm::vec3(data.direction.x, data.direction.y, 0.f) / data.mass; + + if (eventManager) + eventManager->notify(std::make_shared(bullet)); + return bullet; +} + diff --git a/YuppleMayham/src/graphics/instancedraw.cpp b/YuppleMayham/src/graphics/instancedraw.cpp index d57365c..4be4138 100644 --- a/YuppleMayham/src/graphics/instancedraw.cpp +++ b/YuppleMayham/src/graphics/instancedraw.cpp @@ -1,5 +1,5 @@ -#include "../../graphics/instancedraw.h" -#include "../../graphics/texture.h" +#include "graphics/instancedraw.h" +#include "graphics/texture.h" #include #include diff --git a/YuppleMayham/src/graphics/mesh.cpp b/YuppleMayham/src/graphics/mesh.cpp index bb716e0..71356f4 100644 --- a/YuppleMayham/src/graphics/mesh.cpp +++ b/YuppleMayham/src/graphics/mesh.cpp @@ -1,4 +1,4 @@ -#include "../../graphics/mesh.h" +#include "graphics/mesh.h" Mesh::Mesh(const VertexList& vertexList, const IndexList& indexList) : indexSize(indexList.size()) { diff --git a/YuppleMayham/src/graphics/shader.cpp b/YuppleMayham/src/graphics/shader.cpp index 7024d41..fe63f57 100644 --- a/YuppleMayham/src/graphics/shader.cpp +++ b/YuppleMayham/src/graphics/shader.cpp @@ -1,4 +1,4 @@ -#include "../../graphics/shader.h" +#include "graphics/shader.h" Shader::Shader(const char* vertexPath, const char* fragmentPath) { diff --git a/YuppleMayham/src/graphics/sprite.cpp b/YuppleMayham/src/graphics/sprite.cpp index 240a5cb..12b1415 100644 --- a/YuppleMayham/src/graphics/sprite.cpp +++ b/YuppleMayham/src/graphics/sprite.cpp @@ -1,7 +1,7 @@ -#include "../../graphics/sprite.h" -#include "../../graphics/texture.h" -#include "../../util.h" -#include "../../utility/events.h" +#include "graphics/sprite.h" +#include "graphics/texture.h" +#include "util.h" +#include "utility/events.h" SpriteStatic::SpriteStatic(const char* texturePath) { diff --git a/YuppleMayham/src/graphics/texture.cpp b/YuppleMayham/src/graphics/texture.cpp index 752b190..9204e4c 100644 --- a/YuppleMayham/src/graphics/texture.cpp +++ b/YuppleMayham/src/graphics/texture.cpp @@ -1,5 +1,5 @@ -#include "../../graphics/texture.h" -#include "../../util.h" +#include "graphics/texture.h" +#include "util.h" #include #include diff --git a/YuppleMayham/src/graphics/tile.cpp b/YuppleMayham/src/graphics/tile.cpp index 29a0609..0c6d4fe 100644 --- a/YuppleMayham/src/graphics/tile.cpp +++ b/YuppleMayham/src/graphics/tile.cpp @@ -1,6 +1,6 @@ -#include "../../graphics/tile.h" -#include "../../graphics/texture.h" -#include "../../graphics/tiletype.h" +#include "graphics/tile.h" +#include "graphics/texture.h" +#include "graphics/tiletype.h" TileSet::TileSet(const char* tileSetImage, float frameSize) { diff --git a/YuppleMayham/src/main.cpp b/YuppleMayham/src/main.cpp index 6502d36..7b32d95 100644 --- a/YuppleMayham/src/main.cpp +++ b/YuppleMayham/src/main.cpp @@ -5,7 +5,7 @@ #include // TODO: Fix circular dependency issues, mostly with input.h needing gameactor.h and command.h -#include "../gameplay/game.h" +#include "gameplay/game.h" const float vertices[] = { 0.0f, 0.5f, 0.0f, diff --git a/YuppleMayham/src/util.cpp b/YuppleMayham/src/util.cpp index 97e9e07..15f9d74 100644 --- a/YuppleMayham/src/util.cpp +++ b/YuppleMayham/src/util.cpp @@ -1,4 +1,4 @@ -#include "../util.h" +#include "util.h" namespace UTIL { diff --git a/YuppleMayham/src/utility/command.cpp b/YuppleMayham/src/utility/command.cpp index 7f25c4f..48d2290 100644 --- a/YuppleMayham/src/utility/command.cpp +++ b/YuppleMayham/src/utility/command.cpp @@ -1,5 +1,5 @@ -#include "../../utility/command.h" -#include "../../gameplay/gameactor.h" +#include "utility/command.h" +#include "gameplay/gameactor.h" //void LambdaCommand::execute(GameActor& actor) { func(actor); } diff --git a/YuppleMayham/src/utility/debugdraw.cpp b/YuppleMayham/src/utility/debugdraw.cpp index 356c6fd..6b50827 100644 --- a/YuppleMayham/src/utility/debugdraw.cpp +++ b/YuppleMayham/src/utility/debugdraw.cpp @@ -1,4 +1,4 @@ -#include "../../utility/debugdraw.h" +#include "utility/debugdraw.h" Circle::Circle(const glm::vec3& position, float radius) { diff --git a/YuppleMayham/src/utility/ftfont.cpp b/YuppleMayham/src/utility/ftfont.cpp index ab9247f..7947982 100644 --- a/YuppleMayham/src/utility/ftfont.cpp +++ b/YuppleMayham/src/utility/ftfont.cpp @@ -1,4 +1,4 @@ -#include "../../utility/ftfont.h" +#include "utility/ftfont.h" #include #include diff --git a/YuppleMayham/src/utility/resourcemanager.cpp b/YuppleMayham/src/utility/resourcemanager.cpp index 0dc7434..6596b06 100644 --- a/YuppleMayham/src/utility/resourcemanager.cpp +++ b/YuppleMayham/src/utility/resourcemanager.cpp @@ -1,11 +1,11 @@ -#include "../../utility/resourcemanager.h" -#include "../../utility/component.h" -#include "../../graphics/sprite.h" -#include "../../graphics/tile.h" -#include "../../utility/script.h" -#include "../../graphics/tiletype.h" -#include "../../graphics/shader.h" -#include "../../gameplay/weapons/weapons.h" +#include "utility/resourcemanager.h" +#include "utility/component.h" +#include "graphics/sprite.h" +#include "graphics/tile.h" +#include "utility/script.h" +#include "graphics/tiletype.h" +#include "graphics/shader.h" +#include "gameplay/weapons/weapons.h" std::shared_ptr ResourceManager::loadSpriteAnimated(const std::string& path, float frameSize) { diff --git a/YuppleMayham/src/utility/script.cpp b/YuppleMayham/src/utility/script.cpp index fbfc353..bec2d4d 100644 --- a/YuppleMayham/src/utility/script.cpp +++ b/YuppleMayham/src/utility/script.cpp @@ -1,8 +1,8 @@ -#include "../../utility/script.h" -#include "../../gameplay/gameactor.h" -#include "../../gameplay/physics.h" -#include "../../gameplay/ai.h" -#include "../../utility/raycaster.h" +#include "utility/script.h" +#include "gameplay/gameactor.h" +#include "gameplay/physics.h" +#include "gameplay/ai.h" +#include "utility/raycaster.h" void Script::registerUserTypes() { diff --git a/YuppleMayham/src/utility/xmlloader.cpp b/YuppleMayham/src/utility/xmlloader.cpp index 9a23e0b..eb058f3 100644 --- a/YuppleMayham/src/utility/xmlloader.cpp +++ b/YuppleMayham/src/utility/xmlloader.cpp @@ -1,5 +1,5 @@ -#include "../../utility/xmlloader.h" -#include "../../graphics/tiletype.h" +#include "utility/xmlloader.h" +#include "graphics/tiletype.h" #include #include diff --git a/YuppleMayham/utility/command.h b/YuppleMayham/utility/command.h index bfbbb38..6e3e0e1 100644 --- a/YuppleMayham/utility/command.h +++ b/YuppleMayham/utility/command.h @@ -3,7 +3,7 @@ #include -#include "../gameplay/mousestate.h" +#include "utility/mousestate.h" class GameActor; diff --git a/YuppleMayham/utility/component.h b/YuppleMayham/utility/component.h index bb07acd..24cddaf 100644 --- a/YuppleMayham/utility/component.h +++ b/YuppleMayham/utility/component.h @@ -1,10 +1,10 @@ #ifndef _H_COMPONENT_H #define _H_COMPONENT_H -#include "../graphics/mesh.h" -#include "../graphics/sprite.h" -#include "../graphics/shader.h" -#include "../gameplay/ai.h" +#include "graphics/mesh.h" +#include "graphics/sprite.h" +#include "graphics/shader.h" +#include "gameplay/ai.h" #include "events.h" #include diff --git a/YuppleMayham/utility/events.h b/YuppleMayham/utility/events.h index e79627e..d36431a 100644 --- a/YuppleMayham/utility/events.h +++ b/YuppleMayham/utility/events.h @@ -6,7 +6,7 @@ #include #include -#include "direction.h" +#include "utility/direction.h" class Bullet; struct PhysicsComponent; diff --git a/YuppleMayham/gameplay/mousestate.h b/YuppleMayham/utility/mousestate.h similarity index 100% rename from YuppleMayham/gameplay/mousestate.h rename to YuppleMayham/utility/mousestate.h diff --git a/YuppleMayham/utility/raycaster.h b/YuppleMayham/utility/raycaster.h index 5d5baf8..3f4b246 100644 --- a/YuppleMayham/utility/raycaster.h +++ b/YuppleMayham/utility/raycaster.h @@ -5,7 +5,7 @@ #include #include -#include "debugdraw.h" +#include "utility/debugdraw.h" class Raycaster { public: diff --git a/YuppleMayham/utility/resourcemanager.h b/YuppleMayham/utility/resourcemanager.h index 8ccc304..9d21e52 100644 --- a/YuppleMayham/utility/resourcemanager.h +++ b/YuppleMayham/utility/resourcemanager.h @@ -5,7 +5,7 @@ #include #include -#include "../utility/xmlloader.h" +#include "utility/xmlloader.h" #include class Sprite;