Tile cost affects speed
This commit is contained in:
parent
822cca1865
commit
bdac14c6cb
@ -523,17 +523,17 @@ class Map {
|
|||||||
public:
|
public:
|
||||||
static constexpr float TILE_SIZE = 100.0f; // tile size in world
|
static constexpr float TILE_SIZE = 100.0f; // tile size in world
|
||||||
|
|
||||||
Map(int width, int height) : m_Width(width), m_Height(height) {
|
Map(int rows, int cols) : m_Cols(cols), m_Rows(rows) {
|
||||||
bool sw = true;
|
bool sw = true;
|
||||||
LOG_DEBUG("width = ", width, " height = ", height);
|
LOG_DEBUG("cols = ", cols, " rows = ", rows);
|
||||||
m_Tiles = std::vector<std::vector<const Tile *>>{};
|
m_Tiles = std::vector<std::vector<const Tile *>>{};
|
||||||
for (int i = 0; i < m_Width; i++) {
|
for (size_t row = 0; row < m_Rows; row++) {
|
||||||
m_Tiles.push_back(std::vector<const Tile *>{});
|
m_Tiles.push_back(std::vector<const Tile *>{});
|
||||||
for (int j = 0; j < m_Height; j++) {
|
for (size_t col = 0; col < m_Cols; col++) {
|
||||||
if (sw)
|
if (sw)
|
||||||
m_Tiles[i].push_back(&tile_types.at("Grass"));
|
m_Tiles[row].push_back(&tile_types.at("Grass"));
|
||||||
else
|
else
|
||||||
m_Tiles[i].push_back(&tile_types.at("Water"));
|
m_Tiles[row].push_back(&tile_types.at("Water"));
|
||||||
sw = !sw;
|
sw = !sw;
|
||||||
}
|
}
|
||||||
sw = !sw;
|
sw = !sw;
|
||||||
@ -557,11 +557,36 @@ public:
|
|||||||
return Vec2D<float>{TILE_SIZE, TILE_SIZE};
|
return Vec2D<float>{TILE_SIZE, TILE_SIZE};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Tile* GetTileAt(TilePos p) const {
|
||||||
|
assert(IsTilePosValid(p));
|
||||||
|
size_t row = p.x;
|
||||||
|
size_t col = p.y;
|
||||||
|
|
||||||
|
return m_Tiles[row][col];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const Tile* GetTileAt(WorldPos p) const {
|
||||||
|
return GetTileAt(WorldToTile(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsTilePosValid(TilePos p) const {
|
||||||
|
size_t row = p.x;
|
||||||
|
size_t col = p.y;
|
||||||
|
|
||||||
|
return row < m_Tiles.size() && col < m_Tiles[0].size();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
double GetTileVelocityCoeff(T p) const {
|
||||||
|
return 1.0 / GetTileAt(p)->cost;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// std::vector<std::vector<const Tile*>> m_Tiles;
|
// std::vector<std::vector<const Tile*>> m_Tiles;
|
||||||
std::vector<std::vector<const Tile *>> m_Tiles;
|
std::vector<std::vector<const Tile *>> m_Tiles;
|
||||||
int m_Width = 0;
|
size_t m_Cols = 0;
|
||||||
int m_Height = 0;
|
size_t m_Rows = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PathFindingDemo {
|
class PathFindingDemo {
|
||||||
@ -611,12 +636,15 @@ public:
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Actual velocity might be changed later by collisions
|
// Actual velocity might be changed later by collisions
|
||||||
entity->SetActualVelocity(entity->GetRequestedVelocity());
|
auto pos = GetPlayer()->GetPosition();
|
||||||
|
double tile_velocity_coeff = m_Map.GetTileVelocityCoeff(pos);
|
||||||
|
entity->SetActualVelocity(entity->GetRequestedVelocity() * tile_velocity_coeff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle collisions:
|
// Handle collisions:
|
||||||
// - update actual velocity for colliding objects
|
// - update actual velocity for colliding objects
|
||||||
|
// - modify velocity based on current tile
|
||||||
// - handle collision logic
|
// - handle collision logic
|
||||||
auto &collisions = GetEntityCollisions();
|
auto &collisions = GetEntityCollisions();
|
||||||
// LOG_DEBUG("number of collisions: ", collisions.size());
|
// LOG_DEBUG("number of collisions: ", collisions.size());
|
||||||
@ -639,6 +667,7 @@ public:
|
|||||||
for (auto &entity : m_Entities) {
|
for (auto &entity : m_Entities) {
|
||||||
entity->Update(time_delta);
|
entity->Update(time_delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CollisionGameLogic(Entity &A, Entity &B) {
|
void CollisionGameLogic(Entity &A, Entity &B) {
|
||||||
@ -728,8 +757,8 @@ public:
|
|||||||
// draw the map (terrain tiles)
|
// draw the map (terrain tiles)
|
||||||
const Map &map = m_Game->GetMap();
|
const Map &map = m_Game->GetMap();
|
||||||
const auto &tiles = map.GetMapTiles();
|
const auto &tiles = map.GetMapTiles();
|
||||||
for (int row = 0; row < tiles.size(); row++) {
|
for (size_t row = 0; row < tiles.size(); row++) {
|
||||||
for (int col = 0; col < tiles[row].size(); col++) {
|
for (size_t col = 0; col < tiles[row].size(); col++) {
|
||||||
// LOG_DEBUG("Drawing rect (", row, ", ", col, ")");
|
// LOG_DEBUG("Drawing rect (", row, ", ", col, ")");
|
||||||
m_Window->DrawRect(
|
m_Window->DrawRect(
|
||||||
map.TileToWorld(TilePos{row, col}),
|
map.TileToWorld(TilePos{row, col}),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user