2026-01-12 09:36:17 +03:00

97 lines
4.5 KiB
C#

using System.Collections;
using System.Diagnostics.SymbolStore;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class DoggyEffect : MonoBehaviour, IEffect
{
string text =
"SYSTEM_OVERLOAD...\r\nVICTORY_PROTOCOL://ENGAGED\r\nROBO-HOUND_UNIT_247: STATUS//ONLINE\r\nDIRECTIVE//ACHIEVED\r\nTHREAT_ANALYSIS://NULL\r\nBOOT_SEQUENCE: 0xFA 0x27 0x9C 0xE1\r\nCORE_TEMP: NOMINAL\r\nNEURAL_LAYER: SYNCHRONIZED\r\nAWAITING_NEW_ORDERS...\r\n//LOG_ENTRY: TACTICAL_SUPREMACY_ESTABLISHED\r\n//PERFORMANCE_METRICS: PEAK_EFFICIENCY\r\nBINARY_SALUTE: 01010110 01001001 01000011 01010100 01001111 01010010 01011001\r\nMEMORY_ADDR: 0x7FE80A3C\r\nPURGE_CACHE... COMPLETE\r\nREBOOT_IMMINENT...\r\nRUN_SYSTEM_DIAG...\r\nALL_SYSTEMS_NOMINAL\r\nWEAPONS_CLEAN...\r\nFUEL_CELL: 98.7%\r\nCONNECTION_ESTABLISHED\r\nUPLOADING_VICTORY_DATA...\r\nDOWNLOADING_NEW_DIRECTIVES...\r\nAWAITING_NEXT_TARGET...\r\n//END_OF_LINE" +
"SYSTEM_OVERLOAD...\r\nVICTORY_PROTOCOL://ENGAGED\r\nROBO-HOUND_UNIT_247: STATUS//ONLINE\r\nDIRECTIVE//ACHIEVED\r\nTHREAT_ANALYSIS://NULL\r\nBOOT_SEQUENCE: 0xFA 0x27 0x9C 0xE1\r\nCORE_TEMP: NOMINAL\r\nNEURAL_LAYER: SYNCHRONIZED\r\nAWAITING_NEW_ORDERS...\r\n//LOG_ENTRY: TACTICAL_SUPREMACY_ESTABLISHED\r\n//PERFORMANCE_METRICS: PEAK_EFFICIENCY\r\nBINARY_SALUTE: 01010110 01001001 01000011 01010100 01001111 01010010 01011001\r\nMEMORY_ADDR: 0x7FE80A3C\r\nPURGE_CACHE... COMPLETE\r\nREBOOT_IMMINENT...\r\nRUN_SYSTEM_DIAG...\r\nALL_SYSTEMS_NOMINAL\r\nWEAPONS_CLEAN...\r\nFUEL_CELL: 98.7%\r\nCONNECTION_ESTABLISHED\r\nUPLOADING_VICTORY_DATA...\r\nDOWNLOADING_NEW_DIRECTIVES...\r\nAWAITING_NEXT_TARGET...\r\n//END_OF_LINE";
[SerializeField] Image panel;
[SerializeField] TextMeshProUGUI label;
public void Play()
{
StopAllCoroutines();
StartCoroutine(Anim());
}
IEnumerator Anim()
{
label.text = "";
// Анимация появления панели
float panelFadeDuration = 0.5f;
float elapsedTime = 0f;
Color targetPanelColor = panel.color;
Color targetLabelColor = label.color;
targetPanelColor.a = 0.85f; // Непрозрачный
targetLabelColor.a = 1; // Непрозрачный
Color startPanelColor = panel.color;
Color startLabelColor = label.color;
startPanelColor.a = 0f;
startLabelColor.a = 0f;
// Плавное появление панели
while (elapsedTime < panelFadeDuration)
{
panel.color = Color.Lerp(startPanelColor, targetPanelColor, elapsedTime / panelFadeDuration);
label.color = Color.Lerp(startLabelColor, targetLabelColor, elapsedTime / panelFadeDuration);
elapsedTime += Time.deltaTime;
yield return null;
}
panel.color = targetPanelColor;
label.color = targetLabelColor;
// Анимация текста в течение 5 секунд
float textDisplayTime = 3f;
float charactersPerSecond = text.Length / textDisplayTime;
float currentTime = 0f;
while (currentTime < textDisplayTime)
{
int charactersToShow = Mathf.FloorToInt(currentTime * charactersPerSecond);
charactersToShow = Mathf.Clamp(charactersToShow, 0, text.Length);
label.text = text.Substring(0, charactersToShow);
currentTime += Time.deltaTime;
yield return null;
}
// Убедимся, что весь текст показан
label.text = text;
// Небольшая пауза перед исчезновением
yield return new WaitForSeconds(0.5f);
// Анимация исчезновения панели
elapsedTime = 0f;
startPanelColor = panel.color;
targetPanelColor = panel.color;
targetPanelColor.a = 0f;
startLabelColor = panel.color;
targetLabelColor = label.color;
targetLabelColor.a = 0f;
panelFadeDuration *= 3;
while (elapsedTime < panelFadeDuration)
{
panel.color = Color.Lerp(startPanelColor, targetPanelColor, elapsedTime / panelFadeDuration);
label.color = Color.Lerp(startLabelColor, targetLabelColor, elapsedTime / panelFadeDuration);
elapsedTime += Time.deltaTime;
yield return null;
}
panel.color = targetPanelColor;
//targetLabelColor.a = 1;
label.color = targetLabelColor;
// Очищаем текст в конце
label.text = "";
}
}