Added region highlighting

This commit is contained in:
Kayne Ruse
2013-10-06 19:22:26 +11:00
parent 29928c0b92
commit 719c8f49a6
4 changed files with 51 additions and 22 deletions
+24 -21
View File
@@ -23,6 +23,7 @@
#include "utility.hpp"
#include <stdexcept>
#include <iostream>
#include <cstdio>
@@ -85,7 +86,7 @@ void EditorScene::FrameEnd() {
}
void EditorScene::Render(SDL_Surface* const screen) {
pager.DrawTo(screen, &sheetList, 0, 0);
pager.DrawTo(screen, &sheetList, camera.x, camera.y);
}
//-------------------------
@@ -93,34 +94,36 @@ void EditorScene::Render(SDL_Surface* const screen) {
//-------------------------
void EditorScene::MouseMotion(SDL_MouseMotionEvent const& motion) {
//
if (motion.state & SDL_BUTTON_LMASK) {
//
}
else if (motion.state & SDL_BUTTON_RMASK) {
camera.x += motion.xrel;
camera.y += motion.yrel;
}
}
void EditorScene::MouseButtonDown(SDL_MouseButtonEvent const& button) {
switch(button.button) {
case SDL_BUTTON_LEFT: {
Region* ptr = pager.GetRegion(
snapToBase(pager.GetWidth(), button.x),
snapToBase(pager.GetHeight(), button.y)
);
Region* ptr = pager.GetRegion(
snapToBase(pager.GetWidth(), button.x - camera.x),
snapToBase(pager.GetHeight(), button.y - camera.y)
);
cout << "New Tile: " <<
ptr->NewTileA({
snapToBase(32, button.x),
snapToBase(32, button.y),
0,
32,
32,
incrementer
})
<< endl;
;
ptr->NewTileA({
snapToBase(32, button.x - camera.x),
snapToBase(32, button.y - camera.y),
0,
32,
32,
incrementer
});
if (++incrementer >= TileSheet::GetRangeEnd()) {
incrementer = 0;
}
if (++incrementer >= TileSheet::GetRangeEnd()) {
incrementer = 0;
}
}
}
}
+4
View File
@@ -53,6 +53,10 @@ protected:
RegionPager pager;
std::list<TileSheet> sheetList;
struct {
int x = 0, y = 0;
} camera;
//debugging
int incrementer = 0;
};
+13 -1
View File
@@ -43,7 +43,12 @@ Region::Region(int _x, int _y, int _w, int _h):
int Region::NewTileR(Tile const& tile) {
//return 1 for overwrite, 0 for insert
if (!InBoundsR(tile.x, tile.y)) {
throw(std::runtime_error("New tile location out of bounds"));
std::ostringstream os;
os << "New tile location out of bounds: " <<
"(" << x << "," << y << ")->" <<
"(" << tile.x << "," << tile.y << ")"
;
throw(std::runtime_error(os.str()));
}
int ret = tiles.erase(tile);
@@ -83,6 +88,13 @@ Tile Region::GetTileR(int tx, int ty, int minDepth) {
int Region::DeleteTileR(Tile const& tile) {
if (!InBoundsR(tile.x, tile.y)) {
throw(std::runtime_error("Deleted tile location out of bounds"));
std::ostringstream os;
os << "Deleted tile location out of bounds: " <<
"(" << x << "," << y << ")->" <<
"(" << tile.x << "," << tile.y << ")"
;
throw(std::runtime_error(os.str()));
}
//sentinel/error code
if (tile.tileIndex == -1) {
+10
View File
@@ -85,6 +85,16 @@ void RegionPager::DrawTo(SDL_Surface* const dest, std::list<TileSheet>* const sh
*/
for (auto& regionIter : regionList) {
//draw the region's location
SDL_Rect box = {
Sint16(regionIter.GetX() + camX),
Sint16(regionIter.GetY() + camY),
Uint16(regionIter.GetWidth()),
Uint16(regionIter.GetHeight())
};
SDL_FillRect(dest, &box, SDL_MapRGB(dest->format, 10, 10, 20));
//draw each tile
for (auto& tileIter : *regionIter.GetTiles()) {
for (auto& sheetIter : *sheetList) {
if (sheetIter.InRange(tileIter.tileIndex)) {