mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-22 20:58:34 +01:00
fixed ConstrainWorldBounds not always being accurate
This commit is contained in:
parent
324055d82e
commit
39af38f3d8
1 changed files with 3 additions and 6 deletions
|
@ -61,10 +61,6 @@ namespace MLEM.Cameras {
|
||||||
return Vector2.Transform(pos, this.ViewMatrix);
|
return Vector2.Transform(pos, this.ViewMatrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
public (Vector2 topLeft, Vector2 bottomRight) GetVisibleArea() {
|
|
||||||
return (this.ToWorldPos(Vector2.Zero), this.ToWorldPos(new Vector2(this.Viewport.Width, this.Viewport.Height)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public RectangleF GetVisibleRectangle() {
|
public RectangleF GetVisibleRectangle() {
|
||||||
var start = this.ToWorldPos(Vector2.Zero);
|
var start = this.ToWorldPos(Vector2.Zero);
|
||||||
return new RectangleF(start, this.ToWorldPos(new Vector2(this.Viewport.Width, this.Viewport.Height)) - start);
|
return new RectangleF(start, this.ToWorldPos(new Vector2(this.Viewport.Width, this.Viewport.Height)) - start);
|
||||||
|
@ -72,7 +68,8 @@ namespace MLEM.Cameras {
|
||||||
|
|
||||||
public bool ConstrainWorldBounds(Vector2 min, Vector2 max) {
|
public bool ConstrainWorldBounds(Vector2 min, Vector2 max) {
|
||||||
var lastPos = this.Position;
|
var lastPos = this.Position;
|
||||||
if (this.Position.X < min.X && this.Max.X > max.X) {
|
var visible = this.GetVisibleRectangle();
|
||||||
|
if (max.X - min.X < visible.Width) {
|
||||||
this.LookingPosition = new Vector2((max.X - min.X) / 2, this.LookingPosition.Y);
|
this.LookingPosition = new Vector2((max.X - min.X) / 2, this.LookingPosition.Y);
|
||||||
} else {
|
} else {
|
||||||
if (this.Position.X < min.X)
|
if (this.Position.X < min.X)
|
||||||
|
@ -81,7 +78,7 @@ namespace MLEM.Cameras {
|
||||||
this.Max = new Vector2(max.X, this.Max.Y);
|
this.Max = new Vector2(max.X, this.Max.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.Position.Y < min.Y && this.Max.Y > max.Y) {
|
if (max.Y - min.Y < visible.Height) {
|
||||||
this.LookingPosition = new Vector2(this.LookingPosition.X, (max.Y - min.Y) / 2);
|
this.LookingPosition = new Vector2(this.LookingPosition.X, (max.Y - min.Y) / 2);
|
||||||
} else {
|
} else {
|
||||||
if (this.Position.Y < min.Y)
|
if (this.Position.Y < min.Y)
|
||||||
|
|
Loading…
Reference in a new issue