Add payment required text to main menu and improve payment handling logic
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled

This commit is contained in:
Данил Ярош 2026-01-23 16:12:34 +03:00
parent 2957901cde
commit 5f339c6bd0
8 changed files with 4594 additions and 2187 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1807,7 +1807,7 @@ MonoBehaviour:
m_HandleRect: {fileID: 434895585}
m_Direction: 2
m_Value: 0
m_Size: 1
m_Size: 0.99999774
m_NumberOfSteps: 0
m_OnValueChanged:
m_PersistentCalls:
@ -2017,6 +2017,143 @@ SpriteRenderer:
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &314192188
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 314192189}
- component: {fileID: 314192191}
- component: {fileID: 314192190}
m_Layer: 5
m_Name: PaymentText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &314192189
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 314192188}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1227305891}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: -450}
m_SizeDelta: {x: 600, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &314192190
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 314192188}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: "\u041E\u041F\u041B\u0410\u0422\u0410 \u041D\u0415 \u0412\u041D\u0415\u0421\u0415\u041D\u0410"
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 5302535af1044152a457ed104f1f4b91, type: 2}
m_sharedMaterial: {fileID: 2164040, guid: 5302535af1044152a457ed104f1f4b91, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4278190335
m_fontColor: {r: 1, g: 0, b: 0, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 36
m_fontSizeBase: 36
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_characterHorizontalScale: 1
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &314192191
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 314192188}
m_CullTransparentMesh: 1
--- !u!1 &328533398
GameObject:
m_ObjectHideFlags: 0
@ -8024,6 +8161,42 @@ SpriteRenderer:
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_SpriteSortPoint: 0
--- !u!1 &1227305890
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1227305891}
m_Layer: 5
m_Name: PaymentRequiredText
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1227305891
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1227305890}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 314192189}
m_Father: {fileID: 1851115885}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1243189750
GameObject:
m_ObjectHideFlags: 0
@ -11914,7 +12087,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0.000045224962}
m_AnchoredPosition: {x: 0, y: 0.001001656}
m_SizeDelta: {x: 0, y: 300}
m_Pivot: {x: 0, y: 1}
--- !u!114 &1792218764
@ -12463,6 +12636,7 @@ RectTransform:
- {fileID: 1994605500}
- {fileID: 1200884212}
- {fileID: 1532558928}
- {fileID: 1227305891}
m_Father: {fileID: 2082092901}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@ -14487,6 +14661,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
newGameButton: {fileID: 1707733837}
quitButton: {fileID: 477076300}
paymentText: {fileID: 314192190}
--- !u!1 &2112606362
GameObject:
m_ObjectHideFlags: 0

View File

@ -240,11 +240,11 @@ namespace RR.Common.Controls
}
public void StopBlink()
public void StopBlink(bool enableHat = true)
{
if (blinkingCoroutine != null) StopCoroutine(blinkingCoroutine);
Send("2131"); // вклю
blinkingCoroutine = null;
Send(enableHat ? "2131" : "2130"); // включаем или выключаем шляпу
}
/// <summary>
@ -279,8 +279,8 @@ namespace RR.Common.Controls
private void OnApplicationQuit()
{
// Отправляем сигнал закрытия игры
Send("2170");
Send("2170"); // Выключаем кнопки
Send("2130"); // Выключаем шапку
StopAsyncPolling();
ClosePort();
@ -323,7 +323,7 @@ namespace RR.Common.Controls
private void ProcessComInputImmediate(string comInput)
{
GameManager.Logger.Log("COM: " + comInput);
// Debug.Log("COM: " + comInput);
// INPUT обработка
if (comInput.StartsWith("INPUT"))
@ -339,7 +339,7 @@ namespace RR.Common.Controls
string rawData = comInput.Substring(5);
// Пр<EFBFBD><EFBFBD>веряем, что rawData не пустой
// Проверяем, что rawData не пустой
if (string.IsNullOrWhiteSpace(rawData))
{
GameManager.Logger.Log("INPUT получен с пустым значением");
@ -397,7 +397,7 @@ namespace RR.Common.Controls
#region Приватные методы
//Ну тут по дебаг логам все должно быть понятно
//Если интересно, то h - это хэндл. Что то на плюсовом, типа ID соединения или чтото. Если 0 то нету соед. если меньше то ошибка, больше 0 - норм.
//Если интересно, то h - это хэндл. Что-то на плюсовом, типа ID соединения или что-то. Если 0, то нету соед. если меньше то ошибка, больше 0 - норм.
private void initPort()
{
GameManager.Logger.Log("ComWrapper", "Старт программы");

View File

@ -158,6 +158,12 @@ namespace RR.Game2D.Core.Managers
private void OnDestroy()
{
if (Instance == this) Instance = null;
Plate.StopBlink(false);
}
private void OnApplicationQuit()
{
OnDestroy();
}
/// <summary>
@ -356,7 +362,7 @@ public void TogglePause() => SetPause(!IsPaused);
/// <summary>
/// Загрузка сцены по названию.
/// Вызывает одноименный метод в SceneManager.
/// Вызывает одноименный метод в <see cref="SceneManager"/>.
/// Может загружать сцены с UI и без.
/// В сценах без UI игрок не спавнится
/// </summary>

View File

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 5cbfc8b1557f401886b9e62505e9e6a6
timeCreated: 1762846161

View File

@ -3,6 +3,7 @@ using UnityEngine;
using UnityEngine.UI;
using RR.Game2D.Core.Managers;
using TMPro;
namespace RR.Common.UI
{
@ -12,6 +13,8 @@ namespace RR.Common.UI
[SerializeField] private Button newGameButton;
[SerializeField] private Button quitButton;
[Header("Тексты")] [SerializeField] private TextMeshProUGUI paymentText;
private PaymentManager _paymentManager;
private void Start()
@ -79,11 +82,16 @@ namespace RR.Common.UI
{
newGameButton.interactable = true;
newGameButton.interactable = true;
paymentText.gameObject.SetActive(false);
return;
}
if (newGameButton) newGameButton.interactable = credits >= 1;
if (newGameButton) newGameButton.interactable = credits >= 1;
else paymentText.gameObject.SetActive(true);
if (!newGameButton) return;
bool canStartGame = credits >= 1;
newGameButton.interactable = canStartGame;
newGameButton.interactable = canStartGame;
paymentText.gameObject.SetActive(!canStartGame);
}
private void ChangePlayButtonInteractable()

View File

@ -701,7 +701,7 @@ PlayerSettings:
framebufferDepthMemorylessMode: 0
qualitySettingsNames: []
projectName: Mario-like platformer
organizationId: dis_bro
organizationId:
cloudEnabled: 0
legacyClampBlendShapeWeights: 0
hmiLoadingImage: {fileID: 0}