Skip to content

Commit 3cca1c1

Browse files
authored
Merge pull request #18 from KTStephano/v0.8
V0.8 -> Master
2 parents 9344cc5 + 2f5e6b6 commit 3cca1c1

File tree

103 files changed

+6608
-3737
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+6608
-3737
lines changed

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,6 @@
77
*.bin filter=lfs diff=lfs merge=lfs -text
88
*.gltf filter=lfs diff=lfs merge=lfs -text
99
*.jpeg filter=lfs diff=lfs merge=lfs -text
10+
resources/textures/*.jpg filter=lfs diff=lfs merge=lfs -text
11+
resources/textures/*.png filter=lfs diff=lfs merge=lfs -text
12+
resources/textures/*.jpeg filter=lfs diff=lfs merge=lfs -text

Examples/CMakeLists.txt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
include_directories(${CMAKE_CURRENT_LIST_DIR}/Common)
2+
file(GLOB COMMON_SOURCES ${CMAKE_CURRENT_LIST_DIR}/Common/*.cpp)
3+
14
add_subdirectory(ExampleEnv00)
25
add_subdirectory(ExampleEnv01)
36
add_subdirectory(ExampleEnv02)
4-
add_subdirectory(ExampleEnv03)
5-
add_subdirectory(ExampleEnv04)
7+
add_subdirectory(ExampleEnv03)

Examples/Common/CameraController.h

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
#pragma once
2+
3+
#include "StratusCommon.h"
4+
#include "glm/glm.hpp"
5+
#include "StratusWindow.h"
6+
#include "StratusRendererFrontend.h"
7+
#include "StratusLog.h"
8+
#include "StratusCamera.h"
9+
#include "StratusLight.h"
10+
11+
struct CameraController : public stratus::InputHandler {
12+
CameraController() {
13+
_camera = stratus::CameraPtr(new stratus::Camera());
14+
stratus::RendererFrontend::Instance()->SetCamera(_camera);
15+
16+
_cameraLight = stratus::LightPtr(new stratus::PointLight(/* staticLight = */ false));
17+
_cameraLight->setCastsShadows(false);
18+
_cameraLight->setIntensity(600.0f);
19+
20+
if (_cameraLightEnabled) {
21+
stratus::RendererFrontend::Instance()->AddLight(_cameraLight);
22+
}
23+
}
24+
25+
// This class is deleted when the Window is deleted so the Renderer has likely already
26+
// been taken offline. The check is for if the camera controller is removed while the engine
27+
// is still running.
28+
virtual ~CameraController() {
29+
INSTANCE(RendererFrontend)->SetCamera(nullptr);
30+
31+
if (_cameraLightEnabled) {
32+
INSTANCE(RendererFrontend)->RemoveLight(_cameraLight);
33+
}
34+
}
35+
36+
void HandleInput(const stratus::MouseState& mouse, const std::vector<SDL_Event>& input, const double deltaSeconds) {
37+
const float camSpeed = 100.0f;
38+
39+
// Handle WASD movement
40+
for (auto e : input) {
41+
switch (e.type) {
42+
case SDL_MOUSEMOTION:
43+
_camera->modifyAngle(stratus::Degrees(0.0f), stratus::Degrees(-e.motion.xrel), stratus::Degrees(0.0f));
44+
//STRATUS_LOG << camera.getRotation() << std::endl;
45+
break;
46+
case SDL_KEYDOWN:
47+
case SDL_KEYUP: {
48+
bool released = e.type == SDL_KEYUP;
49+
SDL_Scancode key = e.key.keysym.scancode;
50+
switch (key) {
51+
case SDL_SCANCODE_SPACE:
52+
if (!released) {
53+
_camSpeedDivide = 1.0f;
54+
}
55+
else {
56+
_camSpeedDivide = 0.25f;
57+
}
58+
break;
59+
case SDL_SCANCODE_W:
60+
case SDL_SCANCODE_S:
61+
if (!released) {
62+
_cameraSpeed.x = key == SDL_SCANCODE_W ? camSpeed : -camSpeed;
63+
} else {
64+
_cameraSpeed.x = 0.0f;
65+
}
66+
break;
67+
case SDL_SCANCODE_A:
68+
case SDL_SCANCODE_D:
69+
if (!released) {
70+
_cameraSpeed.y = key == SDL_SCANCODE_D ? camSpeed : -camSpeed;
71+
} else {
72+
_cameraSpeed.y = 0.0f;
73+
}
74+
break;
75+
// Adds or removes the light following the camera
76+
case SDL_SCANCODE_F:
77+
if (released) {
78+
_cameraLightEnabled = !_cameraLightEnabled;
79+
80+
if (_cameraLightEnabled) {
81+
stratus::RendererFrontend::Instance()->AddLight(_cameraLight);
82+
}
83+
else {
84+
stratus::RendererFrontend::Instance()->RemoveLight(_cameraLight);
85+
}
86+
}
87+
88+
break;
89+
}
90+
}
91+
}
92+
}
93+
94+
// Check mouse state for move up/down
95+
uint32_t buttonState = mouse.mask;
96+
_cameraSpeed.z = 0.0f;
97+
if ((buttonState & SDL_BUTTON_LMASK) != 0) { // left mouse button
98+
_cameraSpeed.z = -camSpeed;
99+
}
100+
else if ((buttonState & SDL_BUTTON_RMASK) != 0) { // right mouse button
101+
_cameraSpeed.z = camSpeed;
102+
}
103+
104+
// Final camera speed update
105+
glm::vec3 tmpCamSpeed = _cameraSpeed * _camSpeedDivide;
106+
_camera->setSpeed(tmpCamSpeed.y, tmpCamSpeed.z, tmpCamSpeed.x);
107+
108+
_cameraLight->SetPosition(_camera->getPosition());
109+
}
110+
111+
private:
112+
stratus::CameraPtr _camera;
113+
stratus::LightPtr _cameraLight;
114+
bool _cameraLightEnabled = true;
115+
glm::vec3 _cameraSpeed = glm::vec3(0.0f);
116+
float _camSpeedDivide = 0.25f; // For slowing camera down
117+
};

