sea-battle/Assets/Scripts/UI/EnemyData.cs

113 lines
3.4 KiB
C#

using UnityEngine;
using System;
[CreateAssetMenu(fileName = "NewEnemyData", menuName = "Enemies/EnemyData")]
public class EnemyData : ScriptableObject
{
public string nickname;
[Header("Àíèìàöèè ïåðñîíàæà")]
public AnimatorOverrideController animatorOverride; // äëÿ ïîêàäðîâîé àíèìàöèè
public Sprite characterSprite; // òåêóùèé/íåéòðàëüíûé ñïðàéò (fallback)
[Header("Îçâó÷êà ïîáåäû èãðîêà")]
public AudioClip[] playerVictory;
[Header("Îçâó÷êà ïîáåäû áîòà")]
public AudioClip[] playerDefeat;
[Header("Ôðàçû äëÿ äèàëîãà")]
public DialogueLine[] dialogues;
[Header("Ñîáûòèéíûå äèàëîãè")]
public DialogueLine[] onPlayerHit; // Èãðîê ïîïàë
public DialogueLine[] onPlayerMiss; // Èãðîê ïðîìàçàë
public DialogueLine[] onBotHit; // Áîò ïîïàë
public DialogueLine[] onBotMiss; // Áîò ïðîìàçàë
public DialogueLine[] onPlayerShipDestroyed; // Êîðàáëü èãðîêà óíè÷òîæåí
public DialogueLine[] onBotShipDestroyed; // Êîðàáëü áîòà óíè÷òîæåí
// Âñïîìîãàòåëüíûé ìåòîä äëÿ ïîëó÷åíèÿ ñëó÷àéíîé ôðàçû èç êàòåãîðèè
public DialogueLine? GetRandomDialogue(DialogueEventType eventType)
{
DialogueLine[] sourceArray = null;
switch (eventType)
{
case DialogueEventType.PlayerHit: sourceArray = onPlayerHit; break;
case DialogueEventType.PlayerMiss: sourceArray = onPlayerMiss; break;
case DialogueEventType.BotHit: sourceArray = onBotHit; break;
case DialogueEventType.BotMiss: sourceArray = onBotMiss; break;
case DialogueEventType.PlayerShipDestroyed: sourceArray = onPlayerShipDestroyed; break;
case DialogueEventType.BotShipDestroyed: sourceArray = onBotShipDestroyed; break;
}
if (sourceArray != null && sourceArray.Length > 0)
{
return sourceArray[UnityEngine.Random.Range(0, sourceArray.Length)];
}
return null;
}
}
public enum DialogueEventType
{
PlayerHit,
PlayerMiss,
BotHit,
BotMiss,
PlayerShipDestroyed,
BotShipDestroyed
}
// Enum äëÿ èì¸í ñîñòîÿíèé àíèìàòîðà
public enum AnimationName
{
None,
TalkBot1,
TalkBot2,
TalkBot3,
TalkBot4,
AngerBot1,
AngerBot2,
LaughterBot1,
BackBot,
ForwardBot
}
[System.Serializable]
public struct DialogueLine
{
[TextArea(2, 5)]
public string text;
// Òåïåðü èñïîëüçóåì enum âìåñòî ñòðîêè — â èíñïåêòîðå áóäåò âûïàäàþùèé ñïèñîê
public AnimationName animationName; // íàïðèìåð AnimationName.TalkBot1
public AudioClip voiceClip;
}
// Âñïîìîãàòåëüíûé êëàññ, êîòîðûé äà¸ò ñòðîêîâîå èìÿ ñîñòîÿíèÿ àíèìàòîðà äëÿ êàæäîãî enum-÷ëåíà
public static class AnimationNameExtensions
{
public static string ToStateName(this AnimationName name)
{
switch (name)
{
case AnimationName.TalkBot1: return "talk_bot_1";
case AnimationName.TalkBot2: return "talk_bot_2";
case AnimationName.TalkBot3: return "talk_bot_3";
case AnimationName.TalkBot4: return "talk_bot_4";
case AnimationName.AngerBot1: return "anger_bot_1";
case AnimationName.AngerBot2: return "anger_bot_2";
case AnimationName.LaughterBot1: return "laughter_bot_1";
case AnimationName.BackBot: return "back_bot";
case AnimationName.ForwardBot: return "forward_bot";
default: return string.Empty;
}
}
}