Fixed inverted camera, and added RegionPager::Prune()

This commit is contained in:
Kayne Ruse
2013-10-17 22:18:42 +11:00
parent 88aee0f4f5
commit 0bfd916df4
3 changed files with 30 additions and 18 deletions
+20 -4
View File
@@ -90,8 +90,8 @@ void RegionPager::DrawTo(SDL_Surface* const dest, std::list<TileSheet>* const sh
for (auto& regionIter : regionList) { for (auto& regionIter : regionList) {
//draw the region's location //draw the region's location
SDL_Rect box = { SDL_Rect box = {
Sint16(regionIter.GetX() + camX), Sint16(regionIter.GetX() - camX),
Sint16(regionIter.GetY() + camY), Sint16(regionIter.GetY() - camY),
Uint16(regionIter.GetWidth()), Uint16(regionIter.GetWidth()),
Uint16(regionIter.GetHeight()) Uint16(regionIter.GetHeight())
}; };
@@ -103,8 +103,8 @@ void RegionPager::DrawTo(SDL_Surface* const dest, std::list<TileSheet>* const sh
if (sheetIter.InRange(tileIter.tileIndex)) { if (sheetIter.InRange(tileIter.tileIndex)) {
sheetIter.DrawTo( sheetIter.DrawTo(
dest, dest,
tileIter.x + regionIter.GetX() + camX, tileIter.x + regionIter.GetX() - camX,
tileIter.y + regionIter.GetY() + camY, tileIter.y + regionIter.GetY() - camY,
tileIter.tileIndex tileIter.tileIndex
); );
//skip to the next tile //skip to the next tile
@@ -120,3 +120,19 @@ void RegionPager::DrawTo(SDL_Surface* const dest, std::list<TileSheet>* const sh
} }
} }
} }
void RegionPager::Prune(int left, int top, int right, int bottom) {
std::list<Region>::iterator it = regionList.begin();
while(it != regionList.end()) {
if (it->GetX() >= right || it->GetY() >= bottom || it->GetX() + it->GetWidth() < left || it->GetY() + it->GetHeight() < top) {
if (onDelete) {
onDelete(&(*it));
}
regionList.erase(it);
it = regionList.begin();
continue;
}
it++;
}
}
+2 -2
View File
@@ -47,8 +47,8 @@ public:
void SetOnNew(regionCallback_t f) { onNew = f; } void SetOnNew(regionCallback_t f) { onNew = f; }
void SetOnDelete(regionCallback_t f) { onDelete = f; } void SetOnDelete(regionCallback_t f) { onDelete = f; }
//TODO //params: Absolute values
//void Prune(int camX, int camY, int screenW, int screenH); void Prune(int left, int top, int right, int bottom);
//accessors and mutators //accessors and mutators
int SetWidth(int i) { return regionWidth = i; } int SetWidth(int i) { return regionWidth = i; }
+7 -11
View File
@@ -88,7 +88,7 @@ void EditorScene::FrameStart() {
} }
void EditorScene::Update(double delta) { void EditorScene::Update(double delta) {
// pager.Prune(camera.x, camera.y, camera.x + GetScreen()->w, camera.y + GetScreen()->h);
} }
void EditorScene::FrameEnd() { void EditorScene::FrameEnd() {
@@ -135,8 +135,8 @@ void EditorScene::MouseMotion(SDL_MouseMotionEvent const& motion) {
menuBar.MouseMotion(motion); menuBar.MouseMotion(motion);
if (motion.state & SDL_BUTTON_RMASK) { if (motion.state & SDL_BUTTON_RMASK) {
camera.x += motion.xrel; camera.x -= motion.xrel;
camera.y += motion.yrel; camera.y -= motion.yrel;
} }
} }
@@ -145,14 +145,14 @@ void EditorScene::MouseButtonDown(SDL_MouseButtonEvent const& button) {
if (button.button == SDL_BUTTON_LEFT && button.y >= buttonImage.GetClipH()) { if (button.button == SDL_BUTTON_LEFT && button.y >= buttonImage.GetClipH()) {
Region* ptr = pager.GetRegion( Region* ptr = pager.GetRegion(
snapToBase(pager.GetWidth(), button.x - camera.x), snapToBase(pager.GetWidth(), button.x + camera.x),
snapToBase(pager.GetHeight(), button.y - camera.y) snapToBase(pager.GetHeight(), button.y + camera.y)
); );
//TODO: find the tileset matching this value, and then use it's width & height for param 4 & 5 //TODO: find the tileset matching this value, and then use it's width & height for param 4 & 5
ptr->NewTileA({ ptr->NewTileA({
snapToBase(32, button.x - camera.x), //x snapToBase(32, button.x + camera.x), //x
snapToBase(32, button.y - camera.y), //y snapToBase(32, button.y + camera.y), //y
0, //depth 0, //depth
32, //width (from tileset) 32, //width (from tileset)
32, //height (from tileset) 32, //height (from tileset)
@@ -165,10 +165,6 @@ void EditorScene::MouseButtonUp(SDL_MouseButtonEvent const& button) {
int entry, drop; int entry, drop;
menuBar.MouseButtonUp(button, &entry, &drop); menuBar.MouseButtonUp(button, &entry, &drop);
#ifdef DEBUG
cout << "Menu Bar: (" << entry << "," << drop << ")" << endl;
#endif
//manage input from the menu bar //manage input from the menu bar
switch(entry) { switch(entry) {
case 0: //File case 0: //File