Skip to content

Commit f39cdc4

Browse files
committed
Work
1 parent bd92050 commit f39cdc4

26 files changed

+1195
-40
lines changed
Loading

AimGL/resources/Models/shooting-board/shooting-board.obj

Lines changed: 432 additions & 0 deletions
Large diffs are not rendered by default.
Loading

AimGL/resources/Textures/arrow-up.png

11 KB
Loading
142 KB
Loading
Loading
129 KB
Loading

AimGL/src/CMakeLists_Sources.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@ set(PROJECT_SOURCES
2727
Player/Player.cpp
2828
World/Camera.cpp
2929
World/InfiniteGridFloor.cpp
30+
World/Scene/Nodes/Node.cpp
3031
World/Scene/GameObjects/Rifle.cpp
3132
World/Scene/GameObjects/Target.cpp
33+
World/Scene/GameObjects/TargetManager.cpp
3234
World/Scene/GameObjects/ButtonStand.cpp
35+
World/Scene/GameObjects/ShootingRange.cpp
36+
World/Scene/GameObjects/SidewayMovingTargetsRange.cpp
3337
World/Scene/GameObjects/LongCrate.cpp
3438
World/Physics/Drawable/AABB.cpp
3539
World/Physics/Drawable/Ray.cpp
@@ -40,5 +44,6 @@ set(PROJECT_SOURCES
4044
World/Physics/RectangleCollider.cpp
4145
World/Physics/SphereCollider.cpp
4246
World/Physics/Collisions.cpp
47+
Utils/Transform.cpp
4348
Utils/Mouse.cpp
4449
)

AimGL/src/Renderer/Graphics/3D/Sprite3D.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,5 @@ class Sprite3D
114114
glm::vec2 mScale;
115115
glm::vec2 mDimensionsNormalized;
116116
Rotation3D mRotation;
117-
float mOpacity;
117+
float mOpacity{1};
118118
};

AimGL/src/Renderer/Graphics/3D/Utils/Rotation3D.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Rotation3D& Rotation3D::operator*=(const Rotation3D& rhs)
8787
return *this;
8888
}
8989

90-
Rotation3D::operator glm::vec<3, float>()
90+
Rotation3D::operator glm::vec<3, float>() const
9191
{
9292
return mRotation;
9393
}

AimGL/src/Renderer/Graphics/3D/Utils/Rotation3D.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class Rotation3D
2020
Rotation3D& operator-=(const Rotation3D&);
2121
Rotation3D& operator*=(const Rotation3D&);
2222
friend Rotation3D operator*(const Rotation3D& lhs, float rhs);
23-
explicit operator glm::vec3();
23+
explicit operator glm::vec3() const;
2424

