Some more terrain painting
This commit is contained in:
parent
b6d24da982
commit
1779fde397
Binary file not shown.
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 3.9 KiB |
@ -60,7 +60,7 @@ Sprite &Player::GetSprite() {
|
|||||||
|
|
||||||
void Player::LoadResources() {
|
void Player::LoadResources() {
|
||||||
m_Sprite =
|
m_Sprite =
|
||||||
std::make_unique<Sprite>("resources/player.png", WorldPos{38.0f, 46.0f});
|
std::make_unique<Sprite>("resources/player.png", WorldPos{19.0f, 23.0f});
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Sprite> Player::m_Sprite;
|
std::unique_ptr<Sprite> Player::m_Sprite;
|
||||||
|
@ -104,12 +104,29 @@ void Map::PaintLine(TilePos start_tile, TilePos stop_tile, double width, TileTyp
|
|||||||
for (double t = 0; t < line_length; t += 1.0) {
|
for (double t = 0; t < line_length; t += 1.0) {
|
||||||
for (double ortho_t = 0; ortho_t < width; ortho_t += 0.1) {
|
for (double ortho_t = 0; ortho_t < width; ortho_t += 0.1) {
|
||||||
auto tile_pos = start + step * t + ortho * ortho_t;
|
auto tile_pos = start + step * t + ortho * ortho_t;
|
||||||
|
if (IsTilePosValid(tile_pos)) {
|
||||||
size_t row = static_cast<size_t>(tile_pos.x);
|
size_t row = static_cast<size_t>(tile_pos.x);
|
||||||
size_t col = static_cast<size_t>(tile_pos.y);
|
size_t col = static_cast<size_t>(tile_pos.y);
|
||||||
if (IsTilePosValid(tile_pos)) {
|
|
||||||
m_Tiles[row][col] = &tile_types.at(tile_type);
|
m_Tiles[row][col] = &tile_types.at(tile_type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Map::PaintRectangle(TilePos first_corner, TilePos second_corner, TileType tile_type)
|
||||||
|
{
|
||||||
|
std::initializer_list<int> xvals = {first_corner.x, second_corner.x};
|
||||||
|
std::initializer_list<int> yvals = {first_corner.y, second_corner.y};
|
||||||
|
for (int x = std::min(xvals); x < std::max(xvals); x++) {
|
||||||
|
for (int y = std::min(yvals); y < std::max(yvals); y++) {
|
||||||
|
TilePos tile_pos{x,y};
|
||||||
|
LOG_DEBUG("tile_pos = ", tile_pos);
|
||||||
|
if (IsTilePosValid(tile_pos)) {
|
||||||
|
size_t row = static_cast<size_t>(tile_pos.x);
|
||||||
|
size_t col = static_cast<size_t>(tile_pos.y);
|
||||||
|
m_Tiles[row][col] = &tile_types.at(tile_type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -35,6 +35,7 @@ public:
|
|||||||
// methods for drawing on the map
|
// methods for drawing on the map
|
||||||
void PaintCircle(TilePos center, unsigned radius, TileType tile_type);
|
void PaintCircle(TilePos center, unsigned radius, TileType tile_type);
|
||||||
void PaintLine(TilePos start, TilePos stop, double width, TileType tile_type);
|
void PaintLine(TilePos start, TilePos stop, double width, TileType tile_type);
|
||||||
|
void PaintRectangle(TilePos first_corner, TilePos second_corner, TileType tile_type);
|
||||||
|
|
||||||
std::vector<TilePos> GetNeighbors(TilePos center) const;
|
std::vector<TilePos> GetNeighbors(TilePos center) const;
|
||||||
float GetCost(TilePos pos) const { return GetTileAt(pos)->cost; }
|
float GetCost(TilePos pos) const { return GetTileAt(pos)->cost; }
|
||||||
|
@ -29,18 +29,36 @@ void PathFindingDemo::AddEntity(std::shared_ptr<Entity> e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PathFindingDemo::CreateMap() {
|
void PathFindingDemo::CreateMap() {
|
||||||
// create the map
|
// lake
|
||||||
m_Map.PaintCircle(TilePos{50, 50}, 10, TileType::WATER);
|
m_Map.PaintCircle(TilePos{50, 50}, 10, TileType::WATER);
|
||||||
m_Map.PaintCircle(TilePos{75, 100}, 50, TileType::WATER);
|
m_Map.PaintCircle(TilePos{75, 100}, 50, TileType::WATER);
|
||||||
|
// river
|
||||||
m_Map.PaintLine(TilePos{0,0}, TilePos{100,100}, 3.0, TileType::WATER);
|
m_Map.PaintLine(TilePos{0,0}, TilePos{100,100}, 3.0, TileType::WATER);
|
||||||
|
// road
|
||||||
m_Map.PaintLine(TilePos{17,6}, TilePos{100,6}, 5.0, TileType::ROAD);
|
m_Map.PaintLine(TilePos{17,6}, TilePos{100,6}, 5.0, TileType::ROAD);
|
||||||
m_Map.PaintLine(TilePos{10,17}, TilePos{10,100}, 5.0, TileType::ROAD);
|
m_Map.PaintLine(TilePos{10,17}, TilePos{10,100}, 5.0, TileType::ROAD);
|
||||||
m_Map.PaintLine(TilePos{20,10}, TilePos{10,20}, 5.0, TileType::ROAD);
|
m_Map.PaintLine(TilePos{20,10}, TilePos{10,20}, 5.0, TileType::ROAD);
|
||||||
|
// bridges
|
||||||
|
m_Map.PaintLine(TilePos{50,75}, TilePos{70,75}, 5.0, TileType::WOOD);
|
||||||
|
m_Map.PaintLine(TilePos{95,26}, TilePos{95,60}, 5.0, TileType::WOOD);
|
||||||
|
// island
|
||||||
|
m_Map.PaintRectangle(TilePos{70, 60}, TilePos{100,100}, TileType::GRASS);
|
||||||
|
// walls
|
||||||
|
m_Map.PaintLine(TilePos{71,60}, TilePos{90,60}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{77,67}, TilePos{100,67}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{71,60}, TilePos{71,75}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{72,73}, TilePos{95,73}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{95,73}, TilePos{95,90}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{71,81}, TilePos{71,100}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{72,81}, TilePos{90,81}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{89,87}, TilePos{89,100}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{84,81}, TilePos{84,96}, 1.0, TileType::WALL);
|
||||||
|
m_Map.PaintLine(TilePos{78,87}, TilePos{78,100}, 1.0, TileType::WALL);
|
||||||
|
|
||||||
// add player
|
// add player
|
||||||
m_Entities.clear();
|
m_Entities.clear();
|
||||||
m_Player = std::make_shared<Player>();
|
m_Player = std::make_shared<Player>();
|
||||||
m_Player->SetPosition(WorldPos{250.0f, 200.0f});
|
m_Player->SetPosition(m_Map.TileToWorld(TilePos{25, 20}));
|
||||||
m_Entities.push_back(m_Player);
|
m_Entities.push_back(m_Player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
// and we don't access tile_types that often, so it should be ok
|
// and we don't access tile_types that often, so it should be ok
|
||||||
const std::unordered_map<TileType, Tile> tile_types = {
|
const std::unordered_map<TileType, Tile> tile_types = {
|
||||||
{ TileType::GRASS, Tile{1.0, 0, 200, 0, 255}},
|
{ TileType::GRASS, Tile{1.0, 0, 200, 0, 255}},
|
||||||
{ TileType::MUD, Tile{2.0, 100, 100, 100, 255}},
|
{ TileType::WOOD, Tile{1.0, 132, 68, 0, 255}},
|
||||||
{ TileType::ROAD, Tile{0.5, 20, 20, 20, 255}},
|
{ TileType::ROAD, Tile{0.5, 20, 20, 20, 255}},
|
||||||
{ TileType::WATER, Tile{10.0, 0, 50, 200, 255}},
|
{ TileType::WATER, Tile{10.0, 0, 50, 200, 255}},
|
||||||
|
{ TileType::WALL, Tile{1000.0, 144, 33, 0, 255}},
|
||||||
};
|
};
|
||||||
|
@ -13,9 +13,10 @@ struct Tile {
|
|||||||
|
|
||||||
enum class TileType {
|
enum class TileType {
|
||||||
GRASS,
|
GRASS,
|
||||||
MUD,
|
WOOD,
|
||||||
ROAD,
|
ROAD,
|
||||||
WATER,
|
WATER,
|
||||||
|
WALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const std::unordered_map<TileType, Tile> tile_types;
|
extern const std::unordered_map<TileType, Tile> tile_types;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user