Fixed inverted camera, and added RegionPager::Prune()
This commit is contained in:
+20
-4
@@ -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++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user