mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-06 23:12:36 +00:00
## About The Pull Request Closes #84447 Closes #84445 Fixes incorrect assoc list deletion, storage deletion order and some math oopsies ## Changelog 🆑 fix: Storage no longer deletes all of its viewers upon being deleted fix: Storage UI now renders properly /🆑
69 lines
3.1 KiB
Plaintext
69 lines
3.1 KiB
Plaintext
/// Datum tracker for storage UI
|
|
/datum/storage_interface
|
|
/// UI elements for this theme
|
|
var/atom/movable/screen/close/closer
|
|
var/atom/movable/screen/storage/cells
|
|
var/atom/movable/screen/storage/corner/corner_top_left
|
|
var/atom/movable/screen/storage/corner/top_right/corner_top_right
|
|
var/atom/movable/screen/storage/corner/bottom_left/corner_bottom_left
|
|
var/atom/movable/screen/storage/corner/bottom_right/corner_bottom_right
|
|
var/atom/movable/screen/storage/rowjoin/rowjoin_left
|
|
var/atom/movable/screen/storage/rowjoin/right/rowjoin_right
|
|
|
|
/// Storage that owns us
|
|
var/datum/storage/parent_storage
|
|
|
|
/datum/storage_interface/New(ui_style, parent_storage)
|
|
..()
|
|
src.parent_storage = parent_storage
|
|
closer = new(null, null, parent_storage)
|
|
cells = new(null, null, parent_storage)
|
|
corner_top_left = new(null, null, parent_storage)
|
|
corner_top_right = new(null, null, parent_storage)
|
|
corner_bottom_left = new(null, null, parent_storage)
|
|
corner_bottom_right = new(null, null, parent_storage)
|
|
rowjoin_left = new(null, null, parent_storage)
|
|
rowjoin_right = new(null, null, parent_storage)
|
|
for (var/atom/movable/screen/ui_elem as anything in list_ui_elements())
|
|
ui_elem.icon = ui_style
|
|
|
|
/// Returns all UI elements under this theme
|
|
/datum/storage_interface/proc/list_ui_elements()
|
|
return list(cells, corner_top_left, corner_top_right, corner_bottom_left, corner_bottom_right, rowjoin_left, rowjoin_right, closer)
|
|
|
|
/datum/storage_interface/Destroy(force)
|
|
QDEL_NULL(cells)
|
|
QDEL_NULL(corner_top_left)
|
|
QDEL_NULL(corner_top_right)
|
|
QDEL_NULL(corner_bottom_left)
|
|
QDEL_NULL(corner_bottom_right)
|
|
QDEL_NULL(rowjoin_left)
|
|
QDEL_NULL(rowjoin_right)
|
|
parent_storage = null
|
|
return ..()
|
|
|
|
/// Updates position of all UI elements
|
|
/datum/storage_interface/proc/update_position(screen_start_x, screen_pixel_x, screen_start_y, screen_pixel_y, columns, rows)
|
|
var/start_pixel_x = screen_start_x * 32 + screen_pixel_x
|
|
var/start_pixel_y = screen_start_y * 32 + screen_pixel_y
|
|
var/end_pixel_x = start_pixel_x + (columns - 1) * 32
|
|
var/end_pixel_y = start_pixel_y + (rows - 1) * 32
|
|
|
|
cells.screen_loc = spanning_screen_loc(start_pixel_x, start_pixel_y, end_pixel_x, end_pixel_y)
|
|
var/left_edge_loc = spanning_screen_loc(min(start_pixel_x + 32, end_pixel_x), start_pixel_y, end_pixel_x, end_pixel_y)
|
|
var/right_edge_loc = spanning_screen_loc(start_pixel_x, start_pixel_y, max(start_pixel_x, end_pixel_x - 32), end_pixel_y)
|
|
corner_top_left.screen_loc = left_edge_loc
|
|
corner_bottom_left.screen_loc = left_edge_loc
|
|
corner_top_right.screen_loc = right_edge_loc
|
|
corner_bottom_right.screen_loc = right_edge_loc
|
|
|
|
var/row_left_loc = spanning_screen_loc(start_pixel_x, start_pixel_y + 27, start_pixel_x, start_pixel_y + 27 + max(0, rows - 2) * 32)
|
|
rowjoin_left.screen_loc = row_left_loc
|
|
rowjoin_left.alpha = (rows > 1) * 255
|
|
|
|
var/row_right_loc = spanning_screen_loc(end_pixel_x, start_pixel_y + 27, end_pixel_x, start_pixel_y + 27 + max(0, rows - 2) * 32)
|
|
rowjoin_right.screen_loc = row_right_loc
|
|
rowjoin_right.alpha = (rows > 1) * 255
|
|
|
|
closer.screen_loc = "[screen_start_x + columns]:[screen_pixel_x - 5],[screen_start_y]:[screen_pixel_y]"
|