perf
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Ichni.RhythmGame;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
@@ -18,17 +19,21 @@ namespace Ichni
|
||||
public List<Flick> checkingFlickList;
|
||||
|
||||
public List<InputUnitTap> inputUnitTapList;
|
||||
public List<InputUnitSlide> inputUnitSlideList;
|
||||
public List<InputUnitRelease> inputUnitReleaseList;
|
||||
public List<InputUnitTouch> inputUnitTouchList;
|
||||
public List<InputUnitSwipe> inputUnitSwipeList;
|
||||
|
||||
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));
|
||||
}
|
||||
checkingTapList = new List<Tap>();
|
||||
checkingStayList = new List<Stay>();
|
||||
checkingHoldList = new List<Hold>();
|
||||
checkingFlickList = new List<Flick>();
|
||||
inputUnitTapList = new List<InputUnitTap>();
|
||||
inputUnitTouchList = new List<InputUnitTouch>();
|
||||
inputUnitSwipeList = new List<InputUnitSwipe>();
|
||||
RhythmInputManager.OnTap += SetNewInputUnitTap;
|
||||
RhythmInputManager.OnTouch += SetNewInputUnitTouch;
|
||||
RhythmInputManager.OnSwipe += SetNewInputUnitSwipe;
|
||||
}
|
||||
|
||||
public void Update()
|
||||
@@ -37,58 +42,8 @@ namespace Ichni
|
||||
{
|
||||
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)
|
||||
foreach (InputUnitTap inputUnitTap in inputUnitTapList)
|
||||
{
|
||||
List<Tap> availableTaps = new List<Tap>();
|
||||
foreach (Tap tap in checkingTapList)
|
||||
@@ -98,101 +53,133 @@ namespace Ichni
|
||||
availableTaps.Add(tap);
|
||||
}
|
||||
}
|
||||
|
||||
if (availableTaps.Count > 0)
|
||||
|
||||
List<Hold> availableHolds = new List<Hold>();
|
||||
foreach (Hold hold in checkingHoldList)
|
||||
{
|
||||
if (hold.CheckJudgeAvailability(inputUnitTap))
|
||||
{
|
||||
availableHolds.Add(hold);
|
||||
}
|
||||
}
|
||||
bool haveHold = availableHolds.Count > 0;
|
||||
bool haveTap = availableTaps.Count > 0;
|
||||
|
||||
Hold closestHold = availableHolds.Min();
|
||||
Tap closestTap = availableTaps.Min();
|
||||
|
||||
if (haveHold && haveTap)
|
||||
{
|
||||
if (closestHold.exactJudgeTime < closestTap.exactJudgeTime)
|
||||
{
|
||||
closestHold.ExecuteStartJudge();
|
||||
}
|
||||
else
|
||||
{
|
||||
closestTap.ExecuteStartJudge();
|
||||
}
|
||||
}
|
||||
else if (haveHold)
|
||||
{
|
||||
closestHold.ExecuteStartJudge();
|
||||
}
|
||||
else if (haveTap)
|
||||
{
|
||||
availableTaps.Sort();
|
||||
Tap closestTap = availableTaps[0];
|
||||
Debug.Log(closestTap.exactJudgeTime);
|
||||
closestTap.ExecuteStartJudge();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (InputUnitSlide inputUnitSlide in enablingInputUnitSlideList)
|
||||
|
||||
foreach (InputUnitSwipe inputUnitSwipe in inputUnitSwipeList)
|
||||
{
|
||||
/*List<Flick> availableFlicks = new List<Flick>();
|
||||
|
||||
List<Flick> availableFlicks = new List<Flick>();
|
||||
|
||||
foreach (Flick flick in checkingFlickList)
|
||||
{
|
||||
if (flick.CheckJudgeAvailability(inputUnitSlide))
|
||||
if (flick.CheckJudgeAvailability(inputUnitSwipe))
|
||||
{
|
||||
availableFlicks.Add(flick);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (availableFlicks.Count > 0)
|
||||
{
|
||||
availableFlicks.Sort();
|
||||
Flick closestFlick = availableFlicks[0];
|
||||
closestFlick.SetFirstJudge(inputUnitSlide.inputDeltaPosition);
|
||||
}*/
|
||||
|
||||
closestFlick.ExecuteStartJudge();
|
||||
}
|
||||
}
|
||||
|
||||
foreach (InputUnitTouch inputUnitTouch in inputUnitTouchList)
|
||||
{
|
||||
List<Stay> availableStays = new List<Stay>();
|
||||
foreach (Stay stay in checkingStayList)
|
||||
{
|
||||
if (stay.CheckJudgeAvailability(inputUnitSlide))
|
||||
if (stay.CheckJudgeAvailability(inputUnitTouch))
|
||||
{
|
||||
availableStays.Add(stay);
|
||||
}
|
||||
}
|
||||
|
||||
List<Hold> availableHolds = new List<Hold>();
|
||||
foreach (Hold hold in checkingHoldList)
|
||||
{
|
||||
if (hold.CheckJudgeAvailability(inputUnitTouch))
|
||||
{
|
||||
availableHolds.Add(hold);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (Stay stay in availableStays)
|
||||
{
|
||||
stay.ExecuteStartJudge();
|
||||
}
|
||||
|
||||
foreach (Hold hold in availableHolds)
|
||||
{
|
||||
hold.ExecuteProcessJudge();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void LateUpdate()
|
||||
{
|
||||
if (!GameManager.instance.audioManager.isPlaying)
|
||||
{
|
||||
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;
|
||||
}
|
||||
inputUnitTapList.Clear();
|
||||
inputUnitTouchList.Clear();
|
||||
inputUnitSwipeList.Clear();
|
||||
}
|
||||
|
||||
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);
|
||||
InputUnitTap inputUnitTap = new InputUnitTap(fingerId, inputPosition);
|
||||
if(!inputUnitTapList.Exists(x => x.fingerId == fingerId))
|
||||
{
|
||||
inputUnitTapList.Add(inputUnitTap);
|
||||
//Debug.Log("Tap: " + fingerId + " " + inputPosition);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNewInputUnitSlide(int fingerId, Vector2 inputPosition, Vector2 inputDeltaPosition)
|
||||
public void SetNewInputUnitTouch(int fingerId, Vector2 inputPosition)
|
||||
{
|
||||
InputUnitSlide inputUnitSlide = inputUnitSlideList.Find(x => x.fingerId == fingerId);
|
||||
inputUnitSlide.isEnabling = true;
|
||||
inputUnitSlide.inputPosition = inputPosition;
|
||||
inputUnitSlide.inputDeltaPosition = inputDeltaPosition;
|
||||
//Debug.Log("Slide: " + fingerId + " " + inputPosition + " " + inputDeltaPosition);
|
||||
InputUnitTouch inputUnitTouch = new InputUnitTouch(fingerId, inputPosition);
|
||||
if(!inputUnitTouchList.Exists(x => x.fingerId == fingerId))
|
||||
{
|
||||
inputUnitTouchList.Add(inputUnitTouch);
|
||||
}
|
||||
//Debug.Log("Touch: " + fingerId + " " + inputPosition);
|
||||
}
|
||||
|
||||
public void SetNewInputUnitRelease(int fingerId, Vector2 inputPosition)
|
||||
|
||||
public void SetNewInputUnitSwipe(int fingerId, Vector2 inputPosition, Vector2 delta)
|
||||
{
|
||||
InputUnitRelease inputUnitRelease = inputUnitReleaseList.Find(x => x.fingerId == fingerId);
|
||||
inputUnitRelease.isEnabling = true;
|
||||
inputUnitRelease.inputPosition = inputPosition;
|
||||
//Debug.Log("Release: " + fingerId + " " + inputPosition);
|
||||
InputUnitSwipe inputUnitSwipe = new InputUnitSwipe(fingerId, inputPosition, delta);
|
||||
if(!inputUnitSwipeList.Exists(x => x.fingerId == fingerId))
|
||||
{
|
||||
inputUnitSwipeList.Add(inputUnitSwipe);
|
||||
}
|
||||
//Debug.Log("Swipe: " + fingerId + " " + inputPosition + " " + delta);
|
||||
}
|
||||
}
|
||||
|
||||
public class InputUnit
|
||||
{
|
||||
public int fingerId;
|
||||
public bool isEnabling;
|
||||
|
||||
public Vector2 inputPosition;
|
||||
public InputManager inputManager => GameManager.instance.inputManager;
|
||||
}
|
||||
|
||||
public class InputUnitTap : InputUnit
|
||||
@@ -204,24 +191,24 @@ namespace Ichni
|
||||
}
|
||||
}
|
||||
|
||||
public class InputUnitSlide : InputUnit
|
||||
public class InputUnitTouch : InputUnit
|
||||
{
|
||||
public Vector2 inputDeltaPosition;
|
||||
|
||||
public InputUnitSlide(int fingerId, Vector2 inputPosition, Vector2 inputDeltaPosition)
|
||||
public InputUnitTouch(int fingerId, Vector2 inputPosition)
|
||||
{
|
||||
this.fingerId = fingerId;
|
||||
this.inputPosition = inputPosition;
|
||||
this.inputDeltaPosition = inputDeltaPosition;
|
||||
}
|
||||
}
|
||||
|
||||
public class InputUnitRelease : InputUnit
|
||||
public class InputUnitSwipe : InputUnit
|
||||
{
|
||||
public InputUnitRelease(int fingerId, Vector2 inputPosition)
|
||||
public Vector2 swipeDirection;
|
||||
|
||||
public InputUnitSwipe(int fingerId, Vector2 inputPosition, Vector2 swipeDirection)
|
||||
{
|
||||
this.fingerId = fingerId;
|
||||
this.inputPosition = inputPosition;
|
||||
this.swipeDirection = swipeDirection.normalized;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user