Added the Grid, Camera, Level system

Basic player
Started (Barely) on the TextureManager
And other fixes
This commit is contained in:
Bram Verhulst
2024-03-11 03:29:44 +01:00
parent f7c2262e10
commit d6bb3add26
35 changed files with 991 additions and 62 deletions

View File

@@ -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;
}

View File

@@ -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;
};

View File

@@ -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);
}

View File

@@ -2,6 +2,7 @@
#include <vector>
#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{};
};

View File

@@ -149,10 +149,158 @@ xcopy "$(SolutionDir)Resources\*.*" "$(TargetDir)" /y /d /s</Command>
<ItemGroup>
<ClCompile Include="Camera.cpp" />
<ClCompile Include="Game.cpp" />
<ClCompile Include="Level.cpp" />
<ClCompile Include="Level.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<Optimization>Disabled</Optimization>
<SupportJustMyCode>true</SupportJustMyCode>
<AssemblerOutput>NoListing</AssemblerOutput>
<AssemblerListingLocation>x64\Debug\</AssemblerListingLocation>
<UndefineAllPreprocessorDefinitions>false</UndefineAllPreprocessorDefinitions>
<BrowseInformation>false</BrowseInformation>
<BrowseInformationFile>x64\Debug\</BrowseInformationFile>
<CompileAs>Default</CompileAs>
<ConformanceMode>true</ConformanceMode>
<DiagnosticsFormat>Column</DiagnosticsFormat>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ErrorReporting>Prompt</ErrorReporting>
<ExpandAttributedSource>false</ExpandAttributedSource>
<ExceptionHandling>Sync</ExceptionHandling>
<EnableASAN>false</EnableASAN>
<EnableFuzzer>false</EnableFuzzer>
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<GenerateModuleDependencies>false</GenerateModuleDependencies>
<GenerateSourceDependencies>false</GenerateSourceDependencies>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>false</IntrinsicFunctions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C>
<MinimalRebuild>false</MinimalRebuild>
<ModuleDependenciesFile>x64\Debug\</ModuleDependenciesFile>
<ModuleOutputFile>x64\Debug\</ModuleOutputFile>
<OmitDefaultLibName>false</OmitDefaultLibName>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<ObjectFileName>x64\Debug\</ObjectFileName>
<CallingConvention>Cdecl</CallingConvention>
<ProgramDataBaseFileName>x64\Debug\vc143.pdb</ProgramDataBaseFileName>
<PrecompiledHeader>Create</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>x64\Debug\Game.pch</PrecompiledHeaderOutputFile>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessKeepComments>false</PreprocessKeepComments>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
<ShowIncludes>false</ShowIncludes>
<SourceDependenciesFile>x64\Debug\</SourceDependenciesFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<BufferSecurityCheck>true</BufferSecurityCheck>
<SmallerTypeCheck>false</SmallerTypeCheck>
<SpectreMitigation>false</SpectreMitigation>
<StructMemberAlignment>Default</StructMemberAlignment>
<TrackerLogDirectory>x64\Debug\Game.tlog\</TrackerLogDirectory>
<TranslateIncludes>false</TranslateIncludes>
<MinimalRebuildFromTracking>true</MinimalRebuildFromTracking>
<TreatWarningAsError>false</TreatWarningAsError>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>true</UseFullPaths>
<WarningLevel>Level3</WarningLevel>
<XMLDocumentationFileName>x64\Debug\</XMLDocumentationFileName>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<IntelJCCErratum>false</IntelJCCErratum>
<BuildStlModules>false</BuildStlModules>
<TreatAngleIncludeAsExternal>false</TreatAngleIncludeAsExternal>
<ExternalWarningLevel>InheritWarningLevel</ExternalWarningLevel>
<TreatExternalTemplatesAsInternal>true</TreatExternalTemplatesAsInternal>
<DisableAnalyzeExternal>false</DisableAnalyzeExternal>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
</ClCompile>
<ClCompile Include="main.cpp" />
<ClCompile Include="pch.cpp" />
<ClCompile Include="WorldLevel.cpp" />
<ClCompile Include="Player.cpp" />
<ClCompile Include="TextureManager.cpp" />
<ClCompile Include="WorldLevel.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<Optimization>Disabled</Optimization>
<SupportJustMyCode>true</SupportJustMyCode>
<AssemblerOutput>NoListing</AssemblerOutput>
<AssemblerListingLocation>x64\Debug\</AssemblerListingLocation>
<UndefineAllPreprocessorDefinitions>false</UndefineAllPreprocessorDefinitions>
<BrowseInformation>false</BrowseInformation>
<BrowseInformationFile>x64\Debug\</BrowseInformationFile>
<CompileAs>Default</CompileAs>
<ConformanceMode>true</ConformanceMode>
<DiagnosticsFormat>Column</DiagnosticsFormat>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ErrorReporting>Prompt</ErrorReporting>
<ExpandAttributedSource>false</ExpandAttributedSource>
<ExceptionHandling>Sync</ExceptionHandling>
<EnableASAN>false</EnableASAN>
<EnableFuzzer>false</EnableFuzzer>
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<GenerateModuleDependencies>false</GenerateModuleDependencies>
<GenerateSourceDependencies>false</GenerateSourceDependencies>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>false</IntrinsicFunctions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C>
<MinimalRebuild>false</MinimalRebuild>
<ModuleDependenciesFile>x64\Debug\</ModuleDependenciesFile>
<ModuleOutputFile>x64\Debug\</ModuleOutputFile>
<OmitDefaultLibName>false</OmitDefaultLibName>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<ObjectFileName>x64\Debug\</ObjectFileName>
<CallingConvention>Cdecl</CallingConvention>
<ProgramDataBaseFileName>x64\Debug\vc143.pdb</ProgramDataBaseFileName>
<PrecompiledHeader>Create</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>x64\Debug\Game.pch</PrecompiledHeaderOutputFile>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessKeepComments>false</PreprocessKeepComments>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
<ShowIncludes>false</ShowIncludes>
<SourceDependenciesFile>x64\Debug\</SourceDependenciesFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<BufferSecurityCheck>true</BufferSecurityCheck>
<SmallerTypeCheck>false</SmallerTypeCheck>
<SpectreMitigation>false</SpectreMitigation>
<StructMemberAlignment>Default</StructMemberAlignment>
<TrackerLogDirectory>x64\Debug\Game.tlog\</TrackerLogDirectory>
<TranslateIncludes>false</TranslateIncludes>
<MinimalRebuildFromTracking>true</MinimalRebuildFromTracking>
<TreatWarningAsError>false</TreatWarningAsError>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>true</UseFullPaths>
<WarningLevel>Level3</WarningLevel>
<XMLDocumentationFileName>x64\Debug\</XMLDocumentationFileName>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<IntelJCCErratum>false</IntelJCCErratum>
<BuildStlModules>false</BuildStlModules>
<TreatAngleIncludeAsExternal>false</TreatAngleIncludeAsExternal>
<ExternalWarningLevel>InheritWarningLevel</ExternalWarningLevel>
<TreatExternalTemplatesAsInternal>true</TreatExternalTemplatesAsInternal>
<DisableAnalyzeExternal>false</DisableAnalyzeExternal>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
</ClCompile>
<ClCompile Include="WorldTile.cpp" />
</ItemGroup>
<ItemGroup>
@@ -160,9 +308,14 @@ xcopy "$(SolutionDir)Resources\*.*" "$(TargetDir)" /y /d /s</Command>
<ClInclude Include="Game.h" />
<ClInclude Include="Level.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="Player.h" />
<ClInclude Include="TextureManager.h" />
<ClInclude Include="WorldLevel.h" />
<ClInclude Include="WorldTile.h" />
</ItemGroup>
<ItemGroup>
<Folder Include="Level\" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>

