diff --git a/DevAssets/ConvertTexture.py b/DevAssets/ConvertTexture.py
new file mode 100644
index 0000000..cc45fbc
--- /dev/null
+++ b/DevAssets/ConvertTexture.py
@@ -0,0 +1,30 @@
+import os
+from PIL import Image
+
+def convert_to_32bit(file_path):
+ try:
+ # Open the image
+ image = Image.open(file_path)
+
+ # Convert to 32-bit color depth
+ if image.mode != 'RGBA':
+ image = image.convert('RGBA')
+
+ # Save the converted image
+ converted_file_path = file_path.replace('.png', '_32bit.png')
+ image.save(converted_file_path)
+
+ print(f"Conversion complete for '{file_path}'. Saved as '{converted_file_path}'")
+ except Exception as e:
+ print(f"Error: {e}")
+
+if __name__ == "__main__":
+ script_directory = os.path.dirname(os.path.realpath(__file__))
+ png_files = [f for f in os.listdir(script_directory) if f.lower().endswith('.png')]
+
+ if not png_files:
+ print("No .png files found in the script directory.")
+ else:
+ for file_name in png_files:
+ file_path = os.path.join(script_directory, file_name)
+ convert_to_32bit(file_path)
diff --git a/DevAssets/MapCount.psd b/DevAssets/MapCount.psd
new file mode 100644
index 0000000..4fc932e
Binary files /dev/null and b/DevAssets/MapCount.psd differ
diff --git a/Engine/Engine.vcxproj b/Engine/Engine.vcxproj
index 0674a54..458bc61 100644
--- a/Engine/Engine.vcxproj
+++ b/Engine/Engine.vcxproj
@@ -31,6 +31,7 @@
+
@@ -95,9 +96,18 @@
- ..\Libraries\SDLTtf\SDL2_ttf-2.20.2\include;..\Libraries\SDLImage\SDL2_image-2.6.3\include;..\Libraries\SDLMixer\SDL2_mixer-2.6.3\include;..\Libraries\SDLMain\SDL2-2.26.3\include;$(IncludePath)
+ C:\Users\Bram\Desktop\Programming 2\Exam\dae16-VerhulstBram\Libraries\DearImGui;..\Libraries\SDLTtf\SDL2_ttf-2.20.2\include;..\Libraries\SDLImage\SDL2_image-2.6.3\include;..\Libraries\SDLMixer\SDL2_mixer-2.6.3\include;..\Libraries\SDLMain\SDL2-2.26.3\include;$(IncludePath)
..\Libraries\SDLTtf\SDL2_ttf-2.20.2\lib\x64;..\Libraries\SDL2_mixer-2.6.3\lib\x64;..\Libraries\SDLImage\SDL2_image-2.6.3\lib\x64;..\Libraries\SDLMain\SDL2-2.26.3\lib\x64;$(LibraryPath)
+
+ C:\Users\Bram\Desktop\Programming 2\Exam\dae16-VerhulstBram\Libraries\DearImGui;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+
+
+ C:\Users\Bram\Desktop\Programming 2\Exam\dae16-VerhulstBram\Libraries\DearImGui;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+
+
+ C:\Users\Bram\Desktop\Programming 2\Exam\dae16-VerhulstBram\Libraries\DearImGui;$(VC_IncludePath);$(WindowsSDK_IncludePath);
+
Level3
diff --git a/Engine/Engine.vcxproj.filters b/Engine/Engine.vcxproj.filters
index 0a0053e..e42a904 100644
--- a/Engine/Engine.vcxproj.filters
+++ b/Engine/Engine.vcxproj.filters
@@ -42,6 +42,144 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
@@ -77,5 +215,110 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file
diff --git a/Engine/colors.h b/Engine/colors.h
new file mode 100644
index 0000000..73e7630
--- /dev/null
+++ b/Engine/colors.h
@@ -0,0 +1,16 @@
+
+#include "structs.h"
+
+namespace Colors
+{
+ const Color4f WHITE{ 1.0f, 1.0f, 1.0f, 1.0f };
+ const Color4f BLACK{ 0.0f, 0.0f, 0.0f, 1.0f };
+
+ const Color4f RED{ 1.0f, 0.0f, 0.0f, 1.0f };
+ const Color4f GREEN{ 0.0f, 1.0f, 0.0f, 1.0f };
+ const Color4f BLUE{ 0.0f, 0.0f, 1.0f, 1.0f };
+
+ const Color4f YELLOW{ 1.0f, 1.0f, 0.0f, 1.0f };
+ const Color4f MAGENTA{ 1.0f, 0.0f, 1.0f, 1.0f };
+ const Color4f CYAN{ 0.0f, 1.0f, 1.0f, 1.0f };
+}
diff --git a/Engine/structs.cpp b/Engine/structs.cpp
index a910871..bac8210 100644
--- a/Engine/structs.cpp
+++ b/Engine/structs.cpp
@@ -20,6 +20,21 @@ Point2f::Point2f()
Point2f::Point2f(float x, float y)
: x { x }, y { y } {
}
+Point2f Point2f::operator+(const Point2f& other) const {
+ return Point2f { x + other.x, y + other.y };
+}
+Point2f Point2f::operator*(float other) const {
+ return Point2f { x * other, y * other };
+}
+Point2f Point2f::operator*(const Point2f& other) const {
+ return Point2f { x * other.x, y * other.y };
+}
+Point2f Point2f::operator*(int other) const {
+ return Point2f { x * float(other), y * float(other) };
+}
+Point2f Point2f::operator/(float other) const {
+ return Point2f { x / other, y / other };
+}
// Point2f::Point2f(int x, int y)
// : x { (float)x }, y { (float)y } {
diff --git a/Engine/structs.h b/Engine/structs.h
index b885c0b..0d58e25 100644
--- a/Engine/structs.h
+++ b/Engine/structs.h
@@ -18,6 +18,13 @@ struct Point2f
explicit Point2f( float x, float y );
//Point2f(int x, int y); //Stupid fix for it giving an error
+ //operator
+ Point2f operator+( const Point2f& other ) const;
+ Point2f operator*( float other ) const;
+ Point2f operator*( const Point2f& other ) const;
+ Point2f operator*( int other ) const;
+ Point2f operator/( float other ) const;
+
float x;
float y;
};
diff --git a/Engine/utils.cpp b/Engine/utils.cpp
index 0673309..6472313 100644
--- a/Engine/utils.cpp
+++ b/Engine/utils.cpp
@@ -5,13 +5,17 @@
#include
#include "utils.h"
-
#pragma region OpenGLDrawFunctionality
void utils::SetColor( const Color4f& color )
{
glColor4f( color.r, color.g, color.b, color.a );
}
+void utils::ClearBackground( const Color4f& color ) {
+ glClearColor(color.r, color.g, color.b, color.a);
+ glClear(GL_COLOR_BUFFER_BIT);
+}
+
void utils::DrawPoint( float x, float y, float pointSize )
{
glPointSize( pointSize );
@@ -684,3 +688,7 @@ bool utils::IntersectRectLine(const Rectf& r, const Point2f& p1, const Point2f&
}
#pragma endregion CollisionFunctionality
+
+int utils::randRange(int min, int max) {
+ return min + rand() % (( max + 1 ) - min);
+}
diff --git a/Engine/utils.h b/Engine/utils.h
index 230aca0..55509fd 100644
--- a/Engine/utils.h
+++ b/Engine/utils.h
@@ -9,6 +9,8 @@ namespace utils
#pragma region OpenGLDrawFunctionality
void SetColor( const Color4f& color );
+
+ void ClearBackground( const Color4f& color );
void DrawPoint( float x, float y, float pointSize = 1.0f );
void DrawPoint( const Point2f& p, float pointSize = 1.0f );
@@ -81,6 +83,7 @@ namespace utils
bool IsPointOnLineSegment(const Point2f& p, const Point2f& a, const Point2f& b);
bool IntersectRectLine(const Rectf& r, const Point2f& p1, const Point2f& p2, float& intersectMin, float& intersectMax);
+ int randRange(int min, int max);
#pragma endregion CollisionFunctionality
}
\ No newline at end of file
diff --git a/Game/Camera.cpp b/Game/Camera.cpp
index b350b29..1a0b3d2 100644
--- a/Game/Camera.cpp
+++ b/Game/Camera.cpp
@@ -1,2 +1,21 @@
#include "pch.h"
#include "Camera.h"
+
+Camera::Camera() : m_Position { 0, 0 }, m_Scale { 1.0f } {
+}
+Camera::Camera(const Point2f& position, const float scale) : m_Position { position }, m_Scale { scale } {
+}
+
+void Camera::BeginRendering() const {
+ glPushMatrix();
+ glTranslatef(m_Position.x, m_Position.y, 0);
+ glScalef(m_Scale, m_Scale, 1);
+}
+
+void Camera::EndRendering() const {
+ glPopMatrix();
+}
+Point2f Camera::TransformMouse(const Point2f& mousePos) const {
+ const Point2f translatedPosition = mousePos + m_Position;
+ return translatedPosition;
+}
diff --git a/Game/Camera.h b/Game/Camera.h
index 7f10a0e..5b8d34b 100644
--- a/Game/Camera.h
+++ b/Game/Camera.h
@@ -3,8 +3,22 @@
class Camera
{
public:
+ Camera( );
+ Camera( const Point2f& position, float scale = 1);
+ void SetPosition( const Point2f& position ) { m_Position = position; }
+ void SetScale( const float scale ) { m_Scale = scale; }
+
+ const Point2f& GetPosition( ) const { return m_Position; }
+ float GetScale( ) const { return m_Scale; }
+
+ void BeginRendering() const;
+ void EndRendering() const;
+
+ Point2f TransformMouse (const Point2f& mousePos) const;
+
private:
-
-
+ Point2f m_Position;
+ float m_Scale;
+
};
diff --git a/Game/Game.cpp b/Game/Game.cpp
index 1584c47..bf0e866 100644
--- a/Game/Game.cpp
+++ b/Game/Game.cpp
@@ -1,10 +1,12 @@
#include "pch.h"
#include "Game.h"
+#include "colors.h"
#include "utils.h"
+#include "WorldLevel.h"
Game::Game(const Window& window)
- : BaseGame { window }
+ : BaseGame { window }, m_Camera(Camera()), m_WorldLevel(WorldLevel(&m_Camera))
{
Initialize();
}
@@ -14,34 +16,42 @@ Game::~Game() {
}
void Game::Initialize() {
- m_WorldLevel = WorldLevel();
+ m_Camera.SetPosition(Point2f{GetViewPort().width / 2, GetViewPort().height / 2});
}
void Game::Cleanup() {
}
void Game::Update(float elapsedSec) {
- const Uint8 *pStates = SDL_GetKeyboardState( nullptr );
- if ( pStates[SDL_SCANCODE_RIGHT] ) {
- m_CameraOffset.x += 100 * elapsedSec;
+ const Uint8* pStates = SDL_GetKeyboardState(nullptr);
+ // if (pStates[SDL_SCANCODE_RIGHT]) {
+ // m_CameraOffset.x += 200 * elapsedSec;
+ // }
+ // if (pStates[SDL_SCANCODE_LEFT]) {
+ // m_CameraOffset.x -= 200 * elapsedSec;
+ // }
+ // if (pStates[SDL_SCANCODE_UP]) {
+ // m_CameraOffset.y += 200 * elapsedSec;
+ // }
+ // if (pStates[SDL_SCANCODE_DOWN]) {
+ // m_CameraOffset.y -= 200 * elapsedSec;
+ // }
+
+ if(m_IsMouseDown) {
+ Point2f newCameraPos = m_MousePos + m_MouseOffset;
+ m_Camera.SetPosition(newCameraPos);
+ } else {
+ m_MouseOffset = m_Camera.GetPosition();
}
- if ( pStates[SDL_SCANCODE_LEFT] ) {
- m_CameraOffset.x -= 100 * elapsedSec;
- }
-
-
+
+
}
void Game::Draw() const {
- ClearBackground();
- glPushMatrix();
- {
- glTranslatef(m_CameraOffset.x , m_CameraOffset.y, 0);
- m_WorldLevel.Draw();
- utils::SetColor(Color4f{1.0f, 0.0f, 0.0f, 1.0f});
- utils::FillEllipse(0,0,20,20);
- }
- glPopMatrix();
+ utils::ClearBackground(Color4f(0.0f, 0.0f, 0.3f, 1.0f));
+ //m_Camera.BeginRendering();
+ m_WorldLevel.Draw();
+ //m_Camera.EndRendering();
}
void Game::ProcessKeyDownEvent(const SDL_KeyboardEvent& e) {
@@ -66,10 +76,15 @@ void Game::ProcessKeyUpEvent(const SDL_KeyboardEvent& e) {
}
void Game::ProcessMouseMotionEvent(const SDL_MouseMotionEvent& e) {
- //std::cout << "MOUSEMOTION event: " << e.x << ", " << e.y << std::endl;
+ m_MousePos = Point2f { float(e.x), float(e.y) };
+ m_WorldLevel.MouseMove(m_MousePos);
}
void Game::ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) {
+ m_IsMouseDown = true;
+ m_MouseOffset = Point2f(m_Camera.GetPosition() - m_MousePos);
+
+
//std::cout << "MOUSEBUTTONDOWN event: ";
//switch ( e.button )
//{
@@ -87,6 +102,7 @@ void Game::ProcessMouseDownEvent(const SDL_MouseButtonEvent& e) {
}
void Game::ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) {
+ m_IsMouseDown = false;
//std::cout << "MOUSEBUTTONUP event: ";
//switch ( e.button )
//{
@@ -101,8 +117,3 @@ void Game::ProcessMouseUpEvent(const SDL_MouseButtonEvent& e) {
// break;
//}
}
-
-void Game::ClearBackground() const {
- glClearColor(0.0f, 0.0f, 0.3f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT);
-}
diff --git a/Game/Game.h b/Game/Game.h
index 24109f3..4f8c095 100644
--- a/Game/Game.h
+++ b/Game/Game.h
@@ -2,6 +2,7 @@
#include
#include "BaseGame.h"
+#include "Camera.h"
#include "WorldLevel.h"
#include "WorldTile.h"
@@ -30,9 +31,13 @@ private:
// FUNCTIONS
void Initialize();
void Cleanup();
- void ClearBackground() const;
- Point2f m_CameraOffset{0, 0};
+ Camera m_Camera;
WorldLevel m_WorldLevel;
+
+ Point2f m_MousePos{};
+ Point2f m_MouseOffset{};
+ bool m_IsMouseDown{};
+
};
diff --git a/Game/Game.vcxproj b/Game/Game.vcxproj
index fce32a7..d31bc6f 100644
--- a/Game/Game.vcxproj
+++ b/Game/Game.vcxproj
@@ -149,10 +149,158 @@ xcopy "$(SolutionDir)Resources\*.*" "$(TargetDir)" /y /d /s
-
+
+ MultiThreadedDebugDll
+ EnableFastChecks
+ Disabled
+ true
+ NoListing
+ x64\Debug\
+ false
+ false
+ x64\Debug\
+ Default
+ true
+ Column
+ false
+ Prompt
+ false
+ Sync
+ false
+ false
+ false
+ NotSet
+ Precise
+ true
+ false
+ false
+ false
+ Default
+ false
+ false
+ Default
+ Default
+ false
+ x64\Debug\
+ x64\Debug\
+ false
+ Neither
+ false
+ x64\Debug\
+ Cdecl
+ x64\Debug\vc143.pdb
+ Create
+ pch.h
+ x64\Debug\Game.pch
+ false
+ false
+ false
+ true
+ false
+ false
+ x64\Debug\
+ true
+ true
+ false
+ false
+ Default
+ x64\Debug\Game.tlog\
+ false
+ true
+ false
+ true
+ true
+ Level3
+ x64\Debug\
+ EditAndContinue
+ false
+ false
+ false
+ InheritWarningLevel
+ true
+ false
+ _DEBUG;_CONSOLE;_UNICODE;UNICODE;
+ true
+ true
+
-
+
+
+
+ MultiThreadedDebugDll
+ EnableFastChecks
+ Disabled
+ true
+ NoListing
+ x64\Debug\
+ false
+ false
+ x64\Debug\
+ Default
+ true
+ Column
+ false
+ Prompt
+ false
+ Sync
+ false
+ false
+ false
+ NotSet
+ Precise
+ true
+ false
+ false
+ false
+ Default
+ false
+ false
+ Default
+ Default
+ false
+ x64\Debug\
+ x64\Debug\
+ false
+ Neither
+ false
+ x64\Debug\
+ Cdecl
+ x64\Debug\vc143.pdb
+ Create
+ pch.h
+ x64\Debug\Game.pch
+ false
+ false
+ false
+ true
+ false
+ false
+ x64\Debug\
+ true
+ true
+ false
+ false
+ Default
+ x64\Debug\Game.tlog\
+ false
+ true
+ false
+ true
+ true
+ Level3
+ x64\Debug\
+ EditAndContinue
+ false
+ false
+ false
+ InheritWarningLevel
+ true
+ false
+ _DEBUG;_CONSOLE;_UNICODE;UNICODE;
+ true
+ true
+
@@ -160,9 +308,14 @@ xcopy "$(SolutionDir)Resources\*.*" "$(TargetDir)" /y /d /s
+
+
+
+
+
diff --git a/Game/Game.vcxproj.filters b/Game/Game.vcxproj.filters
index 8287ec7..b721d5b 100644
--- a/Game/Game.vcxproj.filters
+++ b/Game/Game.vcxproj.filters
@@ -24,6 +24,93 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
@@ -32,5 +119,104 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file
diff --git a/Game/Level.cpp b/Game/Level.cpp
index fcc8b14..2b9f4da 100644
--- a/Game/Level.cpp
+++ b/Game/Level.cpp
@@ -1,6 +1,12 @@
#include "pch.h"
#include "Level.h"
-Level::Level() {
+
+#include
+Level::Level() : m_pCamera(nullptr) {
+ std::cout << "Cannot make level without a camera" << std::endl;
+}
+Level::Level(Camera* camera) {
+ m_pCamera = camera;
}
Level::~Level() {
}
@@ -8,3 +14,5 @@ void Level::Update(float elapsedSec) {
}
void Level::Draw() const {
}
+void Level::MouseMove(const Point2f& mousePos) {
+}
diff --git a/Game/Level.h b/Game/Level.h
index 0aa6f70..42e9615 100644
--- a/Game/Level.h
+++ b/Game/Level.h
@@ -1,16 +1,19 @@
#pragma once
+#include "Camera.h"
class Level
{
public:
Level();
- ~Level();
-
+ Level(Camera* camera);
+ virtual ~Level();
virtual void Update(float elapsedSec);
virtual void Draw() const;
+ virtual void MouseMove(const Point2f& mousePos);
private:
-
-
+
+protected:
+ Camera* m_pCamera;
};
diff --git a/Game/Player.cpp b/Game/Player.cpp
new file mode 100644
index 0000000..9708f2d
--- /dev/null
+++ b/Game/Player.cpp
@@ -0,0 +1,45 @@
+#include "pch.h"
+#include "Player.h"
+
+#include "colors.h"
+#include "utils.h"
+#include "WorldLevel.h"
+
+Player::Player(const Point2f& Position) : m_Position(Position), m_Size(Point2f{50, 20})
+{}
+
+void Player::Draw() const {
+ utils::SetColor(Colors::RED);
+ utils::DrawRect(Rectf{m_Position.x, m_Position.y, m_Size.x, m_Size.y});
+}
+
+void Player::Update(float elapsedTime, const WorldLevel& level) {
+ Point2f acc{0, 0};
+ acc.y += m_Gravity.y;
+
+ Point2f nextPos = m_Position + m_Vel * elapsedTime * acc * elapsedTime * elapsedTime;
+ //collision checking
+ auto tiles = level.GetAllTiles();
+ for (int x{0}; x < WorldLevel::WORLD_WIDTH; ++x) {
+ for (int y{0}; y < WorldLevel::WORLD_HEIGHT; ++y) {
+ WorldTile* tile = tiles[x][y];
+ if (tile->GetTileType() == GroundTileTypes::Dirt) {
+ Rectf tileRect = Rectf{tile->GetPosition().x, tile->GetPosition().y, WorldLevel::TILE_WIDTH, WorldLevel::TILE_HEIGHT};
+ if (utils::IsOverlapping(nextPos, m_Size, tileRect)) {
+ //collision
+ if (m_Vel.y < 0) {
+ //collision from above
+ m_Position.y = tileRect.bottom;
+ m_Vel.y = 0;
+ } else {
+ m_Position.y = tileRect.bottom + m_Size.y;
+ m_Vel.y = 0;
+ }
+ }
+ }
+ }
+ }
+ m_Vel = Point2f{m_Vel.x + float(acc.x * elapsedTime), m_Vel.y + float(acc.y * elapsedTime)};
+ // m_Position += m_Vel * elapsedTime;
+ m_Position = Point2f{m_Position.x + m_Vel.x * elapsedTime, m_Position.y + m_Vel.y * elapsedTime};
+}
\ No newline at end of file
diff --git a/Game/Player.h b/Game/Player.h
new file mode 100644
index 0000000..ff152f3
--- /dev/null
+++ b/Game/Player.h
@@ -0,0 +1,22 @@
+#pragma once
+
+class WorldLevel;
+class Player
+{
+public:
+
+ Player(const Point2f& Position);
+ void Update(float elapsedTime, const WorldLevel& level);
+ void Draw() const;
+
+private:
+ Point2f m_Position{};
+ Point2f m_Size{};
+
+ Point2f m_Vel{};
+
+ Point2f m_Acc{};
+ Point2f m_Gravity{ 0, -9.81f };
+ float m_MaxSpeed{ 200 };
+
+};
diff --git a/Game/TextureManager.cpp b/Game/TextureManager.cpp
new file mode 100644
index 0000000..7feb2c3
--- /dev/null
+++ b/Game/TextureManager.cpp
@@ -0,0 +1,2 @@
+#include "pch.h"
+#include "TextureManager.h"
diff --git a/Game/TextureManager.h b/Game/TextureManager.h
new file mode 100644
index 0000000..73680d7
--- /dev/null
+++ b/Game/TextureManager.h
@@ -0,0 +1,7 @@
+#pragma once
+
+class TextureManager
+{
+public:
+
+};
diff --git a/Game/WorldLevel.cpp b/Game/WorldLevel.cpp
index c0b872d..549e778 100644
--- a/Game/WorldLevel.cpp
+++ b/Game/WorldLevel.cpp
@@ -1,25 +1,72 @@
#include "pch.h"
#include "WorldLevel.h"
+#include
+#include
+
+#include "colors.h"
#include "utils.h"
-WorldLevel::WorldLevel() {
- for (int i{ 0 }; i < 10; ++i) {
- for (int j{ 0 }; j < 10; ++j) {
- m_WorldTiles[i][j] = WorldTile{ Point2f{ (float)i * 50, (float)j * 50 }, GroundTileTypes::Dirt };
- }
- }
-}
-WorldLevel::~WorldLevel() {
-}
-void WorldLevel::Update(float elapsedSec) {
-}
-void WorldLevel::Draw() const {
- for (int i{ 0 }; i < 10; ++i) {
- for (int j{ 0 }; j < 10; ++j) {
- utils::SetColor(Color4f{ 0.5f, 0.5f, 0.5f, 1.0f });
- utils::FillRect(m_WorldTiles[i][j].GetPosition().x, m_WorldTiles[i][j].GetPosition().y, 50, 50);
+
+WorldLevel::WorldLevel(Camera* camera) : Level(camera), m_mousePos{ 0, 0 }, m_player(Player{ Point2f{ 0, 100 } }) {
+ // The grid is 34 x 50 big, the top center is 0,0 in world coords
+ for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
+ for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
+ int actualX = x - WORLD_WIDTH / 2;
+ m_worldTiles[x][y] = new WorldTile{ Point2f{ float(actualX * TILE_WIDTH), -float(y * TILE_HEIGHT) - TILE_HEIGHT}, GroundTileTypes::Dirt};
}
}
+ // std::string dirtPath = + "tiles/dirt/dirt" + std::to_string(utils::randRange(1, 5)) + ".png";
+ // m_pTextTexture = new Texture(dirtPath);
}
+WorldLevel::~WorldLevel() {
+ //delete m_pTextTexture;
+
+}
+void WorldLevel::Update(float elapsedSec) {
+ int mouseX, mouseY;
+ SDL_GetMouseState(&mouseX, &mouseY);
+ m_mousePos = Point2f{ float(mouseX), float(mouseY) };
+ m_player.Update(elapsedSec, *this);
+
+
+}
+void WorldLevel::Draw() const {
+ m_pCamera->BeginRendering();
+
+ for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
+ for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
+ m_worldTiles[x][y]->Draw();
+ }
+ }
+
+ utils::SetColor(Colors::WHITE);
+ for (int x { -100 }; x < 100; ++x) {
+ for (int y { -100 }; y < 100; ++y) {
+ utils::DrawLine(x * 50, -5000, x * 50, 50000);
+ utils::DrawLine(-5000, y * 50, 50000, y * 50);
+ }
+ }
+ utils::SetColor(Colors::MAGENTA);
+ utils::FillEllipse(0, 0, 10, 10);
+
+ m_player.Draw();
+ m_pCamera->EndRendering();
+
+ //utils::SetColor(Colors::WHITE);
+ //m_pTextTexture->Draw(Point2f{ 0, 0 });
+
+}
+void WorldLevel::MouseMove(const Point2f& mousePos) {
+ m_mousePos = mousePos;
+}
+WorldTile* WorldLevel::GetTileAt(const Point2f& pos) const {
+ return nullptr;
+}
+void WorldLevel::SetTileAt(const Point2f& pos, WorldTile* tile) {
+}
+std::array, WorldLevel::WORLD_HEIGHT> WorldLevel::GetAllTiles() const {
+ return m_worldTiles;
+}
+
diff --git a/Game/WorldLevel.h b/Game/WorldLevel.h
index 62760b5..4d5b060 100644
--- a/Game/WorldLevel.h
+++ b/Game/WorldLevel.h
@@ -1,17 +1,41 @@
#pragma once
#include "Level.h"
+#include "Texture.h"
+#include "WorldLevel.h"
#include "WorldTile.h"
+#include
+
+#include "Player.h"
+
class WorldLevel : public Level {
public:
- WorldLevel();
- ~WorldLevel();
+ static const int WORLD_WIDTH = 34;
+ static const int WORLD_HEIGHT = 34;
+
+ static const int TILE_WIDTH = 50;
+ static const int TILE_HEIGHT = 50;
+
+ WorldLevel(Camera* camera);
+ ~WorldLevel() override;
void Update(float elapsedSec) override;
void Draw() const override;
+ void MouseMove(const Point2f& mousePos) override;
+
+ WorldTile* GetTileAt(const Point2f& pos) const;
+ void SetTileAt(const Point2f& pos, WorldTile* tile);
+
+ std::array, WORLD_HEIGHT> GetAllTiles() const;
+
+
+
private:
- WorldTile m_WorldTiles[10][10];
-
+
+ std::array, WORLD_HEIGHT> m_worldTiles;
+
+ Player m_player;
+ Point2f m_mousePos{};
};
diff --git a/Game/WorldTile.cpp b/Game/WorldTile.cpp
index 56e4733..d2ed95a 100644
--- a/Game/WorldTile.cpp
+++ b/Game/WorldTile.cpp
@@ -1,14 +1,21 @@
#include "pch.h"
#include "WorldTile.h"
-
#include "utils.h"
+
WorldTile::WorldTile() {
+
}
WorldTile::WorldTile(const Point2f& position, GroundTileTypes groundTileType) : m_Position { position }, m_GroundTileType { groundTileType } {
+ const std::string dirtPath = + "tiles/dirt/dirt" + std::to_string(utils::randRange(1, 5)) + ".png";
+ m_pTexture = new Texture(dirtPath);
+}
+WorldTile::~WorldTile() {
+ delete m_pTexture;
}
void WorldTile::Draw() const {
if (m_GroundTileType != GroundTileTypes::Air) {
- utils::SetColor(Color4f{ 0.5f, 0.5f, 0.5f, 1.0f});
- utils::FillRect(m_Position.x, m_Position.y, 50, 50);
+ m_pTexture->Draw(m_Position);
+ //utils::SetColor(Color4f{ 0.5f, 0.5f, 0.5f, 1.0f});
+ //utils::FillRect(m_Position.x, m_Position.y, 50, 50);
}
}
diff --git a/Game/WorldTile.h b/Game/WorldTile.h
index 50eb0b5..f72c21f 100644
--- a/Game/WorldTile.h
+++ b/Game/WorldTile.h
@@ -1,4 +1,5 @@
#pragma once
+#include "Texture.h"
enum class GroundTileTypes
{
@@ -10,16 +11,25 @@ class WorldTile {
public:
WorldTile();
WorldTile(const Point2f& position, GroundTileTypes groundTileType);
+ ~WorldTile();
void Draw() const;
Point2f GetPosition() const { return m_Position; }
void SetPosition(const Point2f& position) { m_Position = position; }
+
+ Point2f GetSize() const { return Point2f{ 50, 50 }; }
+
+ GroundTileTypes GetTileType() const { return m_GroundTileType; }
+
private:
Point2f m_Position;
GroundTileTypes m_GroundTileType;
+
+ Texture* m_pTexture;
+
};
diff --git a/Game/main.cpp b/Game/main.cpp
index 6315191..4adf2b0 100644
--- a/Game/main.cpp
+++ b/Game/main.cpp
@@ -6,7 +6,8 @@
void StartHeapControl();
void DumpMemoryLeaks();
-int SDL_main(int argv, char** args) {
+int SDL_main(int argv, char** args)
+{
srand(static_cast(time(nullptr)));
StartHeapControl();
diff --git a/Prog2Engine.sln b/Prog2Engine.sln
index 53a6c2f..2fd6507 100644
--- a/Prog2Engine.sln
+++ b/Prog2Engine.sln
@@ -6,6 +6,9 @@ MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Engine", "Engine\Engine.vcxproj", "{5ADAB721-CB6C-4EF5-89EB-20EC51A13CFC}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Game", "Game\Game.vcxproj", "{0F40114E-3E0C-4195-B425-91FD5EF586AD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {5ADAB721-CB6C-4EF5-89EB-20EC51A13CFC} = {5ADAB721-CB6C-4EF5-89EB-20EC51A13CFC}
+ EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/Resources/VisualStudioBad.png b/Resources/VisualStudioBad.png
new file mode 100644
index 0000000..be94a82
Binary files /dev/null and b/Resources/VisualStudioBad.png differ
diff --git a/Resources/test.png b/Resources/test.png
new file mode 100644
index 0000000..ad19d72
Binary files /dev/null and b/Resources/test.png differ
diff --git a/Resources/tiles/dirt/ConvertTexture.py b/Resources/tiles/dirt/ConvertTexture.py
new file mode 100644
index 0000000..cc45fbc
--- /dev/null
+++ b/Resources/tiles/dirt/ConvertTexture.py
@@ -0,0 +1,30 @@
+import os
+from PIL import Image
+
+def convert_to_32bit(file_path):
+ try:
+ # Open the image
+ image = Image.open(file_path)
+
+ # Convert to 32-bit color depth
+ if image.mode != 'RGBA':
+ image = image.convert('RGBA')
+
+ # Save the converted image
+ converted_file_path = file_path.replace('.png', '_32bit.png')
+ image.save(converted_file_path)
+
+ print(f"Conversion complete for '{file_path}'. Saved as '{converted_file_path}'")
+ except Exception as e:
+ print(f"Error: {e}")
+
+if __name__ == "__main__":
+ script_directory = os.path.dirname(os.path.realpath(__file__))
+ png_files = [f for f in os.listdir(script_directory) if f.lower().endswith('.png')]
+
+ if not png_files:
+ print("No .png files found in the script directory.")
+ else:
+ for file_name in png_files:
+ file_path = os.path.join(script_directory, file_name)
+ convert_to_32bit(file_path)
diff --git a/Resources/tiles/dirt/dirt1.png b/Resources/tiles/dirt/dirt1.png
new file mode 100644
index 0000000..4e20132
Binary files /dev/null and b/Resources/tiles/dirt/dirt1.png differ
diff --git a/Resources/tiles/dirt/dirt2.png b/Resources/tiles/dirt/dirt2.png
new file mode 100644
index 0000000..88f5a70
Binary files /dev/null and b/Resources/tiles/dirt/dirt2.png differ
diff --git a/Resources/tiles/dirt/dirt3.png b/Resources/tiles/dirt/dirt3.png
new file mode 100644
index 0000000..4684796
Binary files /dev/null and b/Resources/tiles/dirt/dirt3.png differ
diff --git a/Resources/tiles/dirt/dirt4.png b/Resources/tiles/dirt/dirt4.png
new file mode 100644
index 0000000..565abeb
Binary files /dev/null and b/Resources/tiles/dirt/dirt4.png differ
diff --git a/Resources/tiles/dirt/dirt5.png b/Resources/tiles/dirt/dirt5.png
new file mode 100644
index 0000000..f94884b
Binary files /dev/null and b/Resources/tiles/dirt/dirt5.png differ