void Sprite::DrawClipped(Vector2 position, RectangleWH clipRect, bool flipHorizontally, Color color) { if (GetSpriteSheetImage() == NULL) { return; } // Adjust the clip rect to account for the fact that we've eliminated blank space // that was around the source image. if (spriteDrawOffset.GetX() > 0 || spriteDrawOffset.GetY() > 0) { Vector2 oldClipRectPosition(clipRect.GetX(), clipRect.GetY()); clipRect.SetX(clipRect.GetX() - spriteDrawOffset.GetX()); clipRect.SetY(clipRect.GetY() - spriteDrawOffset.GetY()); position += Vector2(clipRect.GetX(), clipRect.GetY()) - oldClipRectPosition; if (clipRect.GetX() + clipRect.GetWidth() > GetWidth()) { clipRect.SetWidth(GetWidth() - clipRect.GetX()); } if (clipRect.GetY() + clipRect.GetHeight() > GetHeight()) { clipRect.SetHeight(GetHeight() - clipRect.GetY()); } } Vector2 pixelSnappedPosition = Vector2( (int)(position.GetX() + (originalSize.GetX() > 0 && flipHorizontally ? originalSize.GetX() - GetWidth() - spriteDrawOffset.GetX() : spriteDrawOffset.GetX())), (int)(position.GetY() + spriteDrawOffset.GetY())); GetSpriteSheetImage()->Draw( pixelSnappedPosition, RectangleWH( spriteClipRect.GetX() + clipRect.GetX(), spriteClipRect.GetY() + clipRect.GetY(), clipRect.GetWidth(), clipRect.GetHeight()), flipHorizontally, false /* flipVertically */, 1.0, color); }
bool MouseHelper::IsMouseInRect(RectangleWH rectangle) { return previousMousePosition.GetX() >= rectangle.GetX() && previousMousePosition.GetX() <= rectangle.GetX() + rectangle.GetWidth() && previousMousePosition.GetY() >= rectangle.GetY() && previousMousePosition.GetY() <= rectangle.GetY() + rectangle.GetHeight(); }
Vector2 Crowd::GetCenterPoint() { if (IsInteractionPointExact()) { return interactionLocation; } RectangleWH clickPolygonBoundingBox = clickPolygon.GetBoundingBox(); return Vector2( clickPolygonBoundingBox.GetX() + clickPolygonBoundingBox.GetWidth() / 2, clickPolygonBoundingBox.GetY() + clickPolygonBoundingBox.GetHeight() / 2); }
RectangleWH FieldCharacter::GetBoundsForInteraction() { if (IsInteractionPointExact()) { return RectangleWH(interactionLocation.GetX(), interactionLocation.GetY(), 1, 1); } RectangleWH hitboxBoundingBox = GetHitBox()->GetBoundingBox(); return RectangleWH( GetVectorAnchorPosition().GetX() + hitboxBoundingBox.GetX(), GetVectorAnchorPosition().GetY() + hitboxBoundingBox.GetY(), hitboxBoundingBox.GetWidth(), hitboxBoundingBox.GetHeight()); }
void Sprite::DrawClipped(Vector2 position, RectangleWH clipRect, bool flipHorizontally, Color color) { if (GetSpriteSheetImage() == NULL) { return; } Vector2 pixelSnappedPosition = Vector2((int)position.GetX(), (int)position.GetY()); GetSpriteSheetImage()->Draw( pixelSnappedPosition, RectangleWH( spriteClipRect.GetX() + clipRect.GetX(), spriteClipRect.GetY() + clipRect.GetY(), clipRect.GetWidth(), clipRect.GetHeight()), flipHorizontally, false /* flipVertically */, 1.0, color); }
void MLIFont::DrawInternal(const string &s, Vector2 position, Color color, double scale, RectangleWH clipRect) { EnsureUIThread(); // If we're trying to draw an empty string, we can just return - // we're not gonna draw anything anyhow. if (s.length() == 0) { return; } CheckScale(); double x = position.GetX(); double y = position.GetY(); for (string::const_iterator it = s.begin(); it < s.end();) { uint32_t c = 0; if (!GetNextFromStringIterator(it, s.end(), &c)) { break; } Image *pGlyphImage = cache[c]; if (pGlyphImage == NULL) { continue; } RectangleWH characterClipRect(0, 0, pGlyphImage->width / GetFontScale(), pGlyphImage->height / GetFontScale()); RectangleWH originalCharacterClipRect = characterClipRect; if (clipRect.GetWidth() < 0 || clipRect.GetX() < originalCharacterClipRect.GetWidth()) { if (clipRect.GetWidth() >= 0) { if (clipRect.GetX() > 0) { characterClipRect.SetX(originalCharacterClipRect.GetX() + clipRect.GetX()); characterClipRect.SetWidth(originalCharacterClipRect.GetWidth() - clipRect.GetX()); } if (clipRect.GetWidth() < characterClipRect.GetWidth()) { characterClipRect.SetWidth(clipRect.GetWidth()); } if (clipRect.GetY() > 0) { characterClipRect.SetY(min(originalCharacterClipRect.GetY() + clipRect.GetY(), originalCharacterClipRect.GetY() + originalCharacterClipRect.GetHeight())); characterClipRect.SetHeight(originalCharacterClipRect.GetHeight() - (characterClipRect.GetY() - originalCharacterClipRect.GetY())); } if (clipRect.GetHeight() < characterClipRect.GetHeight()) { characterClipRect.SetHeight(clipRect.GetHeight()); } } if (characterClipRect.GetWidth() > 0 && characterClipRect.GetHeight() > 0) { characterClipRect.SetHeight(characterClipRect.GetHeight() * GetFontScale()); characterClipRect.SetWidth(characterClipRect.GetWidth() * GetFontScale()); pGlyphImage->Draw(Vector2(x, y), characterClipRect, false, false, scale, scale, color); } } double deltaX = pGlyphImage->width; if (it < s.end()) { uint32_t c2 = 0; if (PeekNextFromStringIterator(it, s.end(), &c2)) { deltaX = GetKernedWidth(c, c2); } } x += deltaX / GetFontScale(); } }