private RectF AddPosition(RectF source, Vector2DF d) { return new RectF(source.X + d.X, source.Y + d.Y, source.Width, source.Height); }
/// <summary> /// カメラで映す範囲を強制的に変更します。 /// </summary> /// <param name="initialCameraSrc">カメラが映す範囲。</param> /// <param name="initialSeeingArea">注目する範囲。</param> public void SetScrollPosition(RectI initialCameraSrc, RectF initialSeeingArea) { actualCameraPosition_ = initialCameraSrc.Position.To2DF(); camera_.Src = initialCameraSrc; ReviseCamera(initialSeeingArea); }
private void ReviseCamera(RectF rect) { var offset = new Vector2DF(); var innerBindingRect = new RectF( actualCameraPosition_.X + BindingAreaRange.X, actualCameraPosition_.Y + BindingAreaRange.Y, BindingAreaRange.Width, BindingAreaRange.Height); offset += GetJut(rect, innerBindingRect); var outerBindingRect = new RectF( BoundaryStartingPosition.X, BoundaryStartingPosition.Y, BoundaryEndingPosition.X - BoundaryStartingPosition.X, BoundaryEndingPosition.Y - BoundaryStartingPosition.Y); offset -= GetJut(camera_.Src.ToF().WithPosition(actualCameraPosition_ + offset), outerBindingRect); if (offset != new Vector2DF(0, 0)) { actualCameraPosition_ = actualCameraPosition_ + offset; scrollDisposable_?.Dispose(); scrollDisposable_ = getCameraMoving_(actualCameraPosition_) .Subscribe(r => camera_.Src = r.ToI()); } }
private Vector2DF GetJut(RectF rect, RectF bound) { var result = new Vector2DF(); if (rect.X + rect.Width > bound.X + bound.Width) { result.X = rect.X + rect.Width - (bound.X + bound.Width); } if (rect.X - result.X < bound.X) { result.X += rect.X - result.X - bound.X; } if (rect.Y + rect.Height > bound.Y + bound.Height) { result.Y = rect.Y + rect.Height - (bound.Y + bound.Height); } if (rect.Y - result.Y < bound.Y) { result.Y += rect.Y - result.Y - bound.Y; } return result; }
protected void DrawRotatedRectangleAdditionally(RectF drawingArea, Color color, Vector2DF rotationCenter, float angle, RectF uv, Texture2D texture, AlphaBlendMode alphaBlend, int priority) { Layer.DrawRotatedRectangleAdditionally(drawingArea, color, rotationCenter, angle, uv, texture, alphaBlend, priority); }
/// <summary> /// 注目している範囲が移動したときに通知するイベントを登録します。 /// </summary> /// <param name="onSeeingAreaChanged">注目している範囲が移動したときに通知するイベント。</param> public void SubscribeSeeingArea(IObservable<RectF> onSeeingAreaChanged) { disposableForSeeingArea_?.Dispose(); disposableForSeeingArea_ = onSeeingAreaChanged.Subscribe(rect => { SeeingArea = rect; ReviseCamera(rect); }); }
protected void DrawRectangleAdditionally(RectF drawingArea, Color color, RectF uv, Texture2D texture, AlphaBlendMode alphaBlend, int priority) { Layer.DrawRectangleAdditionally(drawingArea, color, uv, texture, alphaBlend, priority); }
public void DrawRotatedRectangleAdditionally(RectF drawingArea, Color color, Vector2DF rotationCenter, float angle, RectF uv, Texture2D texture, AlphaBlendMode alphaBlend, int priority) { if (coreLayer2D == null) return; coreLayer2D.DrawRotatedRectangleAdditionally(drawingArea, color, rotationCenter, angle, uv, (texture == null) ? null : texture.SwigObject, (swig.AlphaBlendMode)alphaBlend, priority); }
public static string ToString(RectF rect) { return $"({rect.X}, {rect.Y}, {rect.Width}, {rect.Height})"; }