mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-25 19:15:16 +00:00
Merge pull request #655 from minenice55/systems-improvements
Minor Refactoring
This commit is contained in:
commit
434c4845d7
21 changed files with 175 additions and 303 deletions
|
@ -46,7 +46,7 @@ namespace HeavenStudio
|
|||
// Current time of the song
|
||||
private double time;
|
||||
double dspTime;
|
||||
double absTime, absTimeAdjust, lastAbsTime;
|
||||
double absTime, absTimeAdjust;
|
||||
double dspSizeSeconds;
|
||||
double dspMargin = 128 / 44100.0;
|
||||
bool deferTimeKeeping = false;
|
||||
|
@ -56,7 +56,7 @@ namespace HeavenStudio
|
|||
private double dspStart;
|
||||
private float dspStartTime => (float)dspStart;
|
||||
public double dspStartTimeAsDouble => dspStart;
|
||||
DateTime startTime, lastMixTime;
|
||||
DateTime startTime;
|
||||
|
||||
//the beat we started at
|
||||
private double startPos;
|
||||
|
@ -88,7 +88,6 @@ namespace HeavenStudio
|
|||
private float minigamePitch = 1f;
|
||||
public float SongPitch { get => isPaused ? 0f : (timelinePitch * minigamePitch); }
|
||||
public float TimelinePitch { get => timelinePitch; }
|
||||
private float musicScheduledPitch = 1f;
|
||||
private double musicScheduledTime = 0;
|
||||
|
||||
// volume modifier
|
||||
|
@ -201,16 +200,15 @@ namespace HeavenStudio
|
|||
double musicStartDelay = -offset - startPos;
|
||||
if (musicStartDelay > 0)
|
||||
{
|
||||
musicScheduledTime = dspTime + (musicStartDelay / timelinePitch) + 2*dspSizeSeconds;
|
||||
dspStart = dspTime + 2*dspSizeSeconds;
|
||||
musicScheduledTime = dspTime + (musicStartDelay / timelinePitch) + 2 * dspSizeSeconds;
|
||||
dspStart = dspTime + 2 * dspSizeSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
musicScheduledTime = dspTime + 2*dspSizeSeconds;
|
||||
dspStart = dspTime + 2*dspSizeSeconds;
|
||||
musicScheduledTime = dspTime + 2 * dspSizeSeconds;
|
||||
dspStart = dspTime + 2 * dspSizeSeconds;
|
||||
}
|
||||
musicSource.PlayScheduled(musicScheduledTime);
|
||||
musicScheduledPitch = timelinePitch;
|
||||
musicSource.pitch = timelinePitch;
|
||||
Debug.Log($"playback scheduled for dsptime {dspStart}");
|
||||
}
|
||||
|
@ -221,7 +219,6 @@ namespace HeavenStudio
|
|||
|
||||
startTime = DateTime.Now;
|
||||
absTimeAdjust = 0;
|
||||
lastAbsTime = 0;
|
||||
deferTimeKeeping = musicSource.clip != null;
|
||||
|
||||
isPlaying = true;
|
||||
|
@ -242,7 +239,6 @@ namespace HeavenStudio
|
|||
absTimeAdjust = 0;
|
||||
dspStart = dsp;
|
||||
}
|
||||
lastMixTime = DateTime.Now;
|
||||
}
|
||||
|
||||
public void Pause()
|
||||
|
|
|
@ -8,6 +8,7 @@ namespace HeavenStudio
|
|||
{
|
||||
public class EventCaller : MonoBehaviour
|
||||
{
|
||||
public GameManager gameManager { get; private set; }
|
||||
public Transform GamesHolder;
|
||||
public RiqEntity currentEntity = new RiqEntity();
|
||||
public string currentSwitchGame;
|
||||
|
@ -18,6 +19,7 @@ namespace HeavenStudio
|
|||
|
||||
public Dictionary<string, Minigames.Minigame> minigames = new();
|
||||
|
||||
|
||||
public Minigames.Minigame GetMinigame(string gameName)
|
||||
{
|
||||
if (!minigames.ContainsKey(gameName))
|
||||
|
@ -55,34 +57,14 @@ namespace HeavenStudio
|
|||
return GetGameAction(gameName, action).parameters.Find(c => c.propertyName == param);
|
||||
}
|
||||
|
||||
public void Init()
|
||||
public void Init(GameManager mgr)
|
||||
{
|
||||
gameManager = mgr;
|
||||
instance = this;
|
||||
|
||||
currentEntity = new RiqEntity();
|
||||
|
||||
Minigames.Init(this);
|
||||
|
||||
List<Minigames.Minigame> minigamesInBeatmap = new List<Minigames.Minigame>();
|
||||
for (int i = 0; i < GameManager.instance.Beatmap.Entities.Count; i++)
|
||||
{
|
||||
//go through every entity in the timeline and add the game that they're from to the minigamesInBeatmap list (ignore entities from FX only categories, i.e. Game Manager and Count-Ins)
|
||||
Minigames.Minigame game = GetMinigame(GameManager.instance.Beatmap.Entities[i].datamodel.Split('/')[0]);
|
||||
if (!minigamesInBeatmap.Contains(game) && !FXOnlyGames().Contains(game))
|
||||
{
|
||||
minigamesInBeatmap.Add(game);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < minigamesInBeatmap.Count; i++)
|
||||
{
|
||||
// minigames[minigames.FindIndex(c => c.name == minigamesInBeatmap[i].name)].holder = Resources.Load<GameObject>($"Games/{minigamesInBeatmap[i].name}");
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void CallEvent(RiqEntity entity, bool gameActive)
|
||||
|
@ -128,30 +110,9 @@ namespace HeavenStudio
|
|||
}
|
||||
}
|
||||
|
||||
static bool StringStartsWith(string a, string b)
|
||||
{
|
||||
int aLen = a.Length;
|
||||
int bLen = b.Length;
|
||||
|
||||
int ap = 0; int bp = 0;
|
||||
|
||||
while (ap < aLen && bp < bLen && a [ap] == b [bp])
|
||||
{
|
||||
ap++;
|
||||
bp++;
|
||||
}
|
||||
|
||||
return (bp == bLen);
|
||||
}
|
||||
|
||||
public static bool IsGameSwitch(RiqEntity entity)
|
||||
{
|
||||
return StringStartsWith(entity.datamodel, "gameManager/switchGame");
|
||||
}
|
||||
|
||||
public static List<RiqEntity> GetAllInGameManagerList(string gameName, string[] include)
|
||||
{
|
||||
List<RiqEntity> temp1 = GameManager.instance.Beatmap.Entities.FindAll(c => c.datamodel.Split('/')[0] == gameName);
|
||||
List<RiqEntity> temp1 = instance.gameManager.Beatmap.Entities.FindAll(c => c.datamodel.Split('/')[0] == gameName);
|
||||
List<RiqEntity> temp2 = new List<RiqEntity>();
|
||||
foreach (string s in include)
|
||||
{
|
||||
|
@ -162,7 +123,7 @@ namespace HeavenStudio
|
|||
|
||||
public static List<RiqEntity> GetAllInGameManagerListExclude(string gameName, string[] exclude)
|
||||
{
|
||||
List<RiqEntity> temp1 = GameManager.instance.Beatmap.Entities.FindAll(c => c.datamodel.Split('/')[0] == gameName);
|
||||
List<RiqEntity> temp1 = instance.gameManager.Beatmap.Entities.FindAll(c => c.datamodel.Split('/')[0] == gameName);
|
||||
List<RiqEntity> temp2 = new List<RiqEntity>();
|
||||
foreach (string s in exclude)
|
||||
{
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace HeavenStudio
|
|||
GameObject Games = new GameObject();
|
||||
Games.name = "Games";
|
||||
|
||||
gameManager.playMode = playOnStart;
|
||||
gameManager.TogglePlayMode(playOnStart);
|
||||
|
||||
gameManager.GamesHolder = Games;
|
||||
gameManager.CircleCursor = Cursor.transform.GetChild(0).GetComponent<CircleCursor>();
|
||||
|
|
|
@ -32,30 +32,31 @@ namespace HeavenStudio
|
|||
[NonSerialized] public Games.Global.Filter filter;
|
||||
|
||||
[Header("Games")]
|
||||
[NonSerialized] public string currentGame;
|
||||
Coroutine currentGameSwitchIE;
|
||||
|
||||
[Header("Properties")]
|
||||
[NonSerialized] public string txt = null;
|
||||
[NonSerialized] public string ext = null;
|
||||
|
||||
[NonSerialized]
|
||||
public int currentEvent, currentTempoEvent, currentVolumeEvent, currentSectionEvent,
|
||||
currentPreEvent, currentPreSwitch, currentPreSequence;
|
||||
[NonSerialized] public double endBeat;
|
||||
[NonSerialized] public float startOffset;
|
||||
[NonSerialized] public bool playMode;
|
||||
[NonSerialized] public double startBeat;
|
||||
[NonSerialized] public GameObject currentGameO;
|
||||
private Minigame _currentMinigame;
|
||||
[NonSerialized] public bool autoplay;
|
||||
[NonSerialized] public bool canInput = true;
|
||||
[NonSerialized] public RiqEntity lastSection, currentSection;
|
||||
[NonSerialized] public double nextSectionBeat;
|
||||
|
||||
public string currentGame { get; private set; }
|
||||
public GameObject minigameObj { get; private set; }
|
||||
public Minigame minigame { get; private set; }
|
||||
public RiqEntity lastSection { get; private set; }
|
||||
public RiqEntity currentSection { get; private set; }
|
||||
|
||||
public double endBeat { get; private set; }
|
||||
public double startBeat { get; private set; }
|
||||
|
||||
public double nextSectionBeat { get; private set; }
|
||||
public double SectionProgress { get; private set; }
|
||||
public float MarkerWeight { get; private set; }
|
||||
|
||||
public int MarkerCategory { get; private set; }
|
||||
|
||||
public bool playMode { get; private set; }
|
||||
public bool autoplay { get; private set; }
|
||||
public bool canInput { get; private set; }
|
||||
|
||||
public bool GameHasSplitColours
|
||||
{
|
||||
get
|
||||
|
@ -138,7 +139,9 @@ namespace HeavenStudio
|
|||
|
||||
eventCaller = this.gameObject.AddComponent<EventCaller>();
|
||||
eventCaller.GamesHolder = GamesHolder.transform;
|
||||
eventCaller.Init();
|
||||
eventCaller.Init(this);
|
||||
|
||||
canInput = true;
|
||||
|
||||
// note: serialize this shit in the inspector //
|
||||
GameObject textbox = Instantiate(Resources.Load<GameObject>("Prefabs/Common/Textbox"));
|
||||
|
@ -429,9 +432,10 @@ namespace HeavenStudio
|
|||
{
|
||||
if (currentPreSequence < Beatmap.Entities.Count && currentPreSequence >= 0)
|
||||
{
|
||||
if (start >= preSequenceBeats[currentPreSequence])
|
||||
List<RiqEntity> entitiesInRange = ListPool<RiqEntity>.Get();
|
||||
while (currentPreSequence < preSequenceBeats.Count && start >= preSequenceBeats[currentPreSequence])
|
||||
{
|
||||
List<RiqEntity> entitiesInRange = ListPool<RiqEntity>.Get();
|
||||
entitiesInRange.Clear();
|
||||
foreach (RiqEntity entity in Beatmap.Entities)
|
||||
{
|
||||
string[] entityDatamodel = entity.datamodel.Split('/');
|
||||
|
@ -449,14 +453,14 @@ namespace HeavenStudio
|
|||
var inf = GetGameInfo(gameName);
|
||||
if (inf != null && inf.usesAssetBundle && inf.AssetsLoaded && !inf.SequencesPreloaded)
|
||||
{
|
||||
Debug.Log($"Preloading game {gameName}");
|
||||
Debug.Log($"Preparing game {gameName}");
|
||||
PreloadGameSequences(gameName);
|
||||
}
|
||||
eventCaller.CallPreEvent(entity);
|
||||
currentPreSequence++;
|
||||
}
|
||||
ListPool<RiqEntity>.Release(entitiesInRange);
|
||||
}
|
||||
ListPool<RiqEntity>.Release(entitiesInRange);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -533,7 +537,7 @@ namespace HeavenStudio
|
|||
|
||||
if (cond.songPositionInBeatsAsDouble >= Math.Ceiling(_playStartBeat) + _pulseTally)
|
||||
{
|
||||
if (_currentMinigame != null) _currentMinigame.OnBeatPulse(Math.Ceiling(_playStartBeat) + _pulseTally);
|
||||
if (minigame != null) minigame.OnBeatPulse(Math.Ceiling(_playStartBeat) + _pulseTally);
|
||||
onBeatPulse?.Invoke(Math.Ceiling(_playStartBeat) + _pulseTally);
|
||||
_pulseTally++;
|
||||
}
|
||||
|
@ -545,12 +549,13 @@ namespace HeavenStudio
|
|||
|
||||
if (currentEvent < Beatmap.Entities.Count && currentEvent >= 0)
|
||||
{
|
||||
if (clampedBeat >= eventBeats[currentEvent])
|
||||
List<RiqEntity> entitiesInRange = ListPool<RiqEntity>.Get();
|
||||
List<RiqEntity> fxEntities = ListPool<RiqEntity>.Get();
|
||||
// allows for multiple events on the same beat to be executed on the same frame, so no more 1-frame delay
|
||||
while (currentEvent < eventBeats.Count && clampedBeat >= eventBeats[currentEvent] && Conductor.instance.isPlaying)
|
||||
{
|
||||
List<RiqEntity> entitiesInRange = ListPool<RiqEntity>.Get();
|
||||
List<RiqEntity> fxEntities = ListPool<RiqEntity>.Get();
|
||||
|
||||
// allows for multiple events on the same beat to be executed on the same frame, so no more 1-frame delay
|
||||
fxEntities.Clear();
|
||||
entitiesInRange.Clear();
|
||||
using (PooledObject<List<RiqEntity>> pool = ListPool<RiqEntity>.Get(out List<RiqEntity> currentBeatEntities))
|
||||
{
|
||||
currentBeatEntities = Beatmap.Entities.FindAll(c => c.beat == eventBeats[currentEvent]);
|
||||
|
@ -592,10 +597,9 @@ namespace HeavenStudio
|
|||
// Thank you to @shshwdr for bring this to my attention
|
||||
currentEvent++;
|
||||
}
|
||||
|
||||
ListPool<RiqEntity>.Release(entitiesInRange);
|
||||
ListPool<RiqEntity>.Release(fxEntities);
|
||||
}
|
||||
ListPool<RiqEntity>.Release(entitiesInRange);
|
||||
ListPool<RiqEntity>.Release(fxEntities);
|
||||
}
|
||||
|
||||
if (currentSection == null)
|
||||
|
@ -619,7 +623,7 @@ namespace HeavenStudio
|
|||
|
||||
if (Conductor.instance.songPositionInBeatsAsDouble >= Math.Ceiling(_playStartBeat) + _latePulseTally)
|
||||
{
|
||||
if (_currentMinigame != null) _currentMinigame.OnLateBeatPulse(Math.Ceiling(_playStartBeat) + _latePulseTally);
|
||||
if (minigame != null) minigame.OnLateBeatPulse(Math.Ceiling(_playStartBeat) + _latePulseTally);
|
||||
onBeatPulse?.Invoke(Math.Ceiling(_playStartBeat) + _latePulseTally);
|
||||
_latePulseTally++;
|
||||
}
|
||||
|
@ -630,6 +634,16 @@ namespace HeavenStudio
|
|||
canInput = inputs;
|
||||
}
|
||||
|
||||
public void ToggleAutoplay(bool auto)
|
||||
{
|
||||
autoplay = auto;
|
||||
}
|
||||
|
||||
public void TogglePlayMode(bool mode)
|
||||
{
|
||||
playMode = mode;
|
||||
}
|
||||
|
||||
#region Play Events
|
||||
|
||||
private double _playStartBeat = 0;
|
||||
|
@ -701,7 +715,7 @@ namespace HeavenStudio
|
|||
{
|
||||
Conductor.instance.PlaySetup(beat);
|
||||
Minigame miniGame = null;
|
||||
if (currentGameO != null && currentGameO.TryGetComponent<Minigame>(out miniGame))
|
||||
if (minigameObj != null && minigameObj.TryGetComponent<Minigame>(out miniGame))
|
||||
{
|
||||
if (miniGame != null)
|
||||
{
|
||||
|
@ -761,7 +775,7 @@ namespace HeavenStudio
|
|||
}
|
||||
|
||||
Minigame miniGame;
|
||||
if (currentGameO != null && currentGameO.TryGetComponent<Minigame>(out miniGame))
|
||||
if (minigameObj != null && minigameObj.TryGetComponent<Minigame>(out miniGame))
|
||||
{
|
||||
if (miniGame != null)
|
||||
{
|
||||
|
@ -1065,7 +1079,7 @@ namespace HeavenStudio
|
|||
SetGame(game, false);
|
||||
|
||||
Minigame miniGame;
|
||||
if (currentGameO != null && currentGameO.TryGetComponent<Minigame>(out miniGame))
|
||||
if (minigameObj != null && minigameObj.TryGetComponent<Minigame>(out miniGame))
|
||||
{
|
||||
if (miniGame != null)
|
||||
{
|
||||
|
@ -1095,19 +1109,19 @@ namespace HeavenStudio
|
|||
GameObject prefab = GetGame(game);
|
||||
if (prefab == null) return;
|
||||
|
||||
Destroy(currentGameO);
|
||||
currentGameO = Instantiate(prefab);
|
||||
if (currentGameO.TryGetComponent<Minigame>(out var minigame))
|
||||
Destroy(minigameObj);
|
||||
minigameObj = Instantiate(prefab);
|
||||
if (minigameObj.TryGetComponent<Minigame>(out var minigame))
|
||||
{
|
||||
_currentMinigame = minigame;
|
||||
this.minigame = minigame;
|
||||
minigame.minigameName = game;
|
||||
minigame.gameManager = this;
|
||||
minigame.conductor = Conductor.instance;
|
||||
}
|
||||
Vector3 originalScale = currentGameO.transform.localScale;
|
||||
currentGameO.transform.parent = eventCaller.GamesHolder.transform;
|
||||
currentGameO.transform.localScale = originalScale;
|
||||
currentGameO.name = game;
|
||||
Vector3 originalScale = minigameObj.transform.localScale;
|
||||
minigameObj.transform.parent = eventCaller.GamesHolder.transform;
|
||||
minigameObj.transform.localScale = originalScale;
|
||||
minigameObj.name = game;
|
||||
|
||||
SetCurrentGame(game, useMinigameColor);
|
||||
}
|
||||
|
|
|
@ -166,11 +166,11 @@ namespace HeavenStudio.Games
|
|||
public override void OnBeatPulse(double beat)
|
||||
{
|
||||
if (!BeatIsInBopRegion(beat)) return;
|
||||
if (student.isHolding)
|
||||
if (student.isHolding && !student.swiping)
|
||||
{
|
||||
student.anim.DoScaledAnimationAsync("HoldBop", 0.5f);
|
||||
}
|
||||
else if (!student.swiping && student.anim.IsAnimationNotPlaying())
|
||||
else if (student.anim.IsAnimationNotPlaying() && !student.swiping)
|
||||
{
|
||||
student.anim.DoScaledAnimationAsync("IdleBop", 0.5f);
|
||||
}
|
||||
|
@ -217,16 +217,19 @@ namespace HeavenStudio.Games
|
|||
{
|
||||
student.UnHold();
|
||||
shouldBeHolding = false;
|
||||
ScoreMiss();
|
||||
}
|
||||
else if(PlayerInput.GetIsAction(InputAction_FlickRelease) && !IsExpectingInputNow(InputAction_FlickRelease) && student.isHolding) //Flick during hold
|
||||
{
|
||||
student.OnFlickSwipe();
|
||||
shouldBeHolding = false;
|
||||
ScoreMiss();
|
||||
}
|
||||
else if (!GameManager.instance.autoplay && shouldBeHolding && !PlayerInput.GetIsAction(InputAction_BasicPressing) && !IsExpectingInputNow(InputAction_FlickRelease))
|
||||
{
|
||||
student.UnHold();
|
||||
shouldBeHolding = false;
|
||||
ScoreMiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -249,11 +252,11 @@ namespace HeavenStudio.Games
|
|||
{
|
||||
new BeatAction.Action(beat + i, delegate
|
||||
{
|
||||
if (student.isHolding)
|
||||
if (student.isHolding && !student.swiping)
|
||||
{
|
||||
student.anim.DoScaledAnimationAsync("HoldBop", 0.5f);
|
||||
}
|
||||
else if (!student.swiping && student.anim.IsAnimationNotPlaying())
|
||||
else if (student.anim.IsAnimationNotPlaying() && !student.swiping)
|
||||
{
|
||||
student.anim.DoScaledAnimationAsync("IdleBop", 0.5f);
|
||||
}
|
||||
|
@ -469,27 +472,13 @@ namespace HeavenStudio.Games
|
|||
ScheduleInput(beat, timing, InputAction_FlickRelease, student.OnHitSwipe, student.OnMissSwipe, student.OnEmpty);
|
||||
}
|
||||
andStop = false;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//void SetupCue(float beat, bool swipe)
|
||||
//{
|
||||
// if (swipe)
|
||||
// student.swipeBeat = beat;
|
||||
// else
|
||||
// student.holdBeat = beat;
|
||||
|
||||
// student.eligible = true;
|
||||
// student.ResetState();
|
||||
//}
|
||||
|
||||
public static void SoundFX(bool toggle)
|
||||
{
|
||||
Student.soundFX = toggle;
|
||||
}
|
||||
|
||||
public static void VoiceLines(double beat, int type)
|
||||
{
|
||||
string[] sounds;
|
||||
|
|
|
@ -169,23 +169,21 @@ namespace HeavenStudio.Games.Scripts_DJSchool
|
|||
public void OnHitSwipe(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
game.shouldBeHolding = false;
|
||||
isHolding = false;
|
||||
swiping = true;
|
||||
SoundByte.PlayOneShotGame("djSchool/recordSwipe");
|
||||
anim.Play("Swipe", 0, 0);
|
||||
if (beat >= 1f || beat <= -1f) missed = true;
|
||||
if (!missed)
|
||||
{
|
||||
isHolding = false;
|
||||
|
||||
missed = false;
|
||||
shouldBeHolding = false;
|
||||
SoundByte.PlayOneShotGame("djSchool/recordSwipe");
|
||||
FlashFX(false);
|
||||
swiping = true;
|
||||
|
||||
BeatAction.New(this, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { anim.Play("Swipe", 0, 0); }),
|
||||
new BeatAction.Action(beat + 4f, delegate { swiping = false; }),
|
||||
});
|
||||
//anim.Play("Swipe", 0, 0);
|
||||
game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.UpSecond);
|
||||
game.djYellowScript.Reverse();
|
||||
game.smileBeat = caller.timer + caller.startBeat + 1f;
|
||||
|
@ -199,13 +197,10 @@ namespace HeavenStudio.Games.Scripts_DJSchool
|
|||
else
|
||||
{
|
||||
OnMissSwipeForPlayerInput(caller.timer + caller.startBeat + 1);
|
||||
SoundByte.PlayOneShotGame("djSchool/recordSwipe");
|
||||
BeatAction.New(this, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { anim.Play("Swipe", 0, 0); }),
|
||||
new BeatAction.Action(beat + 4f, delegate { swiping = false; }),
|
||||
});
|
||||
//anim.Play("Swipe", 0, 0);
|
||||
tableAnim.speed = 1;
|
||||
tableAnim.DoScaledAnimationAsync("Student_Turntable_Swipe", 0.5f);
|
||||
|
||||
|
@ -304,7 +299,6 @@ namespace HeavenStudio.Games.Scripts_DJSchool
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//Not sure but will do?
|
||||
private void OnDestroy()
|
||||
{
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
double lastChargeTime = double.MinValue;
|
||||
double unPrepareTime = double.MinValue;
|
||||
double noNuriJabTime = double.MinValue;
|
||||
bool canEmote = false;
|
||||
bool canEmote = false, justPunched = false;
|
||||
public int wantFace = 0;
|
||||
|
||||
public bool inSpecial
|
||||
|
@ -137,7 +137,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
}
|
||||
}
|
||||
|
||||
if (PlayerInput.GetIsAction(KarateMan.InputAction_Press) && !inSpecial)
|
||||
if (PlayerInput.GetIsAction(KarateMan.InputAction_Press) && !(inSpecial || justPunched))
|
||||
{
|
||||
if (!KarateMan.instance.IsExpectingInputNow(KarateMan.InputAction_Press))
|
||||
{
|
||||
|
@ -204,7 +204,11 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
justPunched = false;
|
||||
}
|
||||
|
||||
public void Bop()
|
||||
|
@ -230,19 +234,6 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
|
||||
switch (forceHand)
|
||||
{
|
||||
case 0:
|
||||
if (cond.songPositionInBeatsAsDouble - lastPunchTime < 0.25f + (Minigame.JustLateTime() - 1f))
|
||||
{
|
||||
lastPunchTime = double.MinValue;
|
||||
anim.DoScaledAnimationAsync("Straight", 0.5f);
|
||||
straight = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lastPunchTime = cond.songPositionInBeatsAsDouble;
|
||||
anim.DoScaledAnimationAsync("Jab", 0.5f);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
anim.DoScaledAnimationAsync("Jab", 0.5f);
|
||||
break;
|
||||
|
@ -255,6 +246,19 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
anim.DoNormalizedAnimation("JabNoNuri");
|
||||
noNuriJabTime = cond.songPositionInBeatsAsDouble;
|
||||
break;
|
||||
default:
|
||||
if (cond.songPositionInBeatsAsDouble <= cond.GetBeatFromSongPos(lastPunchTime + Minigame.NgLateTime() - 1) + 0.25)
|
||||
{
|
||||
lastPunchTime = double.MinValue;
|
||||
anim.DoScaledAnimationAsync("Straight", 0.5f);
|
||||
straight = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
lastPunchTime = cond.songPositionAsDouble;
|
||||
anim.DoScaledAnimationAsync("Jab", 0.5f);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (touchCharge)
|
||||
{
|
||||
|
@ -265,6 +269,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
{
|
||||
bop.startBeat = cond.songPositionInBeatsAsDouble + 0.5f;
|
||||
}
|
||||
justPunched = true;
|
||||
return straight; //returns what hand was used to punch the object
|
||||
}
|
||||
|
||||
|
|
|
@ -190,6 +190,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
case ItemType.ComboPot1:
|
||||
OnHit = KarateMan.instance.ScheduleInput(startBeat, 1f, KarateMan.InputAction_AltDown, ComboStartJustOrNg, ComboStartThrough, ComboStartOut, CanCombo);
|
||||
OnHitWrongAction = KarateMan.instance.ScheduleUserInput(startBeat, 1f, KarateMan.InputAction_Press, ComboStartWrongAction, ComboStartOut, ComboStartOut, CanHitWrong);
|
||||
OnHitWrongAction.weight = 0;
|
||||
path = 1;
|
||||
break;
|
||||
case ItemType.ComboPot2:
|
||||
|
@ -216,6 +217,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
case ItemType.KickBarrel:
|
||||
OnHit = KarateMan.instance.ScheduleInput(startBeat, 1f, KarateMan.InputAction_Press, KickChargeJustOrNg, ItemThrough, ItemOut, CanCombo);
|
||||
OnHitWrongAction = KarateMan.instance.ScheduleUserInput(startBeat, 1f, KarateMan.InputAction_AltDown, ItemWrongAction, ItemOut, ItemOut, CanComboWrong);
|
||||
OnHitWrongAction.weight = 0;
|
||||
path = 1;
|
||||
comboId = -1;
|
||||
break;
|
||||
|
@ -243,12 +245,14 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
case ItemType.Bomb:
|
||||
OnHit = KarateMan.instance.ScheduleInput(startBeat, 1f, KarateMan.InputAction_Press, ItemJustOrNg, ItemThrough, ItemOut, CanHit);
|
||||
OnHitWrongAction = KarateMan.instance.ScheduleUserInput(startBeat, 1f, KarateMan.InputAction_AltDown, ItemWrongAction, ItemOut, ItemOut, CanHitWrong);
|
||||
OnHitWrongAction.weight = 0;
|
||||
path = 1;
|
||||
comboId = -1;
|
||||
break;
|
||||
default:
|
||||
OnHit = KarateMan.instance.ScheduleInput(startBeat, 1f, KarateMan.InputAction_Press, ItemJustOrNg, ItemThrough, ItemOut, CanHit);
|
||||
OnHitWrongAction = KarateMan.instance.ScheduleUserInput(startBeat, 1f, KarateMan.InputAction_AltDown, ItemWrongAction, ItemOut, ItemOut, CanHitWrong);
|
||||
OnHitWrongAction.weight = 0;
|
||||
path = 1;
|
||||
comboId = -1;
|
||||
break;
|
||||
|
@ -832,6 +836,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
}),
|
||||
});
|
||||
KarateMan.instance.Nori.DoThrough();
|
||||
KarateMan.instance.ScoreMiss();
|
||||
}
|
||||
|
||||
public void ItemOut(PlayerActionEvent caller) { }
|
||||
|
@ -937,6 +942,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
|
|||
{
|
||||
ItemHitEffect(straight);
|
||||
}
|
||||
KarateMan.instance.ScoreMiss();
|
||||
KarateMan.instance.Nori.DoThrough();
|
||||
}
|
||||
|
||||
|
|
|
@ -198,42 +198,6 @@ namespace HeavenStudio.Games
|
|||
scheduledInputs.Remove(evt);
|
||||
}
|
||||
|
||||
//Get the scheduled input that should happen the **Soonest**
|
||||
//Can return null if there's no scheduled inputs
|
||||
// remark: need a check for specific button(s)
|
||||
[Obsolete("Use GetClosestScheduledInput InputAction or InputAction category instead")]
|
||||
public PlayerActionEvent GetClosestScheduledInput(InputType input = InputType.ANY)
|
||||
{
|
||||
PlayerActionEvent closest = null;
|
||||
|
||||
foreach (PlayerActionEvent toCompare in scheduledInputs)
|
||||
{
|
||||
// ignore inputs that are for sequencing in autoplay
|
||||
if (toCompare.autoplayOnly) continue;
|
||||
|
||||
if (closest == null)
|
||||
{
|
||||
if (input == InputType.ANY || (toCompare.inputType & input) != 0)
|
||||
closest = toCompare;
|
||||
}
|
||||
else
|
||||
{
|
||||
double t1 = closest.startBeat + closest.timer;
|
||||
double t2 = toCompare.startBeat + toCompare.timer;
|
||||
|
||||
// Debug.Log("t1=" + t1 + " -- t2=" + t2);
|
||||
|
||||
if (t2 < t1)
|
||||
{
|
||||
if (input == InputType.ANY || (toCompare.inputType & input) != 0)
|
||||
closest = toCompare;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return closest;
|
||||
}
|
||||
|
||||
public PlayerActionEvent GetClosestScheduledInput(int[] actionCats)
|
||||
{
|
||||
int catIdx = (int)PlayerInput.CurrentControlStyle;
|
||||
|
@ -267,22 +231,6 @@ namespace HeavenStudio.Games
|
|||
return closest;
|
||||
}
|
||||
|
||||
public PlayerActionEvent GetClosestScheduledInput(PlayerInput.InputAction action)
|
||||
{
|
||||
return GetClosestScheduledInput(action.inputLockCategory);
|
||||
}
|
||||
|
||||
//Hasn't been tested yet. *Should* work.
|
||||
//Can be used to detect if the user is expected to input something now or not
|
||||
//Useful for strict call and responses games like Tambourine
|
||||
[Obsolete("Use IsExpectingInputNow InputAction or InputAction category instead")]
|
||||
public bool IsExpectingInputNow(InputType wantInput = InputType.ANY)
|
||||
{
|
||||
PlayerActionEvent input = GetClosestScheduledInput(wantInput);
|
||||
if (input == null) return false;
|
||||
return input.IsExpectingInputNow();
|
||||
}
|
||||
|
||||
public bool IsExpectingInputNow(int[] wantActionCategory)
|
||||
{
|
||||
PlayerActionEvent input = GetClosestScheduledInput(wantActionCategory);
|
||||
|
@ -299,43 +247,43 @@ namespace HeavenStudio.Games
|
|||
public static double NgEarlyTime(float pitch = -1)
|
||||
{
|
||||
if (pitch < 0)
|
||||
return 1f - ngEarlyTime;
|
||||
return 1f - (ngEarlyTimeBase * pitch);
|
||||
return 1 - ngEarlyTime;
|
||||
return 1 - (ngEarlyTimeBase * pitch);
|
||||
}
|
||||
|
||||
public static double JustEarlyTime(float pitch = -1)
|
||||
{
|
||||
if (pitch < 0)
|
||||
return 1f - justEarlyTime;
|
||||
return 1f - (justEarlyTimeBase * pitch);
|
||||
return 1 - justEarlyTime;
|
||||
return 1 - (justEarlyTimeBase * pitch);
|
||||
}
|
||||
|
||||
public static double JustLateTime(float pitch = -1)
|
||||
{
|
||||
if (pitch < 0)
|
||||
return 1f + justLateTime;
|
||||
return 1f + (justLateTimeBase * pitch);
|
||||
return 1 + justLateTime;
|
||||
return 1 + (justLateTimeBase * pitch);
|
||||
}
|
||||
|
||||
public static double NgLateTime(float pitch = -1)
|
||||
{
|
||||
if (pitch < 0)
|
||||
return 1f + ngLateTime;
|
||||
return 1f + (ngLateTimeBase * pitch);
|
||||
return 1 + ngLateTime;
|
||||
return 1 + (ngLateTimeBase * pitch);
|
||||
}
|
||||
|
||||
public static double AceEarlyTime(float pitch = -1)
|
||||
{
|
||||
if (pitch < 0)
|
||||
return 1f - aceEarlyTime;
|
||||
return 1f - (aceEarlyTimeBase * pitch);
|
||||
return 1 - aceEarlyTime;
|
||||
return 1 - (aceEarlyTimeBase * pitch);
|
||||
}
|
||||
|
||||
public static double AceLateTime(float pitch = -1)
|
||||
{
|
||||
if (pitch < 0)
|
||||
return 1f + aceLateTime;
|
||||
return 1f + (aceLateTimeBase * pitch);
|
||||
return 1 + aceLateTime;
|
||||
return 1 + (aceLateTimeBase * pitch);
|
||||
}
|
||||
|
||||
public virtual void OnGameSwitch(double beat)
|
||||
|
|
|
@ -42,8 +42,6 @@ namespace HeavenStudio.Games
|
|||
|
||||
public bool noAutoplay = false; //Indicates if this PlayerActionEvent is recognized by the autoplay. /!\ Overrides autoPlayOnly /!\
|
||||
|
||||
public InputType inputType; //The type of input. Check the InputType class to see a list of all of them
|
||||
|
||||
public bool perfectOnly = false; //Indicates that the input only recognize perfect inputs.
|
||||
|
||||
public bool countsForAccuracy = true; //Indicates if the input counts for the accuracy or not. If set to false, it'll not be counted in the accuracy calculation
|
||||
|
@ -160,11 +158,6 @@ namespace HeavenStudio.Games
|
|||
if (toCompare.InputAction != null
|
||||
&& toCompare.InputAction.inputLockCategory[catIdx] != InputAction.inputLockCategory[catIdx]) continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((toCompare.inputType & this.inputType) == 0) continue;
|
||||
if (!toCompare.IsExpectingInputNow()) continue;
|
||||
}
|
||||
|
||||
double t1 = this.startBeat + this.timer;
|
||||
double t2 = toCompare.startBeat + toCompare.timer;
|
||||
|
|
|
@ -4,7 +4,7 @@ MonoImporter:
|
|||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 5
|
||||
executionOrder: -30
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
|
|
|
@ -177,29 +177,23 @@ namespace HeavenStudio.Games
|
|||
protected static bool IA_TouchNrm(out double dt)
|
||||
{
|
||||
return PlayerInput.GetTouchDown(InputController.ActionsTouch.Tap, out dt)
|
||||
&& (instance.currentReceiver is WhichTossKid.Akachan
|
||||
|| (instance.lastReceiver is WhichTossKid.Akachan or WhichTossKid.None
|
||||
&& instance.currentReceiver is WhichTossKid.None)
|
||||
|| (instance.IsExpectingInputNow(InputAction_Aka)
|
||||
&& !(instance.IsExpectingInputNow(InputAction_Ao) || instance.IsExpectingInputNow(InputAction_Kii))));
|
||||
&& ((instance.currentReceiver is WhichTossKid.Akachan or WhichTossKid.None)
|
||||
|| instance.IsExpectingInputNow(InputAction_Aka))
|
||||
&& !(instance.IsExpectingInputNow(InputAction_Ao) || instance.IsExpectingInputNow(InputAction_Kii));
|
||||
}
|
||||
protected static bool IA_TouchDir(out double dt)
|
||||
{
|
||||
return PlayerInput.GetTouchDown(InputController.ActionsTouch.Tap, out dt)
|
||||
&& (instance.currentReceiver is WhichTossKid.Kiiyan
|
||||
|| (instance.lastReceiver is WhichTossKid.Kiiyan
|
||||
&& instance.currentReceiver is WhichTossKid.None)
|
||||
|| (instance.IsExpectingInputNow(InputAction_Kii)
|
||||
&& !(instance.IsExpectingInputNow(InputAction_Ao) || instance.IsExpectingInputNow(InputAction_Aka))));
|
||||
&& ((instance.currentReceiver is WhichTossKid.Kiiyan)
|
||||
|| instance.IsExpectingInputNow(InputAction_Kii))
|
||||
&& !(instance.IsExpectingInputNow(InputAction_Ao) || instance.IsExpectingInputNow(InputAction_Aka));
|
||||
}
|
||||
protected static bool IA_TouchAlt(out double dt)
|
||||
{
|
||||
return PlayerInput.GetTouchDown(InputController.ActionsTouch.Tap, out dt)
|
||||
&& (instance.currentReceiver is WhichTossKid.Aokun
|
||||
|| (instance.lastReceiver is WhichTossKid.Aokun
|
||||
&& instance.currentReceiver is WhichTossKid.None)
|
||||
|| (instance.IsExpectingInputNow(InputAction_Ao)
|
||||
&& !(instance.IsExpectingInputNow(InputAction_Aka) || instance.IsExpectingInputNow(InputAction_Kii))));
|
||||
&& ((instance.currentReceiver is WhichTossKid.Aokun)
|
||||
|| instance.IsExpectingInputNow(InputAction_Ao))
|
||||
&& !(instance.IsExpectingInputNow(InputAction_Aka) || instance.IsExpectingInputNow(InputAction_Kii));
|
||||
}
|
||||
|
||||
protected static bool IA_BatonNrm(out double dt)
|
||||
|
|
|
@ -29,8 +29,9 @@ namespace HeavenStudio.Games.Loaders
|
|||
{
|
||||
preFunction = delegate
|
||||
{
|
||||
var e = eventCaller.currentEntity;
|
||||
TrickClass.PreTossObject(e.beat, (int)e["obj"], e["nx"]);
|
||||
EventCaller ec = eventCaller;
|
||||
var e = ec.currentEntity;
|
||||
TrickClass.PreTossObject(ec.gameManager, e.beat, (int)e["obj"], e["nx"]);
|
||||
},
|
||||
defaultLength = 2,
|
||||
parameters = new List<Param>()
|
||||
|
@ -46,7 +47,9 @@ namespace HeavenStudio.Games.Loaders
|
|||
{
|
||||
preFunction = delegate
|
||||
{
|
||||
TrickClass.PreTossObject(eventCaller.currentEntity.beat, (int)TrickClass.TrickObjType.Plane);
|
||||
EventCaller ec = eventCaller;
|
||||
var e = ec.currentEntity;
|
||||
TrickClass.PreTossObject(ec.gameManager, e.beat, (int)TrickClass.TrickObjType.Plane);
|
||||
},
|
||||
defaultLength = 3,
|
||||
},
|
||||
|
@ -62,7 +65,9 @@ namespace HeavenStudio.Games.Loaders
|
|||
{
|
||||
preFunction = delegate
|
||||
{
|
||||
TrickClass.PreTossObject(eventCaller.currentEntity.beat, (int)TrickClass.TrickObjType.Chair);
|
||||
EventCaller ec = eventCaller;
|
||||
var e = ec.currentEntity;
|
||||
TrickClass.PreTossObject(ec.gameManager, e.beat, (int)TrickClass.TrickObjType.Chair);
|
||||
},
|
||||
defaultLength = 2,
|
||||
hidden = true,
|
||||
|
@ -71,7 +76,9 @@ namespace HeavenStudio.Games.Loaders
|
|||
{
|
||||
preFunction = delegate
|
||||
{
|
||||
TrickClass.PreTossObject(eventCaller.currentEntity.beat, (int)TrickClass.TrickObjType.Phone, eventCaller.currentEntity["nx"]);
|
||||
EventCaller ec = eventCaller;
|
||||
var e = ec.currentEntity;
|
||||
TrickClass.PreTossObject(ec.gameManager, e.beat, (int)TrickClass.TrickObjType.Phone, eventCaller.currentEntity["nx"]);
|
||||
},
|
||||
defaultLength = 2,
|
||||
hidden = true,
|
||||
|
@ -84,7 +91,9 @@ namespace HeavenStudio.Games.Loaders
|
|||
{
|
||||
preFunction = delegate
|
||||
{
|
||||
TrickClass.PreTossObject(eventCaller.currentEntity.beat, (int)TrickClass.TrickObjType.Shock);
|
||||
EventCaller ec = eventCaller;
|
||||
var e = ec.currentEntity;
|
||||
TrickClass.PreTossObject(ec.gameManager, e.beat, (int)TrickClass.TrickObjType.Shock);
|
||||
},
|
||||
defaultLength = 2,
|
||||
hidden = true,
|
||||
|
@ -283,23 +292,23 @@ namespace HeavenStudio.Games
|
|||
instance.showBubble = !instance.showBubble;
|
||||
}
|
||||
|
||||
public static void PreTossObject(double beat, int type, bool variant = false)
|
||||
public static void PreTossObject(GameManager gm, double beat, int type, bool variant = false)
|
||||
{
|
||||
if (GameManager.instance.currentGame == "trickClass")
|
||||
if (gm.currentGame == "trickClass" && gm.minigameObj.TryGetComponent(out TrickClass tc))
|
||||
{
|
||||
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||
BeatAction.New(tc, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat - 1, delegate
|
||||
{
|
||||
if (instance.showBubble == true)
|
||||
if (tc.showBubble == true)
|
||||
{
|
||||
instance.warnAnim.Play(variant ? instance.objWarnAnimVariant[type] : instance.objWarnAnim[type], 0, 0);
|
||||
tc.warnAnim.Play(variant ? tc.objWarnAnimVariant[type] : tc.objWarnAnim[type], 0, 0);
|
||||
}
|
||||
}),
|
||||
new BeatAction.Action(beat, delegate
|
||||
{
|
||||
instance.warnAnim.Play("NoPose", 0, 0);
|
||||
instance.TossObject(beat, type, variant);
|
||||
tc.warnAnim.Play("NoPose", 0, 0);
|
||||
tc.TossObject(beat, type, variant);
|
||||
})
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
|
||||
namespace HeavenStudio
|
||||
{
|
||||
[System.Flags]
|
||||
public enum InputType : int {
|
||||
// Shouldn't be used by minigame scripts
|
||||
ANY = -1,
|
||||
|
||||
//General
|
||||
//-------
|
||||
//Down
|
||||
STANDARD_DOWN = 1<<0,
|
||||
STANDARD_ALT_DOWN = 1<<1,
|
||||
DIRECTION_DOWN = 1<<2,
|
||||
//Up
|
||||
STANDARD_UP = 1<<3,
|
||||
STANDARD_ALT_UP = 1<<4,
|
||||
DIRECTION_UP = 1<<5,
|
||||
|
||||
//Specific
|
||||
//--------
|
||||
//Down
|
||||
DIRECTION_DOWN_DOWN = 1<<6,
|
||||
DIRECTION_UP_DOWN = 1<<7,
|
||||
DIRECTION_LEFT_DOWN = 1<<8,
|
||||
DIRECTION_RIGHT_DOWN = 1<<9,
|
||||
//Up
|
||||
DIRECTION_DOWN_UP = 1<<10,
|
||||
DIRECTION_UP_UP = 1<<11,
|
||||
DIRECTION_LEFT_UP = 1<<12,
|
||||
DIRECTION_RIGHT_UP = 1<<13
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 25e3511c55cd2f540abe014bf39e626b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
|
@ -522,7 +522,7 @@ namespace HeavenStudio.Editor
|
|||
|
||||
public void ToggleDebugCam()
|
||||
{
|
||||
var game = GameManager.instance.currentGameO;
|
||||
var game = GameManager.instance.minigameObj;
|
||||
|
||||
if (game != null)
|
||||
{
|
||||
|
|
|
@ -353,12 +353,12 @@ namespace HeavenStudio.Editor.Track
|
|||
if (!GameManager.instance.autoplay)
|
||||
{
|
||||
AutoplayBTN.GetComponent<Animator>().Play("Idle", 0, 0);
|
||||
GameManager.instance.autoplay = true;
|
||||
GameManager.instance.ToggleAutoplay(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
AutoplayBTN.GetComponent<Animator>().Play("Disabled", 0, 0);
|
||||
GameManager.instance.autoplay = false;
|
||||
GameManager.instance.ToggleAutoplay(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -497,7 +497,7 @@ namespace HeavenStudio
|
|||
if (!usesAssetBundle) return;
|
||||
if (bundleCommon != null) return;
|
||||
|
||||
AssetBundle bundle = await AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, wantAssetBundle + "/common")).ToUniTask();
|
||||
AssetBundle bundle = await AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, wantAssetBundle + "/common")).ToUniTask(timing: PlayerLoopTiming.PreLateUpdate);
|
||||
|
||||
bundleCommon = bundle;
|
||||
commonLoaded = true;
|
||||
|
@ -519,7 +519,7 @@ namespace HeavenStudio
|
|||
if (!usesAssetBundle) return;
|
||||
if (localeLoaded && bundleLocalized != null && currentLoadedLocale == defaultLocale) return;
|
||||
|
||||
AssetBundle bundle = await AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, wantAssetBundle + "/locale." + defaultLocale)).ToUniTask();
|
||||
AssetBundle bundle = await AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, wantAssetBundle + "/locale." + defaultLocale)).ToUniTask(timing: PlayerLoopTiming.PreLateUpdate);
|
||||
if (localeLoaded && bundleLocalized != null && currentLoadedLocale == defaultLocale) return;
|
||||
|
||||
bundleLocalized = bundle;
|
||||
|
@ -533,7 +533,7 @@ namespace HeavenStudio
|
|||
if (!commonLoaded) return;
|
||||
if (bundleCommon == null) return;
|
||||
|
||||
UnityEngine.Object asset = await bundleCommon.LoadAssetAsync<GameObject>(name).ToUniTask();
|
||||
UnityEngine.Object asset = await bundleCommon.LoadAssetAsync<GameObject>(name).ToUniTask(timing: PlayerLoopTiming.PreLateUpdate);
|
||||
loadedPrefab = asset as GameObject;
|
||||
|
||||
// load sound sequences here for now
|
||||
|
|
|
@ -58,15 +58,19 @@ namespace HeavenStudio.Util
|
|||
if (behaviour == null || !(conductor.isPlaying || conductor.isPaused))
|
||||
return;
|
||||
|
||||
try
|
||||
while (conductor.songPositionInBeatsAsDouble >= actions[idx].beat)
|
||||
{
|
||||
actions[idx].function.Invoke();
|
||||
try
|
||||
{
|
||||
actions[idx].function.Invoke();
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Debug.LogError($"Exception thrown while executing BeatAction: {e}");
|
||||
}
|
||||
idx++;
|
||||
if (idx >= actions.Count) return;
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
Debug.LogError($"Exception thrown while executing BeatAction: {e}");
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ namespace HeavenStudio.Util
|
|||
bool queued = false;
|
||||
public bool available = true;
|
||||
|
||||
const double PREBAKE_TIME = 0.5;
|
||||
const double PREBAKE_TIME = 0.25;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
|
|
|
@ -51,5 +51,12 @@ MonoBehaviour:
|
|||
- Assets/Scripts/UI/PauseMenu.cs
|
||||
- Assets/Scripts/Util/Sound.cs
|
||||
- Assets/Scripts/Conductor.cs
|
||||
- Assets/Scripts/EventCaller.cs
|
||||
- Assets/Scripts/Games/TrickClass/TrickClass.cs
|
||||
- Assets/Scripts/GameInitializer.cs
|
||||
- Assets/Scripts/LevelEditor/Timeline/Timeline.cs
|
||||
- Assets/Scripts/Games/PlayerActionEvent.cs
|
||||
- Assets/Scripts/Games/KarateMan/KarateManPot.cs
|
||||
- Assets/Scripts/Games/DJSchool/DJSchool.cs
|
||||
PathsToSkipImportEvent: []
|
||||
PathsToIgnoreOverwriteSettingOnAttribute: []
|
||||
|
|
Loading…
Reference in a new issue