Skip to content

Commit

Permalink
feat: Photocopier blanks and TGUI port (Rebased) (ss220club#148)
Browse files Browse the repository at this point in the history
<!-- Пишите **НИЖЕ** заголовков и **ВЫШЕ** комментариев, иначе что то
может пойти не так. -->
<!-- Вы можете прочитать Contributing.MD, если хотите узнать больше. -->

В принтер добавлены бюрократические формы с парашизы
Код полностью... практически полностью соответствует парашизовскому,
если не хуже, так что можно сказать я НАСРАЛ.
В будущем думаю переписать весь UI и добавить сканер как у оффовского,
поиск в бланки, и выпадающее меню, в общем, справа должны быть только
бланки
<!-- Вкратце опишите изменения, которые вносите. -->
<!-- Опишите **все** изменения, так как противное может сказаться на
рассмотрении этого PR'а! -->
<!-- Если вы исправляете Issue, добавьте "Fixes ss220club#1234" (где 1234 - номер
Issue) где-нибудь в описании PR'а. Это автоматически закроет Issue после
принятия PR'а. -->

Больше бланков богу бланков, не надо ручками писать
<!-- Опишите, почему, по вашему, следует добавить эти изменения в игру.
-->

![image](https://github.com/ss220club/Paradise-Remake/assets/69762909/1f8198ea-bbb8-4b84-a8d5-c6c10f5a6a5d)

<!-- Если вы не меняли карту или спрайты, можете опустить эту секцию.
Если хотите, можете вставить видео. -->

Тыкал кнопочки, в том числе за ИИ
Есть пара багов, если выставить 0 копий и пытаться распечатать фотку
жопы, звук будет стакаться и разрывать уши.
Не понимаю зачем кнопка с папкой, на офф тгуи она по всей видимости тоже
ничего не делает, кроме возможности хранить папку.
<!-- Как вы тестировали свой PR, если делали это вовсе? -->

:cl:
add: Добавлены бланки в ксерокс.
/:cl:

<!-- Оба :cl:'а должны быть на месте, что-бы чейнджлог работал! Вы
можете написать свой ник справа от первого :cl:, если хотите. Иначе
будет использован ваш ник на ГитХабе. -->
<!-- Вы можете использовать несколько записей с одинаковым префиксом
(Они используются только для иконки в игре) и удалить ненужные. Помните,
что чейнджлог должен быть понятен обычным игроком. -->
<!-- Если чейнджлог не влияет на игроков(например, это рефактор), вы
можете исключить всю секцию. -->

---------

Co-authored-by: Furior <[email protected]>
Co-authored-by: Furior <[email protected]>
Co-authored-by: Henri215 <[email protected]>
  • Loading branch information
4 people authored and BR54FF committed Oct 23, 2023
1 parent a2afec5 commit 3e0569a
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 61 deletions.
6 changes: 4 additions & 2 deletions modular_ss220/bureaucracy/code/photocopier.dm
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@
ui_interact(user)

/obj/machinery/photocopier/ui_act(action, list/params)
. = ..()
if(.)
if(..())
return

switch(action)
Expand All @@ -53,6 +52,9 @@
if("choose_category")
category = params["category"]
. = TRUE
if("aipic")
aipic()
. = TRUE

/obj/machinery/photocopier/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
Expand Down
1 change: 1 addition & 0 deletions modular_ss220/modular_ss220.dme
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

// --- MISC --- //
#include "aesthetics_sounds/_aesthetics_sounds.dme"
#include "bureaucracy/_bureaucracy.dme"
#include "crawl_speed/_crawl_speed.dme"
#include "discord_link/_discord_link.dme"
#include "emotes/_emotes.dme"
Expand Down
117 changes: 58 additions & 59 deletions tgui/packages/tgui/interfaces/Photocopier220.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { useBackend, useLocalState } from '../backend';
import { Button, Section, Flex, Input } from '../components';
import { Button, Section, Flex, Input } from "../components";
import { Window } from '../layouts';
import { filter, sortBy } from 'common/collections';
import { FlexItem } from '../components/Flex';
import { flow } from 'common/fp';
import { createSearch } from 'common/string';

String.prototype.trimLongStr = function (length) {
return this.length > length ? this.substring(0, length) + '...' : this;
return this.length > length ? this.substring(0, length) + "..." : this;
};

const selectForms = (forms, searchText = '') => {
Expand All @@ -19,15 +19,13 @@ const selectForms = (forms, searchText = '') => {
])(forms);
};


export const Photocopier220 = (props, context) => {
const { act, data } = useBackend(context);

const [searchText, setSearchText] = useLocalState(context, 'searchText', '');

const forms = selectForms(
sortBy((form) => form.category)(data.forms || []),
searchText
);
const forms = selectForms(sortBy(form => form.category)(data.forms || []), searchText);
const categories = [];
for (let form of forms) {
if (!categories.includes(form.category)) {
Expand All @@ -36,27 +34,30 @@ export const Photocopier220 = (props, context) => {
}

let category;
if (data.category === '') {
if (data.category === "") {
category = forms;
} else {
category = forms.filter((form) => form.category === data.category);
category = forms.filter(form => form.category === data.category);
}

return (
<Window theme={data.ui_theme}>
<Window.Content scrollable display="flex">
<Flex direction="row" spacing={1}>
<Flex.Item width={24} shrink={0}>
<Section title="Статус">
<Window.Content
scrollable
display="flex">
<Flex
direction="row"
spacing={1}>
<Flex.Item
width={24}
shrink={0}>
<Section
title="Статус">
<Flex>
<Flex.Item mr="20px" color="grey">
Заряд тонера:
</Flex.Item>
<Flex.Item
mr="5px"
color={data.toner > 0 ? 'good' : 'bad'}
bold
>
<Flex.Item mr="5px" color={data.toner > 0 ? "good" : "bad"} bold>
{data.toner}
</Flex.Item>
</Flex>
Expand All @@ -70,8 +71,8 @@ export const Photocopier220 = (props, context) => {
data.copyitem
? data.copyitem
: data.mob
? 'Жопа ' + data.mob + '!'
: 'Слот для документа'
? "Жопа " + data.mob + "!"
: 'Слот для документа'
}
onClick={() => act('removedocument')}
/>
Expand All @@ -89,16 +90,17 @@ export const Photocopier220 = (props, context) => {
</Flex.Item>
</Flex>
</Section>
<Section title="Управление">
<Section
title="Управление">
<Flex>
<Flex.Item width="60%" mr="3px">
<Button
fluid
textAlign="center"
icon="clone"
content="Копия"
disabled={data.toner === 0 || (!data.copyitem && !data.mob)}
onClick={() => act('copy')}
disabled={data.toner === 0 || !data.copyitem && !data.mob}
onClick={() => act("copy")}
/>
</Flex.Item>
<Flex.Item width="40%" mr="3px">
Expand All @@ -108,7 +110,7 @@ export const Photocopier220 = (props, context) => {
icon="file"
disabled={data.toner === 0 || data.form === null}
content="Печать"
onClick={() => act('print_form')}
onClick={() => act("print_form")}
/>
</Flex.Item>
</Flex>
Expand All @@ -121,7 +123,7 @@ export const Photocopier220 = (props, context) => {
icon="terminal"
disabled={data.toner < 5}
content="Фото из БД"
onClick={() => act('aipic')}
onClick={() => act("aipic")}
/>
)}
</Flex.Item>
Expand Down Expand Up @@ -155,73 +157,70 @@ export const Photocopier220 = (props, context) => {
</Flex.Item>
</Flex>
</Section>
<Section title="Бюрократия">
<Section
title="Бюрократия">
<Flex>
<Flex.Item mr="20px" color="grey">
Форма:
</Flex.Item>
<FlexItem bold>
{data.form_id === '' ? 'Не выбрана' : data.form_id}
{data.form_id === "" ? "Не выбрана" : data.form_id}
</FlexItem>
</Flex>
<Flex direction="column" mt={2}>
<Flex
direction="column"
mt={2}>
<Flex.Item>
<Button
fluid
icon="chevron-right"
content="Все формы"
selected={data.category === '' ? 'selected' : null}
onClick={() =>
act('choose_category', {
category: null,
})
}
selected={data.category === "" ? "selected" : null}
onClick={() => act("choose_category", {
category: null,
})}
mb={1}
/>
</Flex.Item>
{categories.map((category) => (
{categories.map(category => (
<Flex.Item key={category}>
<Button
fluid
key={category}
<Button fluid key={category}
icon="chevron-right"
content={category}
selected={data.category === category ? 'selected' : null}
onClick={() =>
act('choose_category', {
category: category,
})
}
selected={data.category === category ? "selected" : null}
onClick={() => act("choose_category", {
category: category,
})}
mb={1}
/>
</Flex.Item>
))}
</Flex>
</Section>
</Flex.Item>
<Flex.Item width={35}>
<Section title={data.category === '' ? 'Все формы' : data.category}>
<Flex.Item
width={35}>
<Section
title={data.category === "" ? "Все формы" : data.category}>
<Input
fluid
mb={1}
placeholder="Поиск формы"
onInput={(e, value) => setSearchText(value)}
/>
<Flex direction="column" mt={2}>
{category.map((form) => (
<Flex
direction="column"
mt={2}>
{category.map(form => (
<Flex.Item key={form.path}>
<Button
fluid
key={form.path}
content={form.id + ': ' + form.altername.trimLongStr(27)}
tooltip={form.id + ': ' + form.altername}
selected={data.form_id === form.id ? 'selected' : null}
onClick={() =>
act('choose_form', {
path: form.path,
id: form.id,
})
}
<Button fluid key={form.path}
content={form.id + ": " + form.altername.trimLongStr(27)}
tooltip={form.id + ": " + form.altername}
selected={data.form_id === form.id ? "selected" : null}
onClick={() => act("choose_form", {
path: form.path,
id: form.id,
})}
mb={1}
/>
</Flex.Item>
Expand Down

0 comments on commit 3e0569a

Please sign in to comment.