113 lines
3.4 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|