HeavenStudio/Assets/Scripts/Games/RhythmTweezers/Tweezers.cs
Braedon a65a6c012c Long hair rhythm tweezers but very buggy (read desc)
Hair plucking is a bit weird a beat after a long pull.

The tweezers don't automatically skip to the beat they're supposed to be when pulling since it can put things out of sync.

You can't pull two long hairs at a time for some reason.

The long hair doesn't rotate correctly towards the tweezers.

I'm very tired if someone could go in and clean some of this up that would be great.
2022-02-10 21:14:09 -05:00

124 lines
3.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using RhythmHeavenMania.Util;
namespace RhythmHeavenMania.Games.RhythmTweezers
{
public class Tweezers : MonoBehaviour
{
public int hitOnFrame;
[NonSerialized] public Animator anim;
private Animator vegetableAnim;
private RhythmTweezers game;
private bool pluckingThisFrame;
private bool holdingHair;
public SpriteRenderer heldHairSprite;
private void Start()
{
anim = GetComponent<Animator>();
vegetableAnim = RhythmTweezers.instance.VegetableAnimator;
game = RhythmTweezers.instance;
}
private void LateUpdate()
{
if (PlayerInput.Pressed())
{
if (!pluckingThisFrame) // Did you do a successful pluck earlier in the frame?
{
DropHeldHair();
anim.Play("Tweezers_Pluck", 0, 0);
}
}
pluckingThisFrame = false;
}
public void Pluck(bool ace, Hair hair)
{
DropHeldHair();
if (ace)
{
Jukebox.PlayOneShotGame($"rhythmTweezers/shortPluck{UnityEngine.Random.Range(1, 21)}");
hair.hairSprite.SetActive(false);
hair.stubbleSprite.SetActive(true);
game.hairsLeft--;
game.eyeSize = Mathf.Clamp(game.eyeSize + 1, 0, 10);
if (game.hairsLeft <= 0)
vegetableAnim.Play("HopFinal", 0, 0);
else
vegetableAnim.Play("Hop" + game.eyeSize.ToString(), 0, 0);
anim.Play("Tweezers_Pluck_Success", 0, 0);
}
else
{
Jukebox.PlayOneShotGame($"rhythmTweezers/shortPluck{UnityEngine.Random.Range(1, 21)}");
Jukebox.PlayOneShot("miss");
hair.hairSprite.SetActive(false);
hair.missedSprite.SetActive(true);
vegetableAnim.Play("Blink", 0, 0);
anim.Play("Tweezers_Pluck_Fail", 0, 0);
}
pluckingThisFrame = true; // Prevents standard pluck from playing in LateUpdate().
holdingHair = true;
}
public void LongPluck(bool ace, LongHair hair)
{
DropHeldHair();
if (ace)
{
hair.hairSprite.SetActive(false);
hair.stubbleSprite.SetActive(true);
game.hairsLeft--;
game.eyeSize = Mathf.Clamp(game.eyeSize + 1, 0, 10);
if (game.hairsLeft <= 0)
vegetableAnim.Play("HopFinal", 0, 0);
else
vegetableAnim.Play("Hop" + game.eyeSize.ToString(), 0, 0);
anim.Play("Tweezers_Pluck_Success", 0, 0);
}
pluckingThisFrame = true;
holdingHair = true;
}
public void DropHeldHair()
{
if (!holdingHair) return;
var droppedHair = GameObject.Instantiate(game.pluckedHairBase, game.DroppedHairsHolder.transform).GetComponent<SpriteRenderer>();
droppedHair.gameObject.SetActive(true);
droppedHair.transform.position = heldHairSprite.transform.position;
droppedHair.transform.rotation = heldHairSprite.transform.rotation;
droppedHair.sprite = heldHairSprite.sprite;
// Make the hair spin.
// (The prefab has a Rigidbody2D component already so that it falls)
droppedHair.GetComponent<Rigidbody2D>().interpolation = RigidbodyInterpolation2D.Interpolate;
droppedHair.GetComponent<Rigidbody2D>().angularVelocity = UnityEngine.Random.Range(-120f, 120f);
holdingHair = false;
}
}
}