Draw tiles.
This commit is contained in:
parent
a6eadb9c30
commit
a9630341c7
1 changed files with 36 additions and 1 deletions
|
@ -40,6 +40,7 @@ namespace {
|
||||||
void addLayer ( dk::Tyler<2>& parTiler, LayerWithData<dkh::AsciiMapSource, int>& parLayerInfo, const char* parPath );
|
void addLayer ( dk::Tyler<2>& parTiler, LayerWithData<dkh::AsciiMapSource, int>& parLayerInfo, const char* parPath );
|
||||||
void printViewport ( const dk::Viewport<2>& parView, const dk::Layer<int, 2>& parLayer );
|
void printViewport ( const dk::Viewport<2>& parView, const dk::Layer<int, 2>& parLayer );
|
||||||
std::pair<int, std::string> GetRenderingDriver ( void );
|
std::pair<int, std::string> GetRenderingDriver ( void );
|
||||||
|
void draw_tiles ( SDL_Renderer* parRenderer, SDL_Texture* parTile0, SDL_Texture* parTile1, const dk::Viewport<2>& parView, const dk::Layer<int, 2>& parLayer, int parYOffs );
|
||||||
} //unnamed namespace
|
} //unnamed namespace
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
@ -54,7 +55,7 @@ int main() {
|
||||||
printWelcome();
|
printWelcome();
|
||||||
|
|
||||||
SDLWindowUPtr sdl_window(
|
SDLWindowUPtr sdl_window(
|
||||||
SDL_CreateWindow("DoorKeeper test", 100, 100, 320, 240, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE),
|
SDL_CreateWindow("DoorKeeper test", 100, 100, 128 * 6, 128 * 4, SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE),
|
||||||
&SDL_DestroyWindow
|
&SDL_DestroyWindow
|
||||||
);
|
);
|
||||||
const auto rendererDriver = GetRenderingDriver();
|
const auto rendererDriver = GetRenderingDriver();
|
||||||
|
@ -88,8 +89,18 @@ int main() {
|
||||||
|
|
||||||
//Main loop
|
//Main loop
|
||||||
bool running = true;
|
bool running = true;
|
||||||
|
int y = 0;
|
||||||
|
dk::Viewport<2> viewport(tiler, coords2(6, 4), coords2(0));
|
||||||
do {
|
do {
|
||||||
|
SDL_RenderClear(sdl_renderer.get());
|
||||||
|
viewport.setFrom(coords2(0, y / 128));
|
||||||
|
draw_tiles(sdl_renderer.get(), tile_0.get(), tile_1.get(), viewport, *bottomLayer.layer, -(y % 128));
|
||||||
|
++y;
|
||||||
|
if (128 * bottomLayer.layer->mapSize().y() == y)
|
||||||
|
y = 0;
|
||||||
|
SDL_RenderPresent(sdl_renderer.get());
|
||||||
|
|
||||||
|
SDL_Delay(1000 / 60);
|
||||||
SDL_Event eve;
|
SDL_Event eve;
|
||||||
while (SDL_PollEvent(&eve)) {
|
while (SDL_PollEvent(&eve)) {
|
||||||
switch (eve.type) {
|
switch (eve.type) {
|
||||||
|
@ -198,4 +209,28 @@ namespace {
|
||||||
|
|
||||||
return RetPairType(-1, "default");
|
return RetPairType(-1, "default");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void draw_tiles (SDL_Renderer* parRenderer, SDL_Texture* parTile0, SDL_Texture* parTile1, const dk::Viewport<2>& parView, const dk::Layer<int, 2>& parLayer, int parYOffs) {
|
||||||
|
SDL_Rect rect_src;
|
||||||
|
rect_src.x = rect_src.y = 0;
|
||||||
|
SDL_QueryTexture(parTile0, nullptr, nullptr, &rect_src.w, &rect_src.h);
|
||||||
|
|
||||||
|
int col = 0;
|
||||||
|
int row = 0;
|
||||||
|
const auto tilecount = parView.count();
|
||||||
|
for (auto itTile = parView.begin(parLayer), itTileEND = parView.end(parLayer); itTile != itTileEND; ++itTile) {
|
||||||
|
if (col == tilecount.x()) {
|
||||||
|
col = 0;
|
||||||
|
++row;
|
||||||
|
}
|
||||||
|
SDL_Rect rect_dst;
|
||||||
|
rect_dst.x = col * rect_src.w;
|
||||||
|
rect_dst.y = row * rect_src.h + parYOffs;
|
||||||
|
rect_dst.w = rect_src.w;
|
||||||
|
rect_dst.h = rect_src.h;
|
||||||
|
SDL_Texture* const curr_texture = (1 == *itTile ? parTile1 : parTile0);
|
||||||
|
SDL_RenderCopy(parRenderer, curr_texture, &rect_src, &rect_dst);
|
||||||
|
++col;
|
||||||
|
}
|
||||||
|
}
|
||||||
} //unnamed namespace
|
} //unnamed namespace
|
||||||
|
|
Loading…
Reference in a new issue