View File

@@ -24,6 +24,93 @@
<ClCompile Include="pch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Camera.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Level.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WorldLevel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WorldTile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_allegro5.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_android.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_dx9.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_dx10.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_dx11.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_dx12.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_glfw.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_glut.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_opengl2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_opengl3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_sdl2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_sdl3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_sdlrenderer2.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_sdlrenderer3.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_vulkan.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_wgpu.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\backends\imgui_impl_win32.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\misc\cpp\imgui_stdlib.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\misc\fonts\binary_to_compressed_c.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\misc\freetype\imgui_freetype.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\imgui.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\imgui_demo.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\imgui_draw.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\imgui_tables.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DearImGui\imgui_widgets.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Game.h">
@@ -32,5 +119,104 @@
<ClInclude Include="pch.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Camera.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Level.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="WorldLevel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="WorldTile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_allegro5.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_android.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_dx9.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_dx10.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_dx11.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_dx12.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_glfw.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_glut.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_metal.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_opengl2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_opengl3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_opengl3_loader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_osx.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_sdl2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_sdl3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_sdlrenderer2.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_sdlrenderer3.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_vulkan.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_wgpu.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\backends\imgui_impl_win32.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\misc\cpp\imgui_stdlib.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\misc\freetype\imgui_freetype.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\misc\single_file\imgui_single_file.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\imconfig.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\imgui.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\imgui_internal.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\imstb_rectpack.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\imstb_textedit.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="DearImGui\imstb_truetype.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -1,6 +1,12 @@
#include "pch.h"
#include "Level.h"
Level::Level() {
#include <iostream>
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) {
}

View File

@@ -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;
};

45
Game/Player.cpp Normal file
View File

@@ -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};
}

22
Game/Player.h Normal file
View File

@@ -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 };
};

2
Game/TextureManager.cpp Normal file
View File

@@ -0,0 +1,2 @@
#include "pch.h"
#include "TextureManager.h"

7
Game/TextureManager.h Normal file
View File

@@ -0,0 +1,7 @@
#pragma once
class TextureManager
{
public:
};

View File

@@ -1,25 +1,72 @@
#include "pch.h"
#include "WorldLevel.h"
#include <iostream>
#include <ostream>
#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<std::array<WorldTile*, WorldLevel::WORLD_WIDTH>, WorldLevel::WORLD_HEIGHT> WorldLevel::GetAllTiles() const {
return m_worldTiles;
}

View File

@@ -1,17 +1,41 @@
#pragma once
#include "Level.h"
#include "Texture.h"
#include "WorldLevel.h"
#include "WorldTile.h"
#include <array>
#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<std::array<WorldTile*, WORLD_WIDTH>, WORLD_HEIGHT> GetAllTiles() const;
private:
WorldTile m_WorldTiles[10][10];
std::array<std::array<WorldTile*, WORLD_WIDTH>, WORLD_HEIGHT> m_worldTiles;
Player m_player;
Point2f m_mousePos{};
};

View File

@@ -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);
}
}

View File

@@ -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;
};

View File

@@ -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<unsigned int>(time(nullptr)));
StartHeapControl();