netfishing/ui/fullscreen_menu_presentation.gd

58 lines
1.7 KiB
GDScript3
Raw Permalink Normal View History

class_name FullscreenMenuPresentation
extends RefCounted
const UIReferencePresentationType = preload(
"res://ui/ui_reference_presentation.gd"
)
const WIDE_REFERENCE_SIZE: Vector2 = Vector2(1280.0, 720.0)
const COMPACT_REFERENCE_SIZE: Vector2 = Vector2(960.0, 720.0)
const COMPACT_MAX_ASPECT: float = 1.5
const COMPACT_SOURCE_RECT := Rect2(160.0, 0.0, 960.0, 720.0)
static func uses_compact_profile(display_size: Vector2) -> bool:
if display_size.x <= 0.0 or display_size.y <= 0.0:
return false
return display_size.aspect() <= COMPACT_MAX_ASPECT
static func get_profile_scale(display_size: Vector2) -> float:
if not uses_compact_profile(display_size):
return 1.0
var wide_scale: float = UIReferencePresentationType.get_scale(display_size)
var compact_scale: float = minf(
display_size.x / COMPACT_REFERENCE_SIZE.x,
display_size.y / COMPACT_REFERENCE_SIZE.y,
)
return compact_scale / wide_scale
static func get_profile_position(display_size: Vector2) -> Vector2:
if not uses_compact_profile(display_size):
return Vector2.ZERO
var wide_scale: float = UIReferencePresentationType.get_scale(display_size)
var compact_scale: float = minf(
display_size.x / COMPACT_REFERENCE_SIZE.x,
display_size.y / COMPACT_REFERENCE_SIZE.y,
)
var profile_scale: float = compact_scale / wide_scale
var wide_offset: Vector2 = UIReferencePresentationType.get_offset(
display_size
)
var compact_offset: Vector2 = (
display_size - COMPACT_REFERENCE_SIZE * compact_scale
) * 0.5
return (
(compact_offset - wide_offset) / wide_scale
- COMPACT_SOURCE_RECT.position * profile_scale
)
static func get_source_rect(display_size: Vector2) -> Rect2:
return (
COMPACT_SOURCE_RECT
if uses_compact_profile(display_size)
else Rect2(Vector2.ZERO, WIDE_REFERENCE_SIZE)
)