2021-12-25 12:16:40 +00:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
using DG.Tweening;
|
|
|
|
using RhythmHeavenMania.Util;
|
|
|
|
|
|
|
|
namespace RhythmHeavenMania.Games.Spaceball
|
|
|
|
{
|
|
|
|
public class SpaceballPlayer : MonoBehaviour
|
|
|
|
{
|
|
|
|
private Animator anim;
|
|
|
|
|
2022-01-17 05:00:26 +00:00
|
|
|
private int currentHitInList = 0;
|
2021-12-25 12:16:40 +00:00
|
|
|
|
2021-12-26 07:25:17 +00:00
|
|
|
public int costume;
|
|
|
|
|
|
|
|
public SpriteRenderer PlayerSprite;
|
|
|
|
public List<SpriteSheet> PlayerSpriteSheets = new List<SpriteSheet>();
|
|
|
|
|
|
|
|
[System.Serializable]
|
|
|
|
public class SpriteSheet
|
|
|
|
{
|
|
|
|
public List<Sprite> sprites;
|
|
|
|
}
|
|
|
|
|
2021-12-25 12:16:40 +00:00
|
|
|
public static SpaceballPlayer instance { get; set; }
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
{
|
|
|
|
instance = this;
|
|
|
|
}
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
{
|
|
|
|
anim = GetComponent<Animator>();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
{
|
2022-01-17 05:00:26 +00:00
|
|
|
if (Spaceball.instance.EligibleHits.Count == 0)
|
2021-12-25 12:16:40 +00:00
|
|
|
currentHitInList = 0;
|
|
|
|
|
|
|
|
if (PlayerInput.Pressed())
|
|
|
|
{
|
|
|
|
Swing();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-12-26 07:25:17 +00:00
|
|
|
public void SetCostume(int costume)
|
|
|
|
{
|
|
|
|
this.costume = costume;
|
|
|
|
anim.Play("Idle", 0, 0);
|
|
|
|
}
|
|
|
|
|
2021-12-25 12:16:40 +00:00
|
|
|
public void Swing()
|
|
|
|
{
|
2022-01-17 05:00:26 +00:00
|
|
|
var EligibleHits = Spaceball.instance.EligibleHits;
|
|
|
|
bool canHit = (Spaceball.instance.EligibleHits.Count > 0) && (currentHitInList < Spaceball.instance.EligibleHits.Count);
|
2021-12-28 07:38:55 +00:00
|
|
|
|
2022-01-17 05:00:26 +00:00
|
|
|
int events = Spaceball.instance.MultipleEventsAtOnce();
|
|
|
|
|
|
|
|
for (int eventI = 0; eventI < events; eventI++)
|
|
|
|
{
|
|
|
|
if (canHit)
|
|
|
|
{
|
|
|
|
SpaceballBall ball = EligibleHits[currentHitInList].gameObject.GetComponent<SpaceballBall>();
|
|
|
|
|
|
|
|
if (EligibleHits[currentHitInList].perfect)
|
|
|
|
{
|
|
|
|
ball.hit = true;
|
|
|
|
ball.hitBeat = Conductor.instance.songPositionInBeats;
|
|
|
|
ball.hitPos = ball.Holder.transform.localPosition;
|
|
|
|
ball.hitRot = ball.Holder.transform.eulerAngles.z;
|
|
|
|
|
|
|
|
Jukebox.PlayOneShotGame("spaceball/hit");
|
|
|
|
|
|
|
|
ball.randomEndPosX = Random.Range(40f, 55f);
|
|
|
|
|
|
|
|
ball.anim.enabled = false;
|
|
|
|
}
|
|
|
|
else if (EligibleHits[currentHitInList].late || EligibleHits[currentHitInList].early)
|
|
|
|
{
|
|
|
|
ball.Holder.transform.GetChild(0).gameObject.AddComponent<Rotate>().rotateSpeed = -55;
|
|
|
|
|
|
|
|
ball.enabled = false;
|
|
|
|
ball.anim.enabled = false;
|
|
|
|
|
|
|
|
Rigidbody2D rb = ball.gameObject.AddComponent<Rigidbody2D>();
|
|
|
|
rb.bodyType = RigidbodyType2D.Dynamic;
|
|
|
|
rb.AddForce(transform.up * 1100);
|
|
|
|
rb.AddForce(transform.right * 400);
|
|
|
|
rb.gravityScale = 9;
|
|
|
|
|
|
|
|
Jukebox.PlayOneShot("miss");
|
|
|
|
}
|
|
|
|
|
|
|
|
ball.RemoveObject(currentHitInList);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!canHit)
|
2022-01-21 01:24:30 +00:00
|
|
|
Jukebox.PlayOneShotGame("spaceball/swing");
|
2021-12-26 07:25:17 +00:00
|
|
|
|
2021-12-25 12:16:40 +00:00
|
|
|
anim.Play("Swing", 0, 0);
|
|
|
|
}
|
|
|
|
|
2021-12-26 07:25:17 +00:00
|
|
|
public void SetSprite(int id)
|
|
|
|
{
|
|
|
|
PlayerSprite.sprite = PlayerSpriteSheets[costume].sprites[id];
|
|
|
|
}
|
2021-12-25 12:16:40 +00:00
|
|
|
}
|
|
|
|
}
|