diff --git a/.idea/.idea.Motherload/.idea/workspace.xml b/.idea/.idea.Motherload/.idea/workspace.xml
index 7be0b3a..ad6b7d1 100644
--- a/.idea/.idea.Motherload/.idea/workspace.xml
+++ b/.idea/.idea.Motherload/.idea/workspace.xml
@@ -10,49 +10,18 @@
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
@@ -71,8 +40,10 @@
+
+
@@ -92,28 +63,28 @@
- {
- "keyToString": {
- "C++ Project.Game.executor": "Run",
- "RunOnceActivity.OpenProjectViewOnStart": "true",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "ignore.virus.scanning.warn.message": "true",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)",
- "nodejs_package_manager_path": "npm",
- "settings.editor.selected.configurable": "preferences.sourceCode.C++",
- "vue.rearranger.settings.migration": "true"
+
+}]]>
@@ -215,7 +186,9 @@
-
+
+
+
@@ -273,7 +246,15 @@
1713269323273
-
+
+
+ 1713354916684
+
+
+
+ 1713354916684
+
+
@@ -289,7 +270,8 @@
-
+
+
diff --git a/Assets/FuelStation.aseprite b/Assets/FuelStation.aseprite
index 695eec5..83cea46 100644
Binary files a/Assets/FuelStation.aseprite and b/Assets/FuelStation.aseprite differ
diff --git a/Game/Game.vcxproj b/Game/Game.vcxproj
index dc05a82..309252e 100644
--- a/Game/Game.vcxproj
+++ b/Game/Game.vcxproj
@@ -379,6 +379,7 @@
true
+
MultiThreadedDebugDll
EnableFastChecks
@@ -471,6 +472,7 @@
+
diff --git a/Game/GridSystem/WorldTile.cpp b/Game/GridSystem/WorldTile.cpp
index 6633dea..c191140 100644
--- a/Game/GridSystem/WorldTile.cpp
+++ b/Game/GridSystem/WorldTile.cpp
@@ -15,15 +15,16 @@ WorldTile::WorldTile(const Vector2f& position, GroundTileType* groundTileType, T
// m_pTexture = new Texture(dirtPath);
m_pTexture = pTextureManager->GetTexture(groundTileType->getPath());
- m_pBottomLeftTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/bottomLeft.png");
- m_pBottomRightTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/bottomRight.png");
- m_pTopLeftTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/topLeft.png");
- m_pTopRightTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/topRight.png");
+ m_SideTextures[TileDirection::TopLeft] = pTextureManager->GetTexture("tiles/dirt/sidepieces/topLeft.png");
+ m_SideTextures[TileDirection::TopRight] = pTextureManager->GetTexture("tiles/dirt/sidepieces/topRight.png");
+ m_SideTextures[TileDirection::BottomLeft] = pTextureManager->GetTexture("tiles/dirt/sidepieces/bottomLeft.png");
+ m_SideTextures[TileDirection::BottomRight] = pTextureManager->GetTexture("tiles/dirt/sidepieces/bottomRight.png");
- m_pMiddleBottomTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleBottom.png");
- m_pMiddleTopTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleTop.png");
- m_pMiddleLeftTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleLeft.png");
- m_pMiddleRightTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleRight.png");
+ m_SideTextures[TileDirection::TopMiddle] = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleTop.png");
+ m_SideTextures[TileDirection::BottomMiddle] = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleBottom.png");
+ m_SideTextures[TileDirection::MiddleLeft] = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleLeft.png");
+ m_SideTextures[TileDirection::MiddleRight] = pTextureManager->GetTexture("tiles/dirt/sidepieces/middleRight.png");
+
m_pAllTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/all.png");
}
@@ -42,9 +43,9 @@ void WorldTile::Draw() {
//check if it's all around dirt
bool allDirt = true;
for (int i = 0; i < 8; i++) {
- WorldTile* tile = m_SurroundingTiles.GetTile(static_cast(i));
+ const WorldTile* tile = m_SurroundingTiles.GetTile(static_cast(i));
if(tile != nullptr) { //Tile exists
- GroundTileTypes type = tile->GetTileType()->getType();
+ const GroundTileTypes type = tile->GetTileType()->getType();
if(type != Tiles::DIRT->getType()) {
allDirt = false;
break;
@@ -57,144 +58,35 @@ void WorldTile::Draw() {
}
if(*m_GroundTileType == Tiles::AIR) {
- WorldTile* topLeft = m_SurroundingTiles.GetTile(TileDirection::TopLeft);
- if(topLeft != nullptr) {
- GroundTileTypes type = topLeft->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pTopLeftTexture->Draw(m_Position);
- }
- }
+ this->DrawSide(TileDirection::TopLeft);
+ this->DrawSide(TileDirection::TopRight);
+ this->DrawSide(TileDirection::BottomLeft);
+ this->DrawSide(TileDirection::BottomRight);
- WorldTile* topRight = m_SurroundingTiles.GetTile(TileDirection::TopRight);
- if(topRight != nullptr) {
- GroundTileTypes type = topRight->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pTopRightTexture->Draw(m_Position);
- }
- }
-
- WorldTile* bottomLeft = m_SurroundingTiles.GetTile(TileDirection::BottomLeft);
- if(bottomLeft != nullptr) {
- GroundTileTypes type = bottomLeft->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pBottomLeftTexture->Draw(m_Position);
- }
- }
-
- WorldTile* bottomRight = m_SurroundingTiles.GetTile(TileDirection::BottomRight);
- if(bottomRight != nullptr) {
- GroundTileTypes type = bottomRight->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pBottomRightTexture->Draw(m_Position);
- }
- }
-
- WorldTile* middleTop = m_SurroundingTiles.GetTile(TileDirection::TopMiddle);
- if(middleTop != nullptr) {
- GroundTileTypes type = middleTop->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pMiddleTopTexture->Draw(m_Position);
- }
- }
-
- WorldTile* middleBottom = m_SurroundingTiles.GetTile(TileDirection::BottomMiddle);
- if(middleBottom != nullptr) {
- GroundTileTypes type = middleBottom->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pMiddleBottomTexture->Draw(m_Position);
- }
- }
-
- WorldTile* middleLeft = m_SurroundingTiles.GetTile(TileDirection::MiddleLeft);
- if(middleLeft != nullptr) {
- GroundTileTypes type = middleLeft->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pMiddleLeftTexture->Draw(m_Position);
- }
- }
-
- WorldTile* middleRight = m_SurroundingTiles.GetTile(TileDirection::MiddleRight);
- if(middleRight != nullptr) {
- GroundTileTypes type = middleRight->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pMiddleRightTexture->Draw(m_Position);
- }
- }
-
- WorldTile* bottomMiddle = m_SurroundingTiles.GetTile(TileDirection::BottomMiddle);
- if(bottomMiddle != nullptr) {
- GroundTileTypes type = bottomMiddle->GetTileType()->getType();
- if(type != Tiles::AIR->getType()) {
- m_pMiddleBottomTexture->Draw(m_Position);
- }
- }
+ this->DrawSide(TileDirection::TopMiddle);
+ this->DrawSide(TileDirection::BottomMiddle);
+ this->DrawSide(TileDirection::MiddleLeft);
+ this->DrawSide(TileDirection::MiddleRight);
}
-
-
- // if(m_Hightlight) {
- // for (int i = 0; i < 8; i++) {
- // WorldTile* tile = m_SurroundingTiles.GetTile(static_cast(i));
- // if(tile != nullptr) { //Tile exists
- // //TODO: Wow Big mess
- // GroundTileTypes type = tile->GetTileType()->getType();
- // if(type == Tiles::AIR->getType()) {
- // utils::SetColor(Colors::BLACK);
- // utils::FillRect(Rectf{tile->GetPosition(), Vector2f{50,50}});
- // continue;
- // }
- // if(type != Tiles::AIR->getType()) {
- // utils::SetColor(Colors::YELLOW);
- // utils::FillRect(Rectf{tile->GetPosition(), Vector2f{50,50}});
- // }
- // }
- // }
- // }
-
- //Tile is air, So check 8 tiles around
- // Check the 4 tiles diagonally
-
- // m_SurroundingTiles = m_pGridManager->GetSurroundingTiles(this);
- //
- // //check if all tiles are air
- // bool allAir = true;
- // for (int i = 0; i < 8; i++) {
- // WorldTile* tile = m_SurroundingTiles.GetTile(static_cast(i));
- // if(tile != nullptr) { //Tile exists
- // if(tile->GetTileType() != Tiles::AIR) {
- // allAir = false;
- // break;
- // }
- // }
- // }
- // if (allAir) {
- // return;
- // }
- //
- // WorldTile* topLeft = m_SurroundingTiles.GetTile(TileDirection::TopLeft); //TODO: ask if draw needs to be const
- // GroundTileType* topLeftType = topLeft != nullptr ? topLeft->GetTileType() : Tiles::AIR;
- // if(topLeftType != Tiles::AIR) {
- // m_pTopLeftTexture->Draw(m_Position);
- // utils::SetColor(Colors::YELLOW);
- // utils::FillRect(Rectf{topLeft->GetPosition(), Vector2f{50,50}});
- // }
- //
- // WorldTile* topRight = m_SurroundingTiles.GetTile(TileDirection::TopRight);
- // GroundTileType* topRightType = topRight != nullptr ? topRight->GetTileType() : Tiles::AIR;
- // if(topRightType != Tiles::AIR) {
- // m_pTopRightTexture->Draw(m_Position);
- // }
- //
}
-void WorldTile::Update(Camera* camera) {
- Vector2f CurrentIndex = m_pGridManager->GetIndexFromPosition(m_Position);
+
+void WorldTile::Update(const Camera* camera) {
+ m_pGridManager->GetIndexFromPosition(m_Position);
m_SurroundingTiles = m_pGridManager->GetSurroundingTiles(this);
- Vector2f mousePos = camera->TransformMouse(Vector2f{utils::GetMousePos().x, 500 - utils::GetMousePos().y});
- m_Hightlight = utils::IsPointInRect(mousePos, Rectf{GetCollisionRect().pos, GetCollisionRect().size});
- if(CurrentIndex.x == 1 && CurrentIndex.y == 1) {
- // std::cout << "Hey" << std::endl;
- }
+ const Vector2f mouse_pos = camera->TransformMouse(Vector2f{utils::GetMousePos().x, 500 - utils::GetMousePos().y});
+ m_Hightlight = utils::IsPointInRect(mouse_pos, Rectf{GetCollisionRect().pos, GetCollisionRect().size});
}
Collision::TileCollisionRect WorldTile::GetCollisionRect() {
return Collision::TileCollisionRect { m_Position, GetSize(), ( this ) };
}
+
+void WorldTile::DrawSide(const TileDirection& direction) {
+ const WorldTile* tile = m_SurroundingTiles.GetTile(direction);
+ if(tile != nullptr) {
+ const GroundTileTypes type = tile->GetTileType()->getType();
+ if(type != Tiles::AIR->getType()) {
+ m_SideTextures[direction]->Draw(m_Position);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Game/GridSystem/WorldTile.h b/Game/GridSystem/WorldTile.h
index 4662ada..217474e 100644
--- a/Game/GridSystem/WorldTile.h
+++ b/Game/GridSystem/WorldTile.h
@@ -10,6 +10,7 @@ enum class GroundTileTypes
{
Air,
Dirt,
+ Hard,
Stone,
Iron
};
@@ -89,6 +90,13 @@ namespace Tiles
static GroundTileType* AIR = new GroundTileType("", GroundTileTypes::Air);
static GroundTileType* DIRT = new RandomGroundTile("tiles/dirt/dirt[0].png", GroundTileTypes::Dirt, 5);
static GroundTileType* IRON = new GroundTileType("tiles/ores/Ore_Ironium.png", GroundTileTypes::Iron);
+
+ namespace Special
+ {
+ static GroundTileType* HARD_LEFT = new GroundTileType("tiles/dirt/special/hardLeft.png", GroundTileTypes::Hard);
+ static GroundTileType* HARD_RIGHT = new GroundTileType("tiles/dirt/special/hardRight.png", GroundTileTypes::Hard);
+ static GroundTileType* HARD_MIDDLE = new GroundTileType("tiles/dirt/special/hardMiddle.png", GroundTileTypes::Hard);
+ }
}
class WorldTile
@@ -99,7 +107,7 @@ public:
~WorldTile();
void Draw();
- void Update(Camera* camera); //TODO: no use
+ void Update(const Camera* camera); //TODO: no use
Vector2f GetPosition() const {
return m_Position;
@@ -124,6 +132,9 @@ public:
bool m_Hightlight { false };
private:
+ void DrawSide(const TileDirection& direction);
+
+
Vector2f m_Position;
GroundTileType* m_GroundTileType;
@@ -135,17 +146,7 @@ private:
surroundingTiles m_SurroundingTiles;
- Texture* m_pTopLeftTexture;
- Texture* m_pTopRightTexture;
- Texture* m_pBottomLeftTexture;
- Texture* m_pBottomRightTexture;
-
- Texture* m_pMiddleTopTexture;
- Texture* m_pMiddleBottomTexture;
- Texture* m_pMiddleLeftTexture;
- Texture* m_pMiddleRightTexture;
+ std::vector m_SideTextures { 8, nullptr };
Texture* m_pAllTexture;
-
-
};
diff --git a/Game/Levels/World/Building.cpp b/Game/Levels/World/Building.cpp
new file mode 100644
index 0000000..585db46
--- /dev/null
+++ b/Game/Levels/World/Building.cpp
@@ -0,0 +1,13 @@
+#include "pch.h"
+#include "Building.h"
+Building::Building(const std::string& filePath, const Vector2f& position, TextureManager* pTextureManager): m_Position(position) {
+ m_Texture = pTextureManager->GetTexture(filePath);
+ m_Size = Vector2f(m_Texture->GetWidth(), m_Texture->GetHeight());
+}
+Building::~Building() {
+}
+void Building::Draw() const {
+ m_Texture->Draw(m_Position);
+}
+void Building::Update(float dt) {
+}
diff --git a/Game/Levels/World/Building.h b/Game/Levels/World/Building.h
new file mode 100644
index 0000000..e0b74d7
--- /dev/null
+++ b/Game/Levels/World/Building.h
@@ -0,0 +1,20 @@
+#pragma once
+#include "Texture.h"
+#include "TextureManager.h"
+
+class Building
+{
+public:
+ Building(const std::string& filePath, const Vector2f& position, TextureManager* pTextureManager);
+ ~Building();
+
+ void Draw() const;
+ void Update(float dt);
+
+
+private:
+ Texture* m_Texture;
+ Vector2f m_Position;
+ Vector2f m_Size;
+
+};
diff --git a/Game/Levels/World/WorldLevel.cpp b/Game/Levels/World/WorldLevel.cpp
index 5eb8262..edc1409 100644
--- a/Game/Levels/World/WorldLevel.cpp
+++ b/Game/Levels/World/WorldLevel.cpp
@@ -46,6 +46,11 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
m_gridManager.GetTileAtIndex(x, 0)->SetTileType(Tiles::AIR);
}
+ m_refeulBuilding = new Building { "buildings/fuelStation.png", Vector2f { -700, -50 }, TextureManager::GetInstance() };
+ m_gridManager.GetTileAtWorldPos(Vector2f{-700, -50})->SetTileType(Tiles::Special::HARD_LEFT);
+ m_gridManager.GetTileAtWorldPos(Vector2f{-650, -50})->SetTileType(Tiles::Special::HARD_MIDDLE);
+ m_gridManager.GetTileAtWorldPos(Vector2f{-600, -50})->SetTileType(Tiles::Special::HARD_RIGHT);
+
}
WorldLevel::~WorldLevel() {
//delete m_pTextTexture;
@@ -132,6 +137,8 @@ void WorldLevel::Draw() const {
if(m_pSelectedTile != nullptr) {
m_pSelectedTile->Draw();
}
+
+ m_refeulBuilding->Draw();
m_pCamera->EndRendering();
diff --git a/Game/Levels/World/WorldLevel.h b/Game/Levels/World/WorldLevel.h
index dde9150..3fc09aa 100644
--- a/Game/Levels/World/WorldLevel.h
+++ b/Game/Levels/World/WorldLevel.h
@@ -1,4 +1,5 @@
#pragma once
+#include "Building.h"
#include "Collision.h"
#include "Levels/Level.h"
#include "Player.h"
@@ -38,6 +39,8 @@ private:
WorldTile* m_pSelectedTile { nullptr };
+ Building* m_refeulBuilding;
+
float testLerp{ 0.0f };
// ImGui Vars
diff --git a/Game/Player.cpp b/Game/Player.cpp
index 081b670..e7c13b4 100644
--- a/Game/Player.cpp
+++ b/Game/Player.cpp
@@ -19,6 +19,7 @@ Player::Player(const Vector2f& Position, TextureManager* manager) : m_Position(P
m_walkAnimation = new Animation(
manager->GetTexture("animations/player/player_walk.png"),
8, 0.1f, Rectf { 0, 0, 70, 70 });
+ m_currentAnimation = m_walkAnimation;
}
Collision::CollisionRect Player::GetCollisionRect() const {
Collision::CollisionRect rect = { m_Position, m_Size, m_Vel };
@@ -34,10 +35,10 @@ void Player::Draw() const {
const int frameWidth = 70; //TODO: fix this
int halfFrameWidth = frameWidth / 2;
+ float bobOffset = m_BobUp ? 1 : 0;
+ Vector2f drawPos = Vector2f { center.x - halfFrameWidth, center.y - halfFrameWidth + 9 + bobOffset} ;
- Vector2f drawPos = Vector2f { center.x - halfFrameWidth, center.y - halfFrameWidth + 9 };
-
- m_walkAnimation->Draw(drawPos, Rectf { drawPos.x, drawPos.y, frameWidth, frameWidth });
+ m_walkAnimation->Draw(drawPos, Rectf { drawPos.x, drawPos.y , frameWidth, frameWidth });
}
void Player::ProcessImGui() {
ImGui::Begin("Collision Info", nullptr, ImGuiWindowFlags_AlwaysAutoResize);
@@ -56,6 +57,8 @@ void Player::ProcessImGui() {
break;
}
ImGui::Text("Player State %s", currentState.c_str());
+ ImGui::Text("Bob counter: %f", m_BobTimer);
+ ImGui::Text("Bob up: %s", m_BobUp ? "true" : "false");
//ContactMap
@@ -68,7 +71,11 @@ void Player::ProcessImGui() {
}
void Player::Update(float elapsedTime, WorldLevel& level) {
-
+ m_BobTimer += elapsedTime;
+ if(m_BobTimer >= m_BobTime) {
+ m_BobUp = !m_BobUp;
+ m_BobTimer = 0.0f;
+ }
//check for keys
if(m_State != PlayerState::Digging) {
diff --git a/Game/Player.h b/Game/Player.h
index 8ebb0ac..c7dd994 100644
--- a/Game/Player.h
+++ b/Game/Player.h
@@ -68,6 +68,9 @@ private:
Vector2f m_Acc;
Vector2f m_Gravity { 0, -9.81f };
+ float m_BobTimer{ 0.0f };
+ const float m_BobTime{ 0.1f };
+ bool m_BobUp{ true };
Vector2f m_DigDestination{};
float m_DigProgress{};
@@ -79,7 +82,10 @@ private:
bool m_Grounded { false };
bool m_DidJustDigRight { false };
+ Animation* m_currentAnimation{ nullptr };
Animation* m_walkAnimation;
+ Animation* m_turnAnimation;
+ Animation* m_digAnimation;
PlayerState m_State { PlayerState::Idle };
PlayerDirection m_Direction { PlayerDirection::Right };
diff --git a/Resources/buildings/fuelStation.png b/Resources/buildings/fuelStation.png
new file mode 100644
index 0000000..b5652af
Binary files /dev/null and b/Resources/buildings/fuelStation.png differ
diff --git a/Resources/tiles/dirt/special/grass1.png b/Resources/tiles/dirt/special/grass1.png
new file mode 100644
index 0000000..61e2149
Binary files /dev/null and b/Resources/tiles/dirt/special/grass1.png differ
diff --git a/Resources/tiles/dirt/special/grass2.png b/Resources/tiles/dirt/special/grass2.png
new file mode 100644
index 0000000..c4140e0
Binary files /dev/null and b/Resources/tiles/dirt/special/grass2.png differ
diff --git a/Resources/tiles/dirt/special/hardLeft.png b/Resources/tiles/dirt/special/hardLeft.png
new file mode 100644
index 0000000..1c2b59b
Binary files /dev/null and b/Resources/tiles/dirt/special/hardLeft.png differ
diff --git a/Resources/tiles/dirt/special/hardMiddle.png b/Resources/tiles/dirt/special/hardMiddle.png
new file mode 100644
index 0000000..b5bfcf7
Binary files /dev/null and b/Resources/tiles/dirt/special/hardMiddle.png differ
diff --git a/Resources/tiles/dirt/special/hardRight.png b/Resources/tiles/dirt/special/hardRight.png
new file mode 100644
index 0000000..d05e90a
Binary files /dev/null and b/Resources/tiles/dirt/special/hardRight.png differ