Examples/Common/LightComponents.h

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#pragma once
2+
3+
#include "StratusCommon.h"
4+
#include "glm/glm.hpp"
5+
#include "StratusWindow.h"
6+
#include "StratusRendererFrontend.h"
7+
#include "StratusLog.h"
8+
#include "StratusCamera.h"
9+
#include "StratusLight.h"
10+
#include "StratusEngine.h"
11+
#include "StratusResourceManager.h"
12+
#include "StratusMaterial.h"
13+
#include "StratusUtils.h"
14+
#include "StratusEntityManager.h"
15+
#include "StratusEntityCommon.h"
16+
#include "StratusEntity.h"
17+
18+
ENTITY_COMPONENT_STRUCT(LightComponent)
19+
stratus::LightPtr light;
20+
LightComponent(stratus::LightPtr light)
21+
: light(light) {}
22+
23+
LightComponent(const LightComponent& other) {
24+
light = other.light->Copy();
25+
}
26+
};
27+
28+
ENTITY_COMPONENT_STRUCT(LightCubeComponent)
29+
stratus::EntityPtr cube;
30+
LightCubeComponent(stratus::EntityPtr cube)
31+
: cube(cube) {}
32+
33+
LightCubeComponent(const LightCubeComponent& other) {
34+
cube = other.cube->Copy();
35+
}
36+
};
37+
38+
ENTITY_COMPONENT_STRUCT(RandomLightMoverComponent)
39+
glm::vec3 position = glm::vec3(0.0f);
40+
glm::vec3 direction = glm::vec3(0.0f);
41+
double elapsedSeconds = 0.0;
42+
43+
RandomLightMoverComponent() {}
44+
RandomLightMoverComponent(const RandomLightMoverComponent&) = default;
45+
};
46+

0 commit comments

Comments
 (0)