reworked blue bear emotions again

This commit is contained in:
Rapandrasmus 2023-12-10 16:39:31 +01:00
parent 71dbb5cb3d
commit 0b4b3dd542

View file

@ -37,20 +37,14 @@ namespace HeavenStudio.Games.Loaders
new("open", true, "Should Open Mouth") new("open", true, "Should Open Mouth")
} }
}, },
new GameAction("setEmotion", "Emotion") new GameAction("stretchEmotion", "Emotion")
{ {
function = delegate { var e = eventCaller.currentEntity; BlueBear.instance.SetEmotion(e.beat, e["type"]); }, function = delegate { var e = eventCaller.currentEntity; if (e["instant"]) BlueBear.instance.SetEmotion(e.beat, e["type"]); },
parameters = new List<Param>()
{
new Param("type", BlueBear.EmotionType.ClosedEyes, "Emotion", "Which emotion should the blue bear use?")
}
},
new GameAction("stretchEmotion", "Long Emotion")
{
defaultLength = 4, defaultLength = 4,
resizable = true, resizable = true,
parameters = new List<Param>() parameters = new List<Param>()
{ {
new Param("instant", false, "Instant"),
new Param("type", BlueBear.EmotionStretchType.LookUp, "Emotion", "Which emotion should the blue bear use?") new Param("type", BlueBear.EmotionStretchType.LookUp, "Emotion", "Which emotion should the blue bear use?")
} }
}, },
@ -59,6 +53,16 @@ namespace HeavenStudio.Games.Loaders
function = delegate { BlueBear.instance.Wind(); }, function = delegate { BlueBear.instance.Wind(); },
defaultLength = 0.5f defaultLength = 0.5f
}, },
new GameAction("sigh", "Sigh")
{
function = delegate { BlueBear.instance.Sigh(); },
defaultLength = 0.5f
},
new GameAction("open", "Open Mouth")
{
function = delegate { BlueBear.instance.OpenMouth(); },
defaultLength = 0.5f
},
new GameAction("story", "Story") new GameAction("story", "Story")
{ {
defaultLength = 4, defaultLength = 4,
@ -96,16 +100,9 @@ namespace HeavenStudio.Games
public class BlueBear : Minigame public class BlueBear : Minigame
{ {
public enum EmotionType
{
Neutral = 0,
ClosedEyes = 1,
Cry = 2,
Sigh = 3,
OpenMouth = 4
}
public enum EmotionStretchType public enum EmotionStretchType
{ {
NoEmotion = -1,
LookUp = 0, LookUp = 0,
Smile = 1, Smile = 1,
StartCrying = 2, StartCrying = 2,
@ -344,19 +341,19 @@ namespace HeavenStudio.Games
EmotionStretchType.LookUp => "OpenEyes", EmotionStretchType.LookUp => "OpenEyes",
EmotionStretchType.Smile => "Smile", EmotionStretchType.Smile => "Smile",
EmotionStretchType.StartCrying => "Sad", EmotionStretchType.StartCrying => "Sad",
EmotionStretchType.NoEmotion => "",
_ => throw new NotImplementedException(), _ => throw new NotImplementedException(),
}; };
headAndBodyAnim.DoNormalizedAnimation(animName, normalizedBeat); if (animName != "") headAndBodyAnim.DoNormalizedAnimation(animName, normalizedBeat);
} }
} }
private void HandleEmotions(double beat) private void HandleEmotions(double beat)
{ {
_allEmotionsStretch = EventCaller.GetAllInGameManagerList("blueBear", new string[] { "stretchEmotion" }); _allEmotionsStretch = EventCaller.GetAllInGameManagerList("blueBear", new string[] { "stretchEmotion" }).FindAll(x => !x["instant"]);
if (_allEmotionsStretch.Count == 0) return; if (_allEmotionsStretch.Count == 0) return;
UpdateEmotions(); UpdateEmotions();
var allEmosBeforeBeat = EventCaller.GetAllInGameManagerList("blueBear", new string[] { "stretchEmotion" }).FindAll(x => x.beat < beat); var allEmosBeforeBeat = _allEmotionsStretch.FindAll(x => x.beat < beat);
var allSetEmosBeforeBeat = EventCaller.GetAllInGameManagerList("blueBear", new string[] { "setEmotion" }).FindAll(x => x.beat < beat);
if (allEmosBeforeBeat.Count != 0) if (allEmosBeforeBeat.Count != 0)
{ {
if ((EmotionStretchType)allEmosBeforeBeat[^1]["type"] == EmotionStretchType.StartCrying) if ((EmotionStretchType)allEmosBeforeBeat[^1]["type"] == EmotionStretchType.StartCrying)
@ -368,13 +365,6 @@ namespace HeavenStudio.Games
headAndBodyAnim.DoScaledAnimationAsync("SmileIdle", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("SmileIdle", 0.5f);
} }
} }
if (allSetEmosBeforeBeat.Count != 0)
{
EmotionType lastType = (EmotionType)allSetEmosBeforeBeat[^1]["type"];
if (allEmosBeforeBeat.Count > 0 && allSetEmosBeforeBeat[^1].beat >= allEmosBeforeBeat[^1].beat) SetEmotion(beat, (int)lastType, false);
else SetEmotion(beat, (int)lastType);
}
} }
public override void OnPlay(double beat) public override void OnPlay(double beat)
@ -409,6 +399,16 @@ namespace HeavenStudio.Games
windAnim.DoScaledAnimationAsync("Wind", 0.5f); windAnim.DoScaledAnimationAsync("Wind", 0.5f);
} }
public void Sigh()
{
headAndBodyAnim.DoScaledAnimationAsync("Sigh", 0.5f);
}
public void OpenMouth()
{
_wantMouthOpen = true;
}
public void Bite(double beat, bool left, bool longBite) public void Bite(double beat, bool left, bool longBite)
{ {
_emotionCancelledBeat = beat; _emotionCancelledBeat = beat;
@ -484,28 +484,23 @@ namespace HeavenStudio.Games
{ {
_emotionCancelledBeat = beat; _emotionCancelledBeat = beat;
_wantMouthOpen = false; _wantMouthOpen = false;
crying = false;
switch (emotion) switch (emotion)
{ {
case (int)EmotionType.Neutral: case (int)EmotionStretchType.NoEmotion:
crying = false;
headAndBodyAnim.DoScaledAnimationAsync("Idle", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("Idle", 0.5f);
if (_allEmotionsStretch.Count == 0 || _lastEmotion != EmotionStretchType.Smile || !ableToStopSmile) return; if (_allEmotionsStretch.Count == 0 || _lastEmotion != EmotionStretchType.Smile || !ableToStopSmile) return;
headAndBodyAnim.DoScaledAnimationAsync("StopSmile", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("StopSmile", 0.5f);
break; break;
case (int)EmotionType.ClosedEyes: case (int)EmotionStretchType.LookUp:
headAndBodyAnim.DoScaledAnimationAsync("EyesClosed", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("EyesClosed", 0.5f);
crying = false;
break; break;
case (int)EmotionType.Cry: case (int)EmotionStretchType.StartCrying:
headAndBodyAnim.DoScaledAnimationAsync("CryIdle", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("CryIdle", 0.5f);
crying = true; crying = true;
break; break;
case (int)EmotionType.Sigh: case (int)EmotionStretchType.Smile:
headAndBodyAnim.DoScaledAnimationAsync("Sigh", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("SmileIdle", 0.5f);
crying = false;
break;
case (int)EmotionType.OpenMouth:
_wantMouthOpen = true;
break; break;
default: default:
break; break;