From 1c91c24dfb193b565461b720ec9b6d1ef7359c7d Mon Sep 17 00:00:00 2001
From: SMOSMOSMOSMOSMO <95004236+SmoSmoSmoSmok@users.noreply.github.com>
Date: Sun, 5 Mar 2023 23:15:31 +0200
Subject: [PATCH] ORM ui qol (#73721)
## About The Pull Request
seperates everything into tabs and allows u to search. ur credits are
displayed on the ui and makes the buttons to print mats similar to
fabricators

## Why It's Good For The Game
more fun to use the orm
## Changelog
:cl:
qol: made ORM easier to use
/:cl:
---
code/modules/mining/machine_redemption.dm | 59 +++-
.../tgui/interfaces/OreRedemptionMachine.js | 285 +++++++++++++-----
2 files changed, 251 insertions(+), 93 deletions(-)
diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm
index 7be6cd41211..6eb4b28da81 100644
--- a/code/modules/mining/machine_redemption.dm
+++ b/code/modules/mining/machine_redemption.dm
@@ -213,21 +213,28 @@
/obj/machinery/mineral/ore_redemption/ui_data(mob/user)
var/list/data = list()
data["unclaimedPoints"] = points
-
data["materials"] = list()
var/datum/component/material_container/mat_container = materials.mat_container
if (mat_container)
- for(var/mat in mat_container.materials)
- var/datum/material/M = mat
- var/amount = mat_container.materials[M]
+ for(var/datum/material/material as anything in mat_container.materials)
+ var/amount = mat_container.materials[material]
var/sheet_amount = amount / MINERAL_MATERIAL_AMOUNT
- var/ref = REF(M)
- data["materials"] += list(list("name" = M.name, "id" = ref, "amount" = sheet_amount, "value" = ore_values[M.type]))
+ data["materials"] += list(list(
+ "name" = material.name,
+ "id" = REF(material),
+ "amount" = sheet_amount,
+ "category" = "material",
+ "value" = ore_values[material.type],
+ ))
- data["alloys"] = list()
- for(var/v in stored_research.researched_designs)
- var/datum/design/D = SSresearch.techweb_design_by_id(v)
- data["alloys"] += list(list("name" = D.name, "id" = D.id, "amount" = can_smelt_alloy(D)))
+ for(var/research in stored_research.researched_designs)
+ var/datum/design/alloy = SSresearch.techweb_design_by_id(research)
+ data["materials"] += list(list(
+ "name" = alloy.name,
+ "id" = alloy.id,
+ "category" = "alloy",
+ "amount" = can_smelt_alloy(alloy),
+ ))
if (!mat_container)
data["disconnected"] = "local mineral storage is unavailable"
@@ -236,8 +243,40 @@
else if (materials.on_hold())
data["disconnected"] = "mineral withdrawal is on hold"
+ var/obj/item/card/id/card
+ if(isliving(user))
+ var/mob/living/customer = user
+ card = customer.get_idcard(hand_first = TRUE)
+ if(card?.registered_account)
+ data["user"] = list(
+ "name" = card.registered_account.account_holder,
+ "cash" = card.registered_account.account_balance,
+ )
return data
+/obj/machinery/mineral/ore_redemption/ui_static_data(mob/user)
+ var/list/data = list()
+
+ var/datum/component/material_container/mat_container = materials.mat_container
+ if (mat_container)
+ for(var/datum/material/material as anything in mat_container.materials)
+ var/obj/material_display = initial(material.sheet_type)
+ data["material_icons"] += list(list(
+ "id" = REF(material),
+ "product_icon" = icon2base64(getFlatIcon(image(icon = initial(material_display.icon), icon_state = initial(material_display.icon_state)), no_anim=TRUE)),
+ ))
+
+ for(var/research in stored_research.researched_designs)
+ var/datum/design/alloy = SSresearch.techweb_design_by_id(research)
+ var/obj/alloy_display = initial(alloy.build_path)
+ data["material_icons"] += list(list(
+ "id" = alloy.id,
+ "product_icon" = icon2base64(getFlatIcon(image(icon = initial(alloy_display.icon), icon_state = initial(alloy_display.icon_state)), no_anim=TRUE)),
+ ))
+
+ return data
+
+
/obj/machinery/mineral/ore_redemption/ui_act(action, params)
. = ..()
if(.)
diff --git a/tgui/packages/tgui/interfaces/OreRedemptionMachine.js b/tgui/packages/tgui/interfaces/OreRedemptionMachine.js
index 5a387ecb993..89b3f63fd54 100644
--- a/tgui/packages/tgui/interfaces/OreRedemptionMachine.js
+++ b/tgui/packages/tgui/interfaces/OreRedemptionMachine.js
@@ -1,107 +1,226 @@
-import { toTitleCase } from 'common/string';
-import { useBackend, useLocalState } from '../backend';
-import { BlockQuote, Box, Button, NumberInput, Section, Table } from '../components';
+import { createSearch, toTitleCase } from 'common/string';
+import { useBackend, useLocalState, useSharedState } from '../backend';
+import { BlockQuote, Box, Button, Table, Tabs, Input, Stack, Icon, Section, LabeledList } from '../components';
import { Window } from '../layouts';
+import { formatSiUnit } from '../format';
export const OreRedemptionMachine = (props, context) => {
const { act, data } = useBackend(context);
- const { unclaimedPoints, materials, alloys } = data;
+ const { unclaimedPoints, materials, user } = data;
+ const [tab, setTab] = useSharedState(context, 'tab', 1);
+ const [searchItem, setSearchItem] = useLocalState(context, 'searchItem', '');
+ const [compact, setCompact] = useSharedState(context, 'compact', false);
+ const search = createSearch(searchItem, (materials) => materials.name);
+ const material_filtered =
+ searchItem.length > 0
+ ? data.materials.filter(search)
+ : materials.filter((material) => material && material.category === tab);
return (
-
-
-
-
-
- {materials.map((material) => (
-
- act('Release', {
- id: material.id,
- sheets: amount,
- })
- }
- />
- ))}
-
-
-
-
- {alloys.map((material) => (
-
- act('Smelt', {
- id: material.id,
- sheets: amount,
- })
- }
- />
- ))}
-
-
+
+
+
+
+ {material_filtered.map((material) => (
+ {
+ if (material.category === 'material') {
+ act('Release', {
+ id: material.id,
+ sheets: amount,
+ });
+ } else {
+ act('Smelt', {
+ id: material.id,
+ sheets: amount,
+ });
+ }
+ }}
+ />
+ ))}
+
+
+
+
);
};
const MaterialRow = (props, context) => {
+ const { data } = useBackend(context);
+ const { material_icons } = data;
const { material, onRelease } = props;
+ const [compact, setCompact] = useLocalState(context, 'compact', false);
- const [amount, setAmount] = useLocalState(
- context,
- 'amount' + material.name,
- 1
+ const display = material_icons.find(
+ (mat_icon) => mat_icon.id === material.id
);
- const amountAvailable = Math.floor(material.amount);
+ const print_amount = 5;
+ const max_sheets = 50;
+
return (
-
- {toTitleCase(material.name).replace('Alloy', '')}
-
-
- {material.value && material.value + ' cr'}
+
+ {!compact && (
+
+
+
+ )}
+ {toTitleCase(material.name)}
+
+
+ {formatSiUnit(material.amount, 0)}{' '}
+ {material.amount === 1 ? 'sheet' : 'sheets'}
-
-
- {amountAvailable} sheets
-
-
-
- setAmount(value)}
+
+