Add independent pixelation controls
This commit is contained in:
parent
6fadca19b4
commit
c7504d2585
21 changed files with 735 additions and 122 deletions
|
|
@ -7,12 +7,22 @@ const MIN_MOUSE_SENSITIVITY: float = 0.001
|
|||
const MAX_MOUSE_SENSITIVITY: float = 0.012
|
||||
const MIN_CONTROLLER_SENSITIVITY: float = 0.5
|
||||
const MAX_CONTROLLER_SENSITIVITY: float = 5.0
|
||||
const MIN_WORLD_PIXEL_SIZE: int = 1
|
||||
const MAX_WORLD_PIXEL_SIZE: int = 5
|
||||
const DEFAULT_WORLD_PIXEL_SIZE: int = 3
|
||||
const MIN_UI_PIXEL_SIZE: int = 1
|
||||
const MAX_UI_PIXEL_SIZE: int = 5
|
||||
const DEFAULT_UI_PIXEL_SIZE: int = 3
|
||||
const WORLD_RENDER_SCALES: Array[float] = [1.0, 0.9, 0.8, 0.65, 0.45]
|
||||
const UI_RENDER_SCALES: Array[float] = [1.0, 0.975, 0.95, 0.925, 0.9]
|
||||
|
||||
@export var auto_click_enabled: bool = false
|
||||
@export_range(0.10, 0.50, 0.01) var auto_click_interval: float = 0.20
|
||||
@export_range(0.001, 0.012, 0.0005) var mouse_camera_sensitivity: float = 0.005
|
||||
@export_range(0.5, 5.0, 0.1) var controller_camera_sensitivity: float = 2.5
|
||||
@export var invert_camera_y: bool = false
|
||||
@export_range(1, 5, 1) var world_pixel_size: int = DEFAULT_WORLD_PIXEL_SIZE
|
||||
@export_range(1, 5, 1) var ui_pixel_size: int = DEFAULT_UI_PIXEL_SIZE
|
||||
|
||||
|
||||
func is_valid() -> bool:
|
||||
|
|
@ -26,6 +36,10 @@ func is_valid() -> bool:
|
|||
and is_finite(controller_camera_sensitivity)
|
||||
and controller_camera_sensitivity >= MIN_CONTROLLER_SENSITIVITY
|
||||
and controller_camera_sensitivity <= MAX_CONTROLLER_SENSITIVITY
|
||||
and world_pixel_size >= MIN_WORLD_PIXEL_SIZE
|
||||
and world_pixel_size <= MAX_WORLD_PIXEL_SIZE
|
||||
and ui_pixel_size >= MIN_UI_PIXEL_SIZE
|
||||
and ui_pixel_size <= MAX_UI_PIXEL_SIZE
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -36,4 +50,24 @@ func copy() -> PlayerSettings:
|
|||
result.mouse_camera_sensitivity = mouse_camera_sensitivity
|
||||
result.controller_camera_sensitivity = controller_camera_sensitivity
|
||||
result.invert_camera_y = invert_camera_y
|
||||
result.world_pixel_size = world_pixel_size
|
||||
result.ui_pixel_size = ui_pixel_size
|
||||
return result
|
||||
|
||||
|
||||
static func get_world_render_scale(pixel_size: int) -> float:
|
||||
var index: int = clampi(
|
||||
pixel_size,
|
||||
MIN_WORLD_PIXEL_SIZE,
|
||||
MAX_WORLD_PIXEL_SIZE
|
||||
) - 1
|
||||
return WORLD_RENDER_SCALES[index]
|
||||
|
||||
|
||||
static func get_ui_render_scale(pixel_size: int) -> float:
|
||||
var index: int = clampi(
|
||||
pixel_size,
|
||||
MIN_UI_PIXEL_SIZE,
|
||||
MAX_UI_PIXEL_SIZE
|
||||
) - 1
|
||||
return UI_RENDER_SCALES[index]
|
||||
|
|
|
|||
|
|
@ -39,6 +39,9 @@ func load_settings() -> bool:
|
|||
return _use_defaults_after_corruption("Player settings structure is invalid.")
|
||||
var accessibility: Dictionary = data["accessibility"]
|
||||
var camera: Dictionary = data["camera"]
|
||||
var presentation: Dictionary = {}
|
||||
if typeof(data.get("presentation")) == TYPE_DICTIONARY:
|
||||
presentation = data["presentation"]
|
||||
if (
|
||||
typeof(accessibility.get("auto_click_enabled")) != TYPE_BOOL
|
||||
or typeof(camera.get("invert_vertical")) != TYPE_BOOL
|
||||
|
|
@ -59,6 +62,24 @@ func load_settings() -> bool:
|
|||
-1.0
|
||||
)
|
||||
loaded.invert_camera_y = camera["invert_vertical"]
|
||||
loaded.world_pixel_size = _read_clamped_integer(
|
||||
presentation.get(
|
||||
"world_pixel_size",
|
||||
PlayerSettings.DEFAULT_WORLD_PIXEL_SIZE
|
||||
),
|
||||
PlayerSettings.MIN_WORLD_PIXEL_SIZE,
|
||||
PlayerSettings.MAX_WORLD_PIXEL_SIZE,
|
||||
PlayerSettings.DEFAULT_WORLD_PIXEL_SIZE
|
||||
)
|
||||
loaded.ui_pixel_size = _read_clamped_integer(
|
||||
presentation.get(
|
||||
"ui_pixel_size",
|
||||
PlayerSettings.DEFAULT_UI_PIXEL_SIZE
|
||||
),
|
||||
PlayerSettings.MIN_UI_PIXEL_SIZE,
|
||||
PlayerSettings.MAX_UI_PIXEL_SIZE,
|
||||
PlayerSettings.DEFAULT_UI_PIXEL_SIZE
|
||||
)
|
||||
if not loaded.is_valid():
|
||||
return _use_defaults_after_corruption("Player settings values are invalid.")
|
||||
current_settings = loaded
|
||||
|
|
@ -80,6 +101,21 @@ func apply_settings(settings: PlayerSettings) -> bool:
|
|||
return true
|
||||
|
||||
|
||||
func apply_pixelation(world_pixel_size: int, ui_pixel_size: int) -> bool:
|
||||
var edited: PlayerSettings = current_settings.copy()
|
||||
edited.world_pixel_size = clampi(
|
||||
world_pixel_size,
|
||||
PlayerSettings.MIN_WORLD_PIXEL_SIZE,
|
||||
PlayerSettings.MAX_WORLD_PIXEL_SIZE
|
||||
)
|
||||
edited.ui_pixel_size = clampi(
|
||||
ui_pixel_size,
|
||||
PlayerSettings.MIN_UI_PIXEL_SIZE,
|
||||
PlayerSettings.MAX_UI_PIXEL_SIZE
|
||||
)
|
||||
return apply_settings(edited)
|
||||
|
||||
|
||||
func save_now() -> bool:
|
||||
if current_settings == null or not current_settings.is_valid():
|
||||
return false
|
||||
|
|
@ -94,6 +130,10 @@ func save_now() -> bool:
|
|||
"controller_sensitivity": current_settings.controller_camera_sensitivity,
|
||||
"invert_vertical": current_settings.invert_camera_y,
|
||||
},
|
||||
"presentation": {
|
||||
"world_pixel_size": current_settings.world_pixel_size,
|
||||
"ui_pixel_size": current_settings.ui_pixel_size,
|
||||
},
|
||||
}
|
||||
var file := FileAccess.open(TEMP_PATH, FileAccess.WRITE)
|
||||
if file == null:
|
||||
|
|
@ -160,6 +200,16 @@ func _read_float(value: Variant, fallback: float) -> float:
|
|||
return result if is_finite(result) else fallback
|
||||
|
||||
|
||||
func _read_clamped_integer(
|
||||
value: Variant,
|
||||
minimum: int,
|
||||
maximum: int,
|
||||
fallback: int,
|
||||
) -> int:
|
||||
var result: int = _read_integer(value, fallback)
|
||||
return clampi(result, minimum, maximum)
|
||||
|
||||
|
||||
func _rename_file(from_path: String, to_path: String) -> bool:
|
||||
return DirAccess.rename_absolute(
|
||||
ProjectSettings.globalize_path(from_path),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue