Я хотел бы создать ландшафт в видимой области Camera2D, независимо от текущего масштабирование.
Моя функция масштабирования в Camera2D:
Код: Выделить всё
public void ZoomCamera(double delta)
{
Vector2 zoom = Zoom;
if (Input.IsActionJustPressed("camera_zoom_in"))
{
zoom.X = Mathf.Clamp(zoom.X * 1.1f, MinZoom, MaxZoom);
zoom.Y = Mathf.Clamp(zoom.Y * 1.1f, MinZoom, MaxZoom);
}
if (Input.IsActionJustPressed("camera_zoom_out"))
{
zoom.X = Mathf.Clamp(zoom.X * 0.9f, MinZoom, MaxZoom);
zoom.Y = Mathf.Clamp(zoom.Y * 0.9f, MinZoom, MaxZoom);
}
Zoom = Zoom.Slerp(zoom, (float)(ZoomSpeed * delta));
}
Код: Выделить всё
var clickedCell = LocalToMap(GetLocalMousePosition());
SetCell(clickedCell, 0, new Vector2I(6, 0), 0);
Код: Выделить всё
public void ReCalculateViewPortBounds()
{
var viewport = GetViewport();
var camera = viewport.GetCamera2D();
var viewportSize = viewport.GetVisibleRect().Size;
var cameraPosition = camera.GlobalPosition;
var half_width = (viewportSize.X * Zoom.X) / 2f;
var half_height = (viewportSize.Y * Zoom.Y) / 2f;
// Define corners
var top_left = cameraPosition + (new Vector2(-half_width, -half_height));
var top_right = cameraPosition + (new Vector2(half_width, -half_height));
var bottom_left = cameraPosition + (new Vector2(-half_width, half_height));
var bottom_right = cameraPosition + (new Vector2(half_width, half_height));
// Send event
EventBus.Instance.Bus.Publish(new CameraEvent {
BottomLeft = ToLocal(bottom_left),
BottomRight = ToLocal(bottom_right),
TopLeft = ToLocal(top_left),
TopRight = ToLocal(top_right)
});
}
По сути, я пытаюсь получить те же координаты, как если бы я щелкал мышью во всех четырех углах карты при любом заданном уровне масштабирования.
Подробнее здесь: https://stackoverflow.com/questions/793 ... r-in-godot
Мобильная версия