2525
/**
2626
* \brief Angles of Euler rotation.

AimGL/src/States/CustomStates/GameState.cpp

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,47 +12,30 @@ GameState::GameState(StateStack& stack, WindowToRender& window)
1212
, mWindow(window)
1313
, mPlayer(window, mColliderRegister)
1414
, mRenderer(mWindow)
15-
, mLogoTexture("resources/Textures/logo_background.png")
16-
, mLogo(mLogoTexture)
1715
, mGameBackground(glm::vec2(1280, 720.f), glm::vec4(0.85f, 0.85f, 0.85f, 1.f))
1816
, mPhaseInLogoColor({window.getSize().x, window.getSize().y}, {0.067f, 0.11f, 0.18f, 1.1f})
19-
, mTree("resources/Models/tree/tree.obj",
20-
{{"resources/Models/tree/tree_combined.png", Texture::Type::Diffuse}})
17+
, mShootingRange(mColliderRegister, {-2, 0, 5.5})
18+
, mSidewayMovingTargetsRange(mColliderRegister, {3, 0, 5.5})
19+
, mWelcomeScreenTexture("resources/Textures/welcome-screen.png")
20+
, mWelcomeScreen(mWelcomeScreenTexture)
2121
{
2222
Mouse::lockMouseAtCenter(mWindow);
23-
mTree.setScale(0.2f);
24-
mTree.setPosition({4, 0, 4}, Model::Origin::CenterBottom);
25-
mLogo.setHeight(2.f);
26-
mLogo.setPosition(glm::vec3(4, 0, 4), Sprite3D::Origin::LeftBottom);
27-
mLogo.setRotation({225.f, 0.f, 0});
28-
mLogo.setOpacity(1);
23+
mWelcomeScreen.setScale(2);
24+
mWelcomeScreen.setPosition({0, 1, -2}, Sprite3D::Origin::Center);
2925
mGameBackground.setPosition({0, 0});
3026
mPhaseInLogoColor.setPosition({0, 0});
3127
mPhaseInClock.restart();
32-
33-
std::vector<glm::vec3> samplePreviewTargetsPositons = {
34-
{2, 2, 2}, {2, 1, 2}, {2, 3, 2}, {2.5, 2, 2.6}, {3, 3, 3},
35-
{3, 2, 1}, {1, 2, 3}, {0, 3, 2}, {0, 1, 1}, {0, 2, 4}};
36-
for (auto& position: samplePreviewTargetsPositons)
37-
{
38-
auto test = std::make_unique<Target>(mColliderRegister, position);
39-
mPreviewTargets.push_back(std::move(test));
40-
}
4128
}
4229

4330
void GameState::draw(sf::Window& target) const
4431
{
4532
MTR_SCOPE("GameState", "GameState::draw");
4633
mGameBackground.draw(mRenderer);
4734
mInfiniteGridFloor.draw(target, mPlayer.camera());
48-
mTree.draw(mRenderer, mPlayer.camera());
49-
mLogo.draw(mRenderer, mPlayer.camera());
35+
mWelcomeScreen.draw(mRenderer, mPlayer.camera());
5036
mPhaseInLogoColor.draw(mRenderer);
51-
52-
for (auto& previewTarget: mPreviewTargets)
53-
{
54-
previewTarget->draw(mRenderer, mPlayer.camera());
55-
}
37+
mShootingRange.draw(mRenderer, mPlayer.camera());
38+
mSidewayMovingTargetsRange.draw(mRenderer, mPlayer.camera());
5639
mPlayer.draw(mRenderer);
5740
}
5841

@@ -67,11 +50,9 @@ bool GameState::fixedUpdate(const float& deltaTime)
6750
bool GameState::update(const float& deltaTime)
6851
{
6952
MTR_SCOPE("GameState", "GameState::update");
70-
for (auto& previewTarget: mPreviewTargets)
71-
{
72-
previewTarget->update(deltaTime);
73-
}
7453
mPlayer.update(deltaTime);
54+
mShootingRange.update(deltaTime);
55+
mSidewayMovingTargetsRange.update(deltaTime);
7556

7657
if (mPhaseInLogoColor.opacity() > 0)
7758
{
@@ -84,6 +65,8 @@ bool GameState::handleEvent(const sf::Event& event)
8465
{
8566
MTR_SCOPE("GameState", "GameState::handleEvent");
8667
mPlayer.handleEvent(event);
68+
mShootingRange.handleEvent(event);
69+
mSidewayMovingTargetsRange.handleEvent(event);
8770

8871
if (event.type == sf::Event::KeyPressed)
8972
{

AimGL/src/States/CustomStates/GameState.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
#include "World/InfiniteGridFloor.h"
99

1010
#include <Player/Player.h>
11-
#include <Renderer/Graphics/3D/Model.h>
1211
#include <World/Physics/ColliderRegister.h>
13-
#include <World/Scene/GameObjects/Target.h>
12+
#include <World/Scene/GameObjects/ShootingRange.h>
13+
#include <World/Scene/GameObjects/SidewayMovingTargetsRange.h>
1414

1515
class StateStack;
1616

@@ -83,13 +83,13 @@ class GameState : public State
8383
ColliderRegister mColliderRegister;
8484
Player mPlayer;
8585
Renderer mRenderer;
86-
Texture mLogoTexture;
87-
Sprite3D mLogo;
8886
Rectangle2D mGameBackground;
8987
sf::Clock mPhaseInClock;
9088
Rectangle2D mPhaseInLogoColor;
9189
InfiniteGridFloor mInfiniteGridFloor;
92-
Model mTree;
93-
std::vector<std::unique_ptr<Target>> mPreviewTargets;
90+
ShootingRange mShootingRange;
91+
SidewayMovingTargetsRange mSidewayMovingTargetsRange;
92+
Texture mWelcomeScreenTexture;
93+
Sprite3D mWelcomeScreen;
9494
bool mDrawImgui{true};
9595
};

AimGL/src/States/CustomStates/LogoState.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,5 @@ bool LogoState::handleEvent(const sf::Event& event)
6767
bool LogoState::updateImGui(const float& deltaTime)
6868
{
6969
MTR_SCOPE("LogoState", "LogoState::updateImGui");
70-
ImGui::ShowDemoWindow();
7170
return true;
7271
}

AimGL/src/Utils/Transform.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#include "Transform.h"
2+
#include "pch.h"
3+
4+
#include <Renderer/Graphics/3D/Utils/Rotation3D.h>
5+
6+
glm::mat4 Transform::matrix() const
7+
{
8+
return mTransform;
9+
}
10+
11+
Transform& Transform::translate(const glm::vec3& vec)
12+
{
13+
glm::translate(mTransform, vec);
14+
return *this;
15+
}
16+
17+
Transform& Transform::rotate(const Rotation3D& rotation)
18+
{
19+
mTransform = rotation.rotate(mTransform);
20+
return *this;
21+
}
22+
23+
Transform& Transform::operator*=(const Transform& rhs)
24+
{
25+
mTransform *= rhs.mTransform;
26+
return *this;
27+
}

AimGL/src/Utils/Transform.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
#pragma once
3+
4+
class Rotation3D;
5+
6+
class Transform
7+
{
8+
public:
9+
[[nodiscard]] glm::mat4 matrix() const;
10+
Transform& translate(const glm::vec3& vec);
11+
Transform& rotate(const Rotation3D& rotation);
12+
Transform& operator*=(const Transform& rhs);
13+
14+
15+
private:
16+
glm::mat4 mTransform{1};
17+
};

AimGL/src/World/Scene/GameObjects/Rifle.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ void Rifle::draw(const Renderer& target) const
2929
void Rifle::update(const float& deltaTime)
3030
{
3131
updateAttachToCamera(deltaTime);
32+
if (mLatelyShotRay.has_value() and mShotRayClock.getElapsedTime() > mShotRayDeleteTime)
33+
{
34+
mLatelyShotRay.reset();
35+
}
3236
}
3337

3438
void Rifle::updateAttachToCamera(const float& deltaTime)
@@ -67,5 +71,6 @@ void Rifle::handleEvent(const sf::Event& event)
6771
mGunShotSound.play();
6872
mLatelyShotRay.emplace(mColliderRegister, mCamera.cameraPosition(), mCamera.direction());
6973
mLatelyShotRay.value().colliderTag(ColliderTag::GunShot);
74+
mShotRayClock.restart();
7075
}
7176
}

AimGL/src/World/Scene/GameObjects/Rifle.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,6 @@ class Rifle
5757
std::optional<Ray> mLatelyShotRay;
5858
std::vector<std::function<void(Ray)>> mRaySubscribers;
5959
ColliderRegister& mColliderRegister;
60+
sf::Clock mShotRayClock;
61+
sf::Time mShotRayDeleteTime = sf::seconds(0.5);
6062
};
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include "ShootingRange.h"
2+
#include "pch.h"
3+
4+
ShootingRange::ShootingRange(ColliderRegister& colliderRegister, const glm::vec3& position)
5+
: mButtonStand(colliderRegister, position)
6+
, mShootingRange("resources/Models/shooting-board/shooting-board.obj",
7+
{{"resources/Models/shooting-board/diffuse.png", Texture::Type::Diffuse},
8+
{"resources/Models/shooting-board/specular.png", Texture::Type::Specular}})
9+
, mPosition(position)
10+
, mAABB(colliderRegister, {0, 0, 0}, mShootingRange.dimensions())
11+
, mSmallerCrate(colliderRegister, position)
12+
, mMediumCrate(colliderRegister, position)
13+
, mLargeCrate(colliderRegister, position)
14+
, mDirectionArrowTexture("resources/Textures/arrow-up.png")
15+
, mDirectionArrowPointingUpwardCrates(mDirectionArrowTexture)
16+
, mTrainingLogoTexture("resources/Textures/static-muscle-training.png")
17+
, mTrainingLogo(mTrainingLogoTexture)
18+
, mTargetManager(colliderRegister, {0, 0, -2}, sf::seconds(0.75), sf::seconds(0.75))
19+
{
20+
mLargeCrate.setScale(1.5);
21+
mMediumCrate.setScale(1);
22+
mSmallerCrate.setScale(0.5);
23+
mAABB.colliderTag(ColliderTag::Solid);
24+
setPosition(mPosition);
25+
mSmallerCrate.setRotation({90, 0, 0});
26+
mMediumCrate.setRotation({90, 0, 0});
27+
mLargeCrate.setRotation({90, 0, 0});
28+
mDirectionArrowPointingUpwardCrates.setRotation({-30, 25, 0});
29+
mDirectionArrowPointingUpwardCrates.setScale(0.6);
30+
mTrainingLogo.setRotation({180, 0, 0});
31+
mTrainingLogo.setScale(3.f);
32+
auto halfOfShootingRangeDimensions = mShootingRange.dimensions() / 2.f;
33+
mTargetManager.setSpawnRange(
34+
{-halfOfShootingRangeDimensions.x, -halfOfShootingRangeDimensions.y, 0},
35+
{halfOfShootingRangeDimensions.x, halfOfShootingRangeDimensions.y, 0});
36+
mButtonStand.onClick(
37+
[this]()
38+
{
39+
toggleShootingRange();
40+
});
41+
}
42+
43+
void ShootingRange::draw(const Renderer& target, const Camera& camera) const
44+
{
45+
mShootingRange.draw(target, camera);
46+
mButtonStand.draw(target, camera);
47+
mAABB.draw(target, camera);
48+
mLargeCrate.draw(target, camera);
49+
mMediumCrate.draw(target, camera);
50+
mSmallerCrate.draw(target, camera);
51+
mDirectionArrowPointingUpwardCrates.draw(target, camera);
52+
mTargetManager.draw(target, camera);
53+
mTrainingLogo.draw(target, camera);
54+
}
55+
56+
void ShootingRange::update(const float& deltaTime)
57+
{
58+
mButtonStand.update(deltaTime);
59+
mTargetManager.update(deltaTime);
60+
}
61+
62+
void ShootingRange::handleEvent(const sf::Event& event)
63+
{
64+
mButtonStand.handleEvent(event);
65+
}
66+
67+
void ShootingRange::showDebugImGui(std::string name)
68+
{
69+
name = "[Model] " + name;
70+
ImGui::Begin(name.c_str());
71+
ImGui::SliderFloat3("Position", &mPosition[0], -50, 50.f);
72+
ImGui::End();
73+
setPosition(mPosition);
74+
}
75+
76+
void ShootingRange::setPosition(const glm::vec3& newPosition)
77+
{
78+
mShootingRange.setPosition(newPosition + glm::vec3{0, 0, BOXES_DISTANCE});
79+
mTargetManager.setPosition(
80+
newPosition + glm::vec3{0, mShootingRange.dimensions().y / 2.f, BOXES_DISTANCE - 0.25f});
81+
mButtonStand.setPosition(newPosition + glm::vec3{-1.15, 1.5, 0.45});
82+
mAABB.setPosition(mShootingRange.position() - mShootingRange.dimensions() / 2.f);
83+
mLargeCrate.setPosition(newPosition + glm::vec3{0, 0, 0});
84+
mMediumCrate.setPosition(newPosition + glm::vec3{0, 0, -1.25});
85+
mSmallerCrate.setPosition(newPosition + glm::vec3{0, 0, -2});
86+
mDirectionArrowPointingUpwardCrates.setPosition(newPosition + glm::vec3{1, 0, -2.5});
87+
mTrainingLogo.setPosition(newPosition + glm::vec3{-0.5, 5, BOXES_DISTANCE});
88+
}
89+
90+
void ShootingRange::toggleShootingRange()
91+
{
92+
if (mIsShootingRangeActive)
93+
{
94+
mTargetManager.stop();
95+
mIsShootingRangeActive = false;
96+
}
97+
else
98+
{
99+
mTargetManager.start();
100+
mIsShootingRangeActive = true;
101+
}
102+
}

0 commit comments

Comments
 (0)