HeavenStudio/Assets/Scripts/Games/RhythmTweezers/LongHair.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

78 lines
2.5 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using RhythmHeavenMania.Util;
namespace RhythmHeavenMania.Games.RhythmTweezers
{
public class LongHair : PlayerActionObject
{
public float createBeat;
public GameObject hairSprite;
public GameObject stubbleSprite;
private RhythmTweezers game;
private Tweezers tweezers;
private bool isHolding = false;
private float holdBeat = 0f;
public GameObject holder;
private void Awake()
{
game = RhythmTweezers.instance;
tweezers = game.Tweezers;
}
private void Update()
{
float stateBeat = Conductor.instance.GetPositionFromBeat(createBeat + game.tweezerBeatOffset, game.beatInterval);
StateCheck(stateBeat);
if (PlayerInput.Pressed() && tweezers.hitOnFrame == 0)
{
if (state.perfect)
{
Jukebox.PlayOneShotGame($"rhythmTweezers/longPull{UnityEngine.Random.Range(1, 5)}");
isHolding = true;
holdBeat = Conductor.instance.songPositionInBeats;
}
}
if (isHolding && Conductor.instance.songPositionInBeats >= holdBeat + 0.5f)
{
Destroy(holder.transform.GetChild(0).gameObject);
isHolding = false;
Ace();
}
if (isHolding)
{
holder.transform.eulerAngles = new Vector3(0, 0, tweezers.transform.eulerAngles.z * 1.056f);
holder.transform.GetChild(0).transform.localScale = Vector2.one / holder.transform.localScale;
float normalizedBeat = Conductor.instance.GetPositionFromBeat(holdBeat, 0.5f);
GetComponent<Animator>().Play("LoopPull", 0, normalizedBeat);
tweezers.anim.Play("Tweezers_LongPluck", 0, normalizedBeat);
// float angleBetweenTweezersAndHair = angleBtw2Points(tweezers.transform.position, holder.transform.position);
// holder.transform.rotation = Quaternion.Euler(new Vector3(0, 0, angleBetweenTweezersAndHair));
}
}
float angleBtw2Points(Vector3 a, Vector3 b)
{
return Mathf.Atan2(a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
}
public void Ace()
{
Jukebox.PlayOneShotGame("rhythmTweezers/longPullEnd");
tweezers.LongPluck(true, this);
tweezers.hitOnFrame++;
}
}
}