Skip to content

Commit 45c6157

Browse files
committed
style: add select card and CallsScreen
1 parent 5c0c26c commit 45c6157

2 files changed

Lines changed: 77 additions & 13 deletions

File tree

src/main/java/zadudoder/spmhelper/Screen/Calls/CallsScreen.java

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,12 @@ public class CallsScreen extends Screen {
2626
private BlockPos playerPos;
2727
private boolean hasToken;
2828
private boolean isOnCorrectServer;
29+
private ButtonWidget detectiveButton;
30+
private ButtonWidget fsbButton;
31+
private ButtonWidget bankerButton;
32+
private ButtonWidget guideButton;
2933
private boolean callsActive = true;
3034
private String statusMessage;
31-
private String serviseType;
32-
private String personName;
3335
private int statusColor;
3436

3537
public CallsScreen() {
@@ -68,38 +70,34 @@ protected void init() {
6870
int buttonWidth = 65;
6971

7072

71-
ButtonWidget detectiveButton = ButtonWidget.builder(Text.of("Детектив"), (btn) -> {
73+
detectiveButton = ButtonWidget.builder(Text.of("Детектив"), (btn) -> {
7274
String serviceType = "detective";
7375
String personName = "Детектив";
7476
callService(serviceType, personName);
7577
}).dimensions(width / 2 - 150, buttonY, buttonWidth, 20).build();
7678
this.addDrawableChild(detectiveButton);
7779

78-
ButtonWidget fsbButton = ButtonWidget.builder(Text.of("ФСБ"), (btn) -> {
80+
fsbButton = ButtonWidget.builder(Text.of("ФСБ"), (btn) -> {
7981
String serviceType = "fsb";
8082
String personName = "ФСБ";
8183
callService(serviceType, personName);
8284
}).dimensions(width / 2 - 150 + buttonWidth + 10, buttonY, buttonWidth, 20).build();
8385
this.addDrawableChild(fsbButton);
8486

85-
ButtonWidget bankerButton = ButtonWidget.builder(Text.of("Банкир"), (btn) -> {
87+
bankerButton = ButtonWidget.builder(Text.of("Банкир"), (btn) -> {
8688
String serviceType = "banker";
8789
String personName = "Банкир";
8890
callService(serviceType, personName);
8991
}).dimensions(width / 2 - 150 + 2 * buttonWidth + 25, buttonY, buttonWidth, 20).build();
9092
this.addDrawableChild(bankerButton);
9193

92-
ButtonWidget guideButton = ButtonWidget.builder(Text.of("Гид"), (btn) -> {
94+
guideButton = ButtonWidget.builder(Text.of("Гид"), (btn) -> {
9395
String serviceType = "guide";
9496
String personName = "Гид";
9597
callService(serviceType, personName);
9698
}).dimensions(width / 2 - 150 + 3 * buttonWidth + 40, buttonY, buttonWidth, 20).build();
9799
this.addDrawableChild(guideButton);
98100

99-
detectiveButton.active = callsActive;
100-
fsbButton.active = callsActive;
101-
bankerButton.active = callsActive;
102-
guideButton.active = callsActive;
103101

104102
if (!hasToken) {
105103
this.addDrawableChild(ButtonWidget.builder(Text.of("Авторизоваться"), btn -> {
@@ -134,6 +132,13 @@ private ButtonWidget createServiceButton(String text, String serviceType, String
134132
.build();
135133
}
136134

135+
private void updateButtonsState() {
136+
detectiveButton.active = !detectiveButton.active;
137+
fsbButton.active = !fsbButton.active;
138+
bankerButton.active = !bankerButton.active;
139+
guideButton.active = !guideButton.active;
140+
}
141+
137142
public void callService(String serviceType, String personName) {
138143
if (!hasToken) {
139144
setStatus("⬇ Сначала авторизуйтесь ⬇", 0xFF5555);
@@ -160,17 +165,21 @@ public void callService(String serviceType, String personName) {
160165
String coordinates = sendCoordinates && playerPos != null ?
161166
"**" + playerPos.getX() + " " + playerPos.getY() + " " + playerPos.getZ() + ' ' + world + "**" : " ";
162167
setStatus("Отправка запроса...", 0xFFFF55);
163-
callsActive = false;
164-
// detectiveButton fsbButton bankerButton guideButton
168+
updateButtonsState();
169+
165170

166171
SPmHelperApi.makeCall(serviceType, coordinates, comment)
167172
.thenAccept(success -> MinecraftClient.getInstance().execute(() -> {
168173
if (success) {
169174
setStatus(personName + " был вызван!", 0x55FF55);
170-
callsActive = true;
175+
updateButtonsState();
171176
} else {
172177
setStatus("Ошибка отправки вызова", 0xFF5555);
173178
callsActive = true;
179+
detectiveButton.active = callsActive;
180+
fsbButton.active = callsActive;
181+
bankerButton.active = callsActive;
182+
guideButton.active = callsActive;
174183
}
175184
}));
176185
}

src/main/java/zadudoder/spmhelper/Screen/Pays/PayScreen.java

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import net.fabricmc.api.Environment;
66
import net.minecraft.client.MinecraftClient;
77
import net.minecraft.client.gui.DrawContext;
8+
import net.minecraft.client.gui.Element;
89
import net.minecraft.client.gui.screen.Screen;
910
import net.minecraft.client.gui.widget.ButtonWidget;
11+
import net.minecraft.client.gui.widget.ClickableWidget;
1012
import net.minecraft.client.gui.widget.TextFieldWidget;
1113
import net.minecraft.text.Text;
1214
import net.minecraft.util.Identifier;
@@ -26,6 +28,9 @@ public class PayScreen extends Screen {
2628
private boolean isSPmPay = false;
2729
private String statusMessage;
2830
private int statusColor;
31+
private ButtonWidget selectButton;
32+
private String selectedCard = null;
33+
private boolean cardsExpanded = false;
2934

3035
public PayScreen() {
3136
super(Text.of("Перевод СПм"));
@@ -48,6 +53,31 @@ protected void init() {
4853
}).dimensions(width - 20, 10, 15, 15).build();
4954
this.addDrawableChild(SPmGroup);
5055

56+
57+
int buttonWidth = 120;
58+
int buttonHeight = 20;
59+
int startY = this.height / 2;
60+
int centerX = this.width / 2 - buttonWidth / 2;
61+
62+
// Основная кнопка выбора карт
63+
selectButton = addDrawableChild(ButtonWidget.builder(
64+
Text.of(selectedCard != null ? selectedCard : "Выберите карту ⬇"),
65+
button -> toggleCards()
66+
).dimensions(width / 2 - 240, height / 2 - 15, buttonWidth, buttonHeight).build());
67+
68+
// Кнопки карт (изначально скрыты)
69+
int index = 0;
70+
for (String name : SPmHelperConfig.get().getCards().keySet()) {
71+
index++;
72+
ButtonWidget cardBtn = ButtonWidget.builder(
73+
Text.of(name),
74+
btn -> selectCard(name)
75+
).dimensions(centerX - 80, startY - 50 + index * 25, buttonWidth, buttonHeight).build();
76+
cardBtn.visible = cardsExpanded;
77+
this.addDrawableChild(cardBtn);
78+
}
79+
80+
5181
// Поле для номера карты получателя
5282
this.receiverCardField = new TextFieldWidget(
5383
this.textRenderer,
@@ -92,6 +122,31 @@ protected void init() {
92122
this.addDrawableChild(transferButton);
93123
}
94124

125+
private void toggleCards() {
126+
cardsExpanded = !cardsExpanded;
127+
updateCardsVisibility();
128+
}
129+
130+
private void updateCardsVisibility() {
131+
int index = 0;
132+
for (Element element : this.children()) {
133+
if (element instanceof ClickableWidget widget && element != selectButton) {
134+
index++;
135+
if (index > 0 && index <= SPmHelperConfig.get().getCards().size()) {
136+
widget.visible = cardsExpanded;
137+
}
138+
}
139+
}
140+
}
141+
142+
private void selectCard(String card) {
143+
selectedCard = card;
144+
cardsExpanded = false;
145+
updateCardsVisibility();
146+
// Не вызываем clearAndInit(), чтобы не сбрасывать состояние
147+
selectButton.setMessage(Text.of(card));
148+
}
149+
95150
private void processTransfer() {
96151
try {
97152
Card senderCard = SPmHelperConfig.get().getMainCard();

0 commit comments

Comments
 (0)