HeavenStudioPlus/Assets/Scripts/Games/NailCarpenter/LongNail.cs
wookywok 11c1ae8f50 Big Nail Carpenter Updates (#743)
* Made Nail half-speed, changed long nail from hold B to press B, touched up animations

- Made Nail Carpenter half-speed -- it shouldn't change much, just remember to double your tempo!

- Also changed the long nail input from hold and release to simply pressing B -- the old way gives less reaction time and is just less fun overall

- Also touched up the animations to make them snappier and improve gamefeel

* Cleaned up animations a bit further, changed 'fusuma' to 'shoji'

* Further animation improvements

Hit animations are now instant, and the hammer animation is about snappy and responsive as it should be

* Fixed touch controls

FIxed touch controls being a miss no matter what

* reimplemented touch mode whiffing

cuz i forgor

* fixed a sound effect playing at the wrong time

* spawning logic overhaul

also fixed issue where sweets would be hittable if a nail could be instead
cues at full speed for testing need to halve the speed of everything later

* remove stray sfx call

* add missing exclaim animations to the forced object types

* improve chunk based spawning

improve animator setup

* remove unused stuff

* new animations

girl randomly blinks
puddings bounce when passing the girl
nails pop out when missing

* fix the sweet break check

---------

Co-authored-by: minenice55 <star.elementa@gmail.com>
2024-03-15 19:18:21 +00:00

83 lines
No EOL
2.9 KiB
C#

using UnityEngine;
using HeavenStudio.Util;
using HeavenStudio.InputSystem;
namespace HeavenStudio.Games.Scripts_NailCarpenter
{
public class LongNail : MonoBehaviour
{
public double targetBeat;
public float targetX;
public float metresPerSecond;
public Animator nailAnim;
private NailCarpenter game;
public void Init()
{
game = NailCarpenter.instance;
game.ScheduleInput(targetBeat, 0, NailCarpenter.InputAction_AltPress, HammmerJust, HammmerMiss, null);
// wrongInput
if (PlayerInput.CurrentControlStyle != InputController.ControlStyles.Touch)
{
game.ScheduleUserInput(targetBeat, 0, NailCarpenter.InputAction_RegPress, WeakHammmerJust, null, null);
}
Update();
}
private void HammmerJust(PlayerActionEvent caller, float state)
{
game.Carpenter.DoScaledAnimationAsync("carpenterHit", 0.25f);
if (state >= 1f || state <= -1f)
{
nailAnim.DoScaledAnimationAsync(
(state >= 1f ? "longNailBendRight" : "longNailBendLeft"), 0.25f);
SoundByte.PlayOneShot("miss");
return;
}
SoundByte.PlayOneShotGame("nailCarpenter/HammerStrong");
nailAnim.DoScaledAnimationAsync("longNailHammered", 0.25f);
game.Carpenter.DoScaledAnimationAsync("eyeSmile", 0.25f, animLayer: 1);
}
private void WeakHammmerJust(PlayerActionEvent caller, float state)
{
game.ScoreMiss();
game.Carpenter.DoScaledAnimationAsync("carpenterHit", 0.25f);
if (state >= 1f || state <= -1f)
{
nailAnim.DoScaledAnimationAsync(
(state >= 1f ? "longNailBendRight" : "longNailBendLeft"), 0.25f);
SoundByte.PlayOneShot("miss");
return;
}
SoundByte.PlayOneShotGame("nailCarpenter/HammerWeak");
nailAnim.DoScaledAnimationAsync("longNailWeakHammered", 0.25f);
}
private void HammmerMiss(PlayerActionEvent caller)
{
game.Carpenter.DoScaledAnimationAsync("eyeBlink", 0.25f, animLayer: 1);
nailAnim.DoScaledAnimationAsync("longNailMiss", 0.5f);
}
private void Update()
{
var cond = Conductor.instance;
if (cond.isPlaying && !cond.isPaused)
{
double beat = cond.songPositionInBeats;
Vector3 pos = transform.position;
pos.x = targetX + (float)((beat - targetBeat) * metresPerSecond);
transform.position = pos;
if (targetBeat != double.MinValue)
{
if (beat >= targetBeat + 9) Destroy(gameObject);
}
}
}
}
}