void RoomContainer::MouseOver(uint16 x, uint16 y) { const uint16 kScrollingStep = 64; uint16 horizBorderSize = 35; uint32 vertBorderSize = 40; // TODO: Less hardcoding of the window number Window* window = GUI::Get()->GetWindow(1); if (window != NULL) { horizBorderSize += window->Width(); } sint16 scrollByX = 0; sint16 scrollByY = 0; if (x <= horizBorderSize) scrollByX = -kScrollingStep; else if (x >= fViewPort.w - horizBorderSize) scrollByX = kScrollingStep; if (y <= vertBorderSize) scrollByY = -kScrollingStep; else if (y >= fViewPort.h - vertBorderSize) scrollByY = kScrollingStep; IE::point point = { int16(x), int16(y) }; ConvertToArea(point); _UpdateCursor(x, y, scrollByX, scrollByY); // TODO: This screams for improvements if (fWed != NULL) { int32 cursor = -1; fMouseOverObject = _ObjectAtPoint(point, cursor); if (cursor != -1) GUI::Get()->SetCursor(cursor); } else if (fWorldMap != NULL) { for (uint32 i = 0; i < fWorldMap->CountAreaEntries(); i++) { AreaEntry& area = fWorldMap->AreaEntryAt(i); GFX::rect areaRect = area.Rect(); if (rect_contains(areaRect, point)) { ConvertFromArea(areaRect); ConvertToScreen(areaRect); //char* toolTip = area.TooltipName(); //RenderString(toolTip, GraphicsEngine::Get()->ScreenSurface()); //free(toolTip); GraphicsEngine::Get()->ScreenBitmap()->StrokeRect(areaRect, 600); break; } } } IE::point newAreaOffset = fAreaOffset; newAreaOffset.x += scrollByX; newAreaOffset.y += scrollByY; SetAreaOffset(newAreaOffset); }
void RoomContainer::CenterArea(const IE::point& point) { IE::point destPoint; destPoint.x = point.x - fViewPort.w / 2; destPoint.y = point.y - fViewPort.y / 2; SetAreaOffset(destPoint); }
void RoomBase::SetRelativeAreaOffset(int16 xDelta, int16 yDelta) { IE::point newOffset = fAreaOffset; newOffset.x += xDelta; newOffset.y += yDelta; SetAreaOffset(newOffset); }
void RoomContainer::SetRelativeAreaOffset(IE::point relativePoint) { IE::point newOffset = fAreaOffset; newOffset.x += relativePoint.x; newOffset.y += relativePoint.y; SetAreaOffset(newOffset); }
void RoomBase::SetAreaOffsetCenter(const IE::point& point) { IE::point destPoint = LeftToppedOffset(point); SetAreaOffset(destPoint); }