void TileView::eventOccurred(Event *e) { if (e->type() == EVENT_KEY_DOWN) { switch (e->keyboard().KeyCode) { case SDLK_F1: debugHotkeyMode = !debugHotkeyMode; LogWarning("DEBUG MODE %s", debugHotkeyMode); break; case SDLK_UP: scrollUpKB = true; break; case SDLK_DOWN: scrollDownKB = true; break; case SDLK_LEFT: scrollLeftKB = true; break; case SDLK_RIGHT: scrollRightKB = true; break; case SDLK_s: if (selectedTilePosition.y < (map.size.y - 1)) selectedTilePosition.y++; break; case SDLK_w: if (selectedTilePosition.y > 0) selectedTilePosition.y--; break; case SDLK_a: if (selectedTilePosition.x > 0) selectedTilePosition.x--; break; case SDLK_d: if (selectedTilePosition.x < (map.size.x - 1)) selectedTilePosition.x++; break; case SDLK_r: if (selectedTilePosition.z < (map.size.z - 1)) selectedTilePosition.z++; break; case SDLK_f: if (selectedTilePosition.z > 0) selectedTilePosition.z--; break; } } else if (e->type() == EVENT_KEY_UP) { switch (e->keyboard().KeyCode) { case SDLK_UP: scrollUpKB = false; break; case SDLK_DOWN: scrollDownKB = false; break; case SDLK_LEFT: scrollLeftKB = false; break; case SDLK_RIGHT: scrollRightKB = false; break; } } else if (e->type() == EVENT_FINGER_MOVE) { // FIXME: Review this code for sanity if (e->finger().IsPrimary) { Vec3<float> deltaPos(e->finger().DeltaX, e->finger().DeltaY, 0); if (this->viewMode == TileViewMode::Isometric) { deltaPos.x /= isoTileSize.x; deltaPos.y /= isoTileSize.y; Vec3<float> isoDelta(deltaPos.x + deltaPos.y, deltaPos.y - deltaPos.x, 0); deltaPos = isoDelta; } else { deltaPos.x /= stratTileSize.x; deltaPos.y /= stratTileSize.y; } Vec3<float> newPos = this->centerPos - deltaPos; this->setScreenCenterTile(newPos); } } else if (e->type() == EVENT_MOUSE_MOVE) { scrollLeftM = autoScroll && e->mouse().X < MOUSE_SCROLL_MARGIN; scrollRightM = autoScroll && e->mouse().X >= dpySize.x - MOUSE_SCROLL_MARGIN; scrollUpM = autoScroll && e->mouse().Y < MOUSE_SCROLL_MARGIN; scrollDownM = autoScroll && e->mouse().Y >= dpySize.y - MOUSE_SCROLL_MARGIN; } }
void BattleTileView::eventOccurred(Event *e) { if (e->type() == EVENT_KEY_DOWN) { switch (e->keyboard().KeyCode) { case SDLK_UP: scrollUp = true; break; case SDLK_DOWN: scrollDown = true; break; case SDLK_LEFT: scrollLeft = true; break; case SDLK_RIGHT: scrollRight = true; break; case SDLK_s: if (selectedTilePosition.y < (map.size.y - 1)) selectedTilePosition.y++; break; case SDLK_w: if (selectedTilePosition.y > 0) selectedTilePosition.y--; break; case SDLK_a: if (selectedTilePosition.x > 0) selectedTilePosition.x--; break; case SDLK_d: if (selectedTilePosition.x < (map.size.x - 1)) selectedTilePosition.x++; break; case SDLK_r: if (selectedTilePosition.z < (map.size.z - 1)) selectedTilePosition.z++; break; case SDLK_f: if (selectedTilePosition.z > 0) selectedTilePosition.z--; break; case SDLK_1: hideGround = !hideGround; break; case SDLK_2: hideLeftWall = !hideLeftWall; break; case SDLK_3: hideRightWall = !hideRightWall; break; case SDLK_4: hideScenery = !hideScenery; break; case SDLK_F6: { LogWarning("Writing voxel view to tileviewvoxels.png"); auto imageOffset = -this->getScreenOffset(); auto img = std::dynamic_pointer_cast<RGBImage>( this->map.dumpVoxelView({imageOffset, imageOffset + dpySize}, *this)); fw().data->writeImage("tileviewvoxels.png", img); } } } else if (e->type() == EVENT_KEY_UP) { switch (e->keyboard().KeyCode) { case SDLK_UP: scrollUp = false; break; case SDLK_DOWN: scrollDown = false; break; case SDLK_LEFT: scrollLeft = false; break; case SDLK_RIGHT: scrollRight = false; break; } } else if (e->type() == EVENT_FINGER_MOVE) { // FIXME: Review this code for sanity if (e->finger().IsPrimary) { Vec3<float> deltaPos(e->finger().DeltaX, e->finger().DeltaY, 0); if (this->viewMode == TileViewMode::Isometric) { deltaPos.x /= isoTileSize.x; deltaPos.y /= isoTileSize.y; Vec3<float> isoDelta(deltaPos.x + deltaPos.y, deltaPos.y - deltaPos.x, 0); deltaPos = isoDelta; } else { deltaPos.x /= stratTileSize.x; deltaPos.y /= stratTileSize.y; } Vec3<float> newPos = this->centerPos - deltaPos; this->setScreenCenterTile(newPos); } } }