2025-06-03 02:42:28 -04:00
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using Ichni.RhythmGame;
|
|
|
|
|
using Sirenix.OdinInspector;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.InputSystem;
|
|
|
|
|
using UnityEngine.InputSystem.EnhancedTouch;
|
|
|
|
|
using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch;
|
|
|
|
|
using TouchPhase = UnityEngine.InputSystem.TouchPhase;
|
|
|
|
|
|
|
|
|
|
namespace Ichni
|
|
|
|
|
{
|
|
|
|
|
public class InputManager : SerializedMonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
public List<Tap> checkingTapList;
|
|
|
|
|
public List<Stay> checkingStayList;
|
|
|
|
|
public List<Hold> checkingHoldList;
|
|
|
|
|
public List<Flick> checkingFlickList;
|
|
|
|
|
|
|
|
|
|
public List<InputUnitTap> inputUnitTapList;
|
|
|
|
|
public List<InputUnitSlide> inputUnitSlideList;
|
|
|
|
|
public List<InputUnitRelease> inputUnitReleaseList;
|
|
|
|
|
|
|
|
|
|
private void Start()
|
|
|
|
|
{
|
|
|
|
|
for (int i = -2; i <= 12; i++)
|
|
|
|
|
{
|
|
|
|
|
inputUnitTapList.Add(new InputUnitTap(i, Vector2.zero));
|
|
|
|
|
inputUnitSlideList.Add(new InputUnitSlide(i, Vector2.zero, Vector2.zero));
|
|
|
|
|
inputUnitReleaseList.Add(new InputUnitRelease(i, Vector2.zero));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Update()
|
|
|
|
|
{
|
2025-06-06 10:14:55 -04:00
|
|
|
if (!GameManager.instance.audioManager.songPlayer.isPlaying)
|
2025-06-03 02:42:28 -04:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Application.platform == RuntimePlatform.WindowsPlayer ||
|
|
|
|
|
Application.platform == RuntimePlatform.OSXPlayer ||
|
|
|
|
|
Application.platform == RuntimePlatform.WindowsEditor ||
|
|
|
|
|
Application.platform == RuntimePlatform.OSXEditor)
|
|
|
|
|
{
|
|
|
|
|
if (Mouse.current.leftButton.wasPressedThisFrame)
|
|
|
|
|
{
|
|
|
|
|
SetNewInputUnitTap(-1, Mouse.current.position.ReadValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Mouse.current.leftButton.isPressed)
|
|
|
|
|
{
|
|
|
|
|
SetNewInputUnitSlide(-1, Mouse.current.position.ReadValue(), Mouse.current.delta.ReadValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Mouse.current.rightButton.wasPressedThisFrame)
|
|
|
|
|
{
|
|
|
|
|
SetNewInputUnitTap(-2, Mouse.current.position.ReadValue());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Mouse.current.rightButton.isPressed)
|
|
|
|
|
{
|
|
|
|
|
SetNewInputUnitSlide(-2, Mouse.current.position.ReadValue(), Mouse.current.delta.ReadValue());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (var touch in Touch.activeTouches)
|
|
|
|
|
{
|
|
|
|
|
switch (touch.phase)
|
|
|
|
|
{
|
|
|
|
|
case TouchPhase.Began:
|
|
|
|
|
SetNewInputUnitTap(touch.finger.index, touch.screenPosition);
|
|
|
|
|
SetNewInputUnitSlide(touch.finger.index, touch.screenPosition, Vector2.zero);
|
|
|
|
|
break;
|
|
|
|
|
case TouchPhase.Stationary:
|
|
|
|
|
SetNewInputUnitSlide(touch.finger.index, touch.screenPosition, Vector2.zero);
|
|
|
|
|
break;
|
|
|
|
|
case TouchPhase.Moved:
|
|
|
|
|
SetNewInputUnitSlide(touch.finger.index, touch.screenPosition, touch.delta);
|
|
|
|
|
break;
|
|
|
|
|
case TouchPhase.Ended:
|
|
|
|
|
SetNewInputUnitRelease(touch.finger.index, touch.screenPosition);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<InputUnitTap> enablingInputUnitTapList = inputUnitTapList.FindAll(x => x.isEnabling);
|
|
|
|
|
List<InputUnitSlide> enablingInputUnitSlideList = inputUnitSlideList.FindAll(x => x.isEnabling);
|
|
|
|
|
List<InputUnitRelease> enablingInputUnitReleaseList = inputUnitReleaseList.FindAll(x => x.isEnabling);
|
|
|
|
|
|
|
|
|
|
foreach (InputUnitTap inputUnitTap in enablingInputUnitTapList)
|
|
|
|
|
{
|
|
|
|
|
List<Tap> availableTaps = new List<Tap>();
|
|
|
|
|
foreach (Tap tap in checkingTapList)
|
|
|
|
|
{
|
|
|
|
|
if (tap.CheckJudgeAvailability(inputUnitTap))
|
|
|
|
|
{
|
|
|
|
|
availableTaps.Add(tap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (availableTaps.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
availableTaps.Sort();
|
|
|
|
|
Tap closestTap = availableTaps[0];
|
|
|
|
|
Debug.Log(closestTap.exactJudgeTime);
|
|
|
|
|
closestTap.ExecuteStartJudge();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (InputUnitSlide inputUnitSlide in enablingInputUnitSlideList)
|
|
|
|
|
{
|
|
|
|
|
/*List<Flick> availableFlicks = new List<Flick>();
|
|
|
|
|
|
|
|
|
|
foreach (Flick flick in checkingFlickList)
|
|
|
|
|
{
|
|
|
|
|
if (flick.CheckJudgeAvailability(inputUnitSlide))
|
|
|
|
|
{
|
|
|
|
|
availableFlicks.Add(flick);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (availableFlicks.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
availableFlicks.Sort();
|
|
|
|
|
Flick closestFlick = availableFlicks[0];
|
|
|
|
|
closestFlick.SetFirstJudge(inputUnitSlide.inputDeltaPosition);
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
List<Stay> availableStays = new List<Stay>();
|
|
|
|
|
foreach (Stay stay in checkingStayList)
|
|
|
|
|
{
|
|
|
|
|
if (stay.CheckJudgeAvailability(inputUnitSlide))
|
|
|
|
|
{
|
|
|
|
|
availableStays.Add(stay);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach (Stay stay in availableStays)
|
|
|
|
|
{
|
|
|
|
|
stay.ExecuteStartJudge();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void LateUpdate()
|
|
|
|
|
{
|
2025-06-06 10:14:55 -04:00
|
|
|
if (!GameManager.instance.audioManager.songPlayer.isPlaying)
|
2025-06-03 02:42:28 -04:00
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < inputUnitTapList.Count; i++)
|
|
|
|
|
{
|
|
|
|
|
inputUnitTapList[i].isEnabling = false;
|
|
|
|
|
inputUnitSlideList[i].isEnabling = false;
|
|
|
|
|
inputUnitSlideList[i].inputDeltaPosition = Vector2.zero;
|
|
|
|
|
inputUnitSlideList[i].isEnabling = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetNewInputUnitTap(int fingerId, Vector2 inputPosition)
|
|
|
|
|
{
|
|
|
|
|
InputUnitTap inputUnitTap = inputUnitTapList.Find(x => x.fingerId == fingerId);
|
|
|
|
|
inputUnitTap.isEnabling = true;
|
|
|
|
|
inputUnitTap.inputPosition = inputPosition;
|
|
|
|
|
//Debug.Log("Tap: " + fingerId + " " + inputPosition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetNewInputUnitSlide(int fingerId, Vector2 inputPosition, Vector2 inputDeltaPosition)
|
|
|
|
|
{
|
|
|
|
|
InputUnitSlide inputUnitSlide = inputUnitSlideList.Find(x => x.fingerId == fingerId);
|
|
|
|
|
inputUnitSlide.isEnabling = true;
|
|
|
|
|
inputUnitSlide.inputPosition = inputPosition;
|
|
|
|
|
inputUnitSlide.inputDeltaPosition = inputDeltaPosition;
|
|
|
|
|
//Debug.Log("Slide: " + fingerId + " " + inputPosition + " " + inputDeltaPosition);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetNewInputUnitRelease(int fingerId, Vector2 inputPosition)
|
|
|
|
|
{
|
|
|
|
|
InputUnitRelease inputUnitRelease = inputUnitReleaseList.Find(x => x.fingerId == fingerId);
|
|
|
|
|
inputUnitRelease.isEnabling = true;
|
|
|
|
|
inputUnitRelease.inputPosition = inputPosition;
|
|
|
|
|
//Debug.Log("Release: " + fingerId + " " + inputPosition);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class InputUnit
|
|
|
|
|
{
|
|
|
|
|
public int fingerId;
|
|
|
|
|
public bool isEnabling;
|
|
|
|
|
|
|
|
|
|
public Vector2 inputPosition;
|
|
|
|
|
public InputManager inputManager => GameManager.instance.inputManager;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class InputUnitTap : InputUnit
|
|
|
|
|
{
|
|
|
|
|
public InputUnitTap(int fingerId, Vector2 inputPosition)
|
|
|
|
|
{
|
|
|
|
|
this.fingerId = fingerId;
|
|
|
|
|
this.inputPosition = inputPosition;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class InputUnitSlide : InputUnit
|
|
|
|
|
{
|
|
|
|
|
public Vector2 inputDeltaPosition;
|
|
|
|
|
|
|
|
|
|
public InputUnitSlide(int fingerId, Vector2 inputPosition, Vector2 inputDeltaPosition)
|
|
|
|
|
{
|
|
|
|
|
this.fingerId = fingerId;
|
|
|
|
|
this.inputPosition = inputPosition;
|
|
|
|
|
this.inputDeltaPosition = inputDeltaPosition;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class InputUnitRelease : InputUnit
|
|
|
|
|
{
|
|
|
|
|
public InputUnitRelease(int fingerId, Vector2 inputPosition)
|
|
|
|
|
{
|
|
|
|
|
this.fingerId = fingerId;
|
|
|
|
|
this.inputPosition = inputPosition;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|