mirror of
https://github.com/RHeavenStudio/HeavenStudio.git
synced 2025-06-12 10:07:38 +02:00
First Contact, Tap Trial, Air Rally
First Contact - Fixed a bug Tap Trial - All anims and input are implemented Air Rally - Initialization
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using DG.Tweening;
|
||||
|
||||
using HeavenStudio.Util;
|
||||
|
||||
@ -19,8 +21,19 @@ namespace HeavenStudio.Games.Loaders
|
||||
new GameAction("tap", delegate { TapTrial.instance.Tap(eventCaller.currentEntity.beat); }, 2.0f, false),
|
||||
new GameAction("double tap", delegate { TapTrial.instance.DoubleTap(eventCaller.currentEntity.beat); }, 2.0f, false),
|
||||
new GameAction("triple tap", delegate { TapTrial.instance.TripleTap(eventCaller.currentEntity.beat); }, 4.0f, false),
|
||||
new GameAction("jump tap prep", delegate { TapTrial.instance.JumpTapPrep(eventCaller.currentEntity.beat); }, 1.0f, false),
|
||||
new GameAction("jump tap", delegate { TapTrial.instance.JumpTap(eventCaller.currentEntity.beat); }, 2.0f, false),
|
||||
new GameAction("final jump tap", delegate { TapTrial.instance.FinalJumpTap(eventCaller.currentEntity.beat); }, 2.0f, false),
|
||||
new GameAction("scroll event", delegate { TapTrial.instance.scrollEvent(eventCaller.currentEntity.toggle, eventCaller.currentEntity.toggle); }, .5f, false, new List<Param>()
|
||||
{
|
||||
new Param("toggle", false, "Scroll FX", "Will scroll"),
|
||||
new Param("toggle", false, "Flash FX", "Will flash to white"),
|
||||
}),
|
||||
new GameAction("giraffe events", delegate { TapTrial.instance.giraffeEvent(eventCaller.currentEntity.toggle, eventCaller.currentEntity.toggle); }, .5f, false, new List<Param>()
|
||||
{
|
||||
new Param("toggle", false, "Enter", "Giraffe will enter the scene"),
|
||||
new Param("toggle", false, "Exit", "Giraffe will exit the scene"),
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -29,15 +42,33 @@ namespace HeavenStudio.Games.Loaders
|
||||
namespace HeavenStudio.Games
|
||||
{
|
||||
using Scripts_TapTrial;
|
||||
using HeavenStudio.Common;
|
||||
|
||||
public class TapTrial : Minigame
|
||||
{
|
||||
[Header("References")]
|
||||
public TapTrialPlayer player;
|
||||
public GameObject tap;
|
||||
//public GameObject tap;
|
||||
[SerializeField] List<Animator> monkeys;
|
||||
bool goBop;
|
||||
[SerializeField] List<GameObject> monkey_roots;
|
||||
[SerializeField] GameObject player_root;
|
||||
//temporary
|
||||
[SerializeField] List<GameObject> monkey_effects;
|
||||
[SerializeField] List<GameObject> player_effects;
|
||||
[SerializeField] Scroll scrollBG;
|
||||
[SerializeField] SpriteRenderer flash;
|
||||
[SerializeField] ScrollForTap scroll;
|
||||
[SerializeField] GameObject giraffe;
|
||||
bool goBop, isPrep;
|
||||
float lastReportedBeat = 0f;
|
||||
bool hasJumped, isFinalJump;
|
||||
public float jumpStartTime = Single.MinValue;
|
||||
float jumpPos;
|
||||
public float time;
|
||||
bool once;
|
||||
public bool crIsRunning;
|
||||
[SerializeField] GameObject bg;
|
||||
bool giraffeIsIn;
|
||||
|
||||
public static TapTrial instance { get; set; }
|
||||
|
||||
@ -48,19 +79,54 @@ namespace HeavenStudio.Games
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (goBop)
|
||||
{
|
||||
if (goBop && !isPrep)
|
||||
{
|
||||
if (Conductor.instance.ReportBeat(ref lastReportedBeat))
|
||||
{
|
||||
monkeys[0].Play("Bop", 0, 0);
|
||||
monkeys[1].Play("Bop", 0, 0);
|
||||
player.anim.Play("Bop", 0, 0);
|
||||
}
|
||||
else if (Conductor.instance.songPositionInBeats < lastReportedBeat)
|
||||
{
|
||||
lastReportedBeat = Mathf.Round(Conductor.instance.songPositionInBeats);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
jumpPos = Conductor.instance.GetPositionFromBeat(jumpStartTime, 1f);
|
||||
if (Conductor.instance.songPositionInBeats >= jumpStartTime && Conductor.instance.songPositionInBeats < jumpStartTime + 1f)
|
||||
{
|
||||
float yMul = jumpPos * 2f - 1f;
|
||||
float yWeight = -(yMul * yMul) + 1f;
|
||||
monkey_roots[0].transform.localPosition = new Vector3(0, 1.5f * yWeight);
|
||||
monkey_roots[1].transform.localPosition = new Vector3(0, 1.5f * yWeight);
|
||||
if (!isFinalJump)
|
||||
{
|
||||
player_root.transform.localPosition = new Vector3(0f, 2.5f * yWeight);
|
||||
}
|
||||
else
|
||||
{
|
||||
player_root.transform.localPosition = new Vector3(0f, 3.5f * yWeight);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
monkey_roots[0].transform.localPosition = new Vector3(0, 0);
|
||||
monkey_roots[1].transform.localPosition = new Vector3(0, 0);
|
||||
player_root.transform.localPosition = new Vector3(0, 0);
|
||||
if (hasJumped)
|
||||
{
|
||||
//Jukebox.PlayOneShotGame("fanClub/landing_impact", pitch: UnityEngine.Random.Range(0.95f, 1f), volume: 1f / 4);
|
||||
}
|
||||
hasJumped = false;
|
||||
}
|
||||
|
||||
if (PlayerInput.Pressed() && !IsExpectingInputNow())
|
||||
{
|
||||
player.anim.Play("Tap", 0, 0);
|
||||
Jukebox.PlayOneShotGame("tapTrial/tonk");
|
||||
}
|
||||
}
|
||||
|
||||
public void Bop(bool isBopping)
|
||||
@ -77,6 +143,7 @@ namespace HeavenStudio.Games
|
||||
|
||||
public void Tap(float beat)
|
||||
{
|
||||
isPrep = true;
|
||||
Jukebox.PlayOneShotGame("tapTrial/ook");
|
||||
player.anim.Play("TapPrepare", 0, 0);
|
||||
|
||||
@ -85,37 +152,21 @@ namespace HeavenStudio.Games
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { monkeys[0].Play("TapPrepare"); }),
|
||||
new BeatAction.Action(beat, delegate { monkeys[1].Play("TapPrepare"); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[0].Play("Tap"); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[0].Play("Tap"); particleEffectMonkeys(); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[1].Play("Tap"); }),
|
||||
});
|
||||
//CreateTap(beat);
|
||||
ScheduleInput(beat, 1f, InputType.STANDARD_DOWN, OnTap, OnTapMiss, OnEmpty);
|
||||
}
|
||||
|
||||
public void OnTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
player.anim.Play("Tap", 0, 0);
|
||||
}
|
||||
|
||||
public void OnDoubleTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
player.anim.Play("DoubleTap", 0, 0);
|
||||
}
|
||||
|
||||
public void OnTapMiss(PlayerActionEvent caller)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnEmpty(PlayerActionEvent caller)
|
||||
{
|
||||
//empty
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat + 2f, delegate { isPrep = false; })
|
||||
});
|
||||
}
|
||||
|
||||
public void DoubleTap(float beat)
|
||||
{
|
||||
isPrep = true;
|
||||
MultiSound.Play(new MultiSound.Sound[]
|
||||
{
|
||||
new MultiSound.Sound("tapTrial/ookook", beat),
|
||||
@ -128,10 +179,10 @@ namespace HeavenStudio.Games
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { monkeys[0].Play("DoubleTapPrepare", 0, 0); }),
|
||||
new BeatAction.Action(beat + .5f, delegate { monkeys[0].Play("DoubleTapPrepare_2", 0, 0); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[0].Play("DoubleTap", 0, 0); }),
|
||||
new BeatAction.Action(beat + 1.5f, delegate { monkeys[0].Play("DoubleTap", 0, 0); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[0].Play("DoubleTap", 0, 0); particleEffectMonkeys(); }),
|
||||
new BeatAction.Action(beat + 1.5f, delegate { monkeys[0].Play("DoubleTap", 0, 0); particleEffectMonkeys(); }),
|
||||
});
|
||||
|
||||
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { monkeys[1].Play("DoubleTapPrepare", 0, 0); }),
|
||||
@ -140,19 +191,24 @@ namespace HeavenStudio.Games
|
||||
new BeatAction.Action(beat + 1.5f, delegate { monkeys[1].Play("DoubleTap", 0, 0); }),
|
||||
});
|
||||
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat + 4f, delegate { isPrep = false; })
|
||||
});
|
||||
|
||||
ScheduleInput(beat, 1f, InputType.STANDARD_DOWN, OnDoubleTap, OnTapMiss, OnEmpty);
|
||||
ScheduleInput(beat, 1.5f, InputType.STANDARD_DOWN, OnDoubleTap, OnTapMiss, OnEmpty);
|
||||
}
|
||||
|
||||
public void TripleTap(float beat)
|
||||
{
|
||||
isPrep = true;
|
||||
MultiSound.Play(new MultiSound.Sound[]
|
||||
{
|
||||
new MultiSound.Sound("tapTrial/ooki1", beat),
|
||||
new MultiSound.Sound("tapTrial/ooki2", beat + 0.5f)
|
||||
});
|
||||
|
||||
//player.anim.Play("PosePrepare", 0, 0);
|
||||
player.tripleOffset = 0;
|
||||
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
@ -166,7 +222,7 @@ namespace HeavenStudio.Games
|
||||
new BeatAction.Action(beat, delegate { monkeys[0].Play("PostPrepare_1", 0, 0); }),
|
||||
new BeatAction.Action(beat + .5f, delegate { monkeys[0].Play("PostPrepare_2", 0, 0); }),
|
||||
new BeatAction.Action(beat + 2f, delegate { monkeys[0].Play("PostTap", 0, 0); }),
|
||||
new BeatAction.Action(beat + 2.5f, delegate { monkeys[0].Play("PostTap", 0, 0);}),
|
||||
new BeatAction.Action(beat + 2.5f, delegate { monkeys[0].Play("PostTap_2", 0, 0); }),
|
||||
new BeatAction.Action(beat + 3f, delegate { monkeys[0].Play("PostTap", 0, 0);}),
|
||||
});
|
||||
|
||||
@ -175,35 +231,232 @@ namespace HeavenStudio.Games
|
||||
new BeatAction.Action(beat, delegate { monkeys[1].Play("PostPrepare_1", 0, 0); }),
|
||||
new BeatAction.Action(beat + .5f, delegate { monkeys[1].Play("PostPrepare_2", 0, 0); }),
|
||||
new BeatAction.Action(beat + 2f, delegate { monkeys[1].Play("PostTap", 0, 0); }),
|
||||
new BeatAction.Action(beat + 2.5f, delegate { monkeys[1].Play("PostTap", 0, 0);}),
|
||||
new BeatAction.Action(beat + 2.5f, delegate { monkeys[1].Play("PostTap_2", 0, 0);}),
|
||||
new BeatAction.Action(beat + 3f, delegate { monkeys[1].Play("PostTap", 0, 0);}),
|
||||
});
|
||||
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat + 2f, delegate { particleEffectMonkeys(); }),
|
||||
new BeatAction.Action(beat + 2.5f, delegate { particleEffectMonkeys(); }),
|
||||
new BeatAction.Action(beat + 3f, delegate { particleEffectMonkeys(); }),
|
||||
});
|
||||
|
||||
ScheduleInput(beat, 2f, InputType.STANDARD_DOWN, OnTripleTap, OnTapMiss, OnEmpty);
|
||||
ScheduleInput(beat, 2.5f, InputType.STANDARD_DOWN, OnTripleTap, OnTapMiss, OnEmpty);
|
||||
ScheduleInput(beat, 3f, InputType.STANDARD_DOWN, OnTripleTap, OnTapMiss, OnEmpty);
|
||||
|
||||
ScheduleInput(beat, 2f, InputType.STANDARD_DOWN, OnTap, OnTapMiss, OnEmpty);
|
||||
ScheduleInput(beat, 2.5f, InputType.STANDARD_DOWN, OnDoubleTap, OnTapMiss, OnEmpty);
|
||||
ScheduleInput(beat, 3f, InputType.STANDARD_DOWN, OnTap, OnTapMiss, OnEmpty);
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat + 4f, delegate { isPrep = false; })
|
||||
});
|
||||
}
|
||||
|
||||
public void JumpTap(float beat)
|
||||
{
|
||||
isPrep = true;
|
||||
hasJumped = true;
|
||||
Jukebox.PlayOneShotGame("tapTrial/jumptap1");
|
||||
|
||||
player.anim.Play("JumpTap", 0, 0);
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate {jumpStartTime = Conductor.instance.songPositionInBeats;}),
|
||||
new BeatAction.Action(beat, delegate {monkeys[0].Play("JumpTap", 0, 0); }),
|
||||
new BeatAction.Action(beat, delegate {monkeys[1].Play("JumpTap", 0, 0); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { particleEffectMonkeys(); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { particleEffectMonkeys_2(); }),
|
||||
});
|
||||
|
||||
|
||||
|
||||
ScheduleInput(beat, .95f, InputType.STANDARD_DOWN, OnJumpTap, OnJumpTapMiss, OnEmpty); //why .95f? no idea, doesn't sound right w/ 1f
|
||||
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat + 2f, delegate { isPrep = false; })
|
||||
});
|
||||
}
|
||||
|
||||
public void JumpTapPrep(float beat)
|
||||
{
|
||||
isPrep = true;
|
||||
monkeys[0].Play("JumpPrepare", 0, 0);
|
||||
monkeys[1].Play("JumpPrepare", 0, 0);
|
||||
player.anim.Play("JumpPrepare", 0, 0);
|
||||
}
|
||||
|
||||
public void FinalJumpTap(float beat)
|
||||
{
|
||||
isPrep = true;
|
||||
hasJumped = true;
|
||||
isFinalJump = true;
|
||||
Jukebox.PlayOneShotGame("tapTrial/jumptap2");
|
||||
|
||||
player.anim.Play("FinalJump");
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate {jumpStartTime = Conductor.instance.songPositionInBeats;}),
|
||||
new BeatAction.Action(beat, delegate {monkeys[0].Play("Jump", 0, 0); }),
|
||||
new BeatAction.Action(beat, delegate {monkeys[1].Play("Jump", 0, 0); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[0].Play("FinalJumpTap", 0, 0); particleEffectMonkeys(); particleEffectMonkeys_2(); }),
|
||||
new BeatAction.Action(beat + 1f, delegate { monkeys[1].Play("FinalJumpTap", 0, 0); }),
|
||||
});
|
||||
|
||||
|
||||
ScheduleInput(beat, .95f, InputType.STANDARD_DOWN, OnJumpFinalTap, OnFinalJumpTapMiss, OnEmpty);
|
||||
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat + 2f, delegate { isPrep = false; })
|
||||
});
|
||||
}
|
||||
|
||||
public void CreateTap(float beat, int type = 0)
|
||||
public void giraffeEvent(bool enter, bool exit)
|
||||
{
|
||||
GameObject _tap = Instantiate(tap);
|
||||
_tap.transform.parent = tap.transform.parent;
|
||||
_tap.SetActive(true);
|
||||
Tap t = _tap.GetComponent<Tap>();
|
||||
t.startBeat = beat;
|
||||
t.type = type;
|
||||
if (enter && !giraffeIsIn)
|
||||
{
|
||||
giraffe.SetActive(true);
|
||||
giraffe.GetComponent<Animator>().Play("Enter", 0, 0);
|
||||
giraffeIsIn = true;
|
||||
}
|
||||
else if (exit && giraffeIsIn)
|
||||
{
|
||||
giraffe.GetComponent<Animator>().Play("Exit", 0, 0);
|
||||
giraffeIsIn = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void scrollEvent(bool isScrolling, bool flashToWhite)
|
||||
{
|
||||
if (isScrolling)
|
||||
{
|
||||
if (!crIsRunning) // if coroutine is not running, play the following once
|
||||
{
|
||||
if (flashToWhite)
|
||||
{
|
||||
Sequence sequence = DOTween.Sequence();
|
||||
sequence.Append(flash.DOColor(new Color(flash.color.r, flash.color.g, flash.color.b, .8f), 2f));
|
||||
//sequence.Kill();
|
||||
}
|
||||
StartCoroutine(timer());
|
||||
}
|
||||
}
|
||||
else //should be the reverse of the code above
|
||||
{
|
||||
scrollBG.enabled = false;
|
||||
scrollBG.scrollSpeedY = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region Player Action Scripts
|
||||
public void OnTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
player.anim.Play("Tap", 0, 0);
|
||||
player_effects[0].GetComponent<ParticleSystem>().Play();
|
||||
}
|
||||
public void OnDoubleTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
player.anim.Play("DoubleTap", 0, 0);
|
||||
player_effects[1].GetComponent<ParticleSystem>().Play();
|
||||
}
|
||||
|
||||
public void OnTapMiss(PlayerActionEvent caller)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tapMonkey", pitch: 1.5f, volume: .3f);
|
||||
}
|
||||
|
||||
public void OnJumpTapMiss(PlayerActionEvent caller)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tapMonkey", pitch: 1.5f, volume: .3f);
|
||||
player.anim.Play("JumpTap_Miss", 0, 0);
|
||||
}
|
||||
|
||||
public void OnFinalJumpTapMiss(PlayerActionEvent caller)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tapMonkey", pitch: 1.5f, volume: .3f);
|
||||
player.anim.Play("FinalJump_Miss", 0, 0);
|
||||
}
|
||||
|
||||
public void OnEmpty(PlayerActionEvent caller)
|
||||
{
|
||||
//empty
|
||||
}
|
||||
public void OnTripleTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
if (player.tripleOffset % 2 == 0)
|
||||
{
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { player.anim.Play("PoseTap_L", 0, 0); })
|
||||
});
|
||||
player.tripleOffset += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
BeatAction.New(gameObject, new List<BeatAction.Action>()
|
||||
{
|
||||
new BeatAction.Action(beat, delegate { player.anim.Play("PoseTap_R", 0, 0); })
|
||||
});
|
||||
player.tripleOffset += 1;
|
||||
}
|
||||
player_effects[0].GetComponent<ParticleSystem>().Play();
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
}
|
||||
public void OnJumpTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
player.anim.Play("JumpTap_Success", 0, 0);
|
||||
player_effects[0].GetComponent<ParticleSystem>().Play();
|
||||
player_effects[1].GetComponent<ParticleSystem>().Play();
|
||||
}
|
||||
public void OnJumpFinalTap(PlayerActionEvent caller, float beat)
|
||||
{
|
||||
Jukebox.PlayOneShotGame("tapTrial/tap");
|
||||
player.anim.Play("FinalJump_Tap");
|
||||
player_effects[0].GetComponent<ParticleSystem>().Play();
|
||||
player_effects[1].GetComponent<ParticleSystem>().Play();
|
||||
isFinalJump = false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Misc. Functions
|
||||
public void particleEffectMonkeys()
|
||||
{
|
||||
monkey_effects[0].GetComponent<ParticleSystem>().Play();
|
||||
monkey_effects[1].GetComponent<ParticleSystem>().Play();
|
||||
}
|
||||
|
||||
public void particleEffectMonkeys_2()
|
||||
{
|
||||
monkey_effects[2].GetComponent<ParticleSystem>().Play();
|
||||
monkey_effects[3].GetComponent<ParticleSystem>().Play();
|
||||
}
|
||||
|
||||
IEnumerator timer()
|
||||
{
|
||||
crIsRunning = true;
|
||||
while (scroll.scrollSpeedY < 20)
|
||||
{
|
||||
scroll.scrollSpeedY += 5f;
|
||||
yield return new WaitForSecondsRealtime(.5f);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
//this is the orig way for input handling
|
||||
//public void CreateTap(float beat, int type = 0)
|
||||
//{
|
||||
// GameObject _tap = Instantiate(tap);
|
||||
// _tap.transform.parent = tap.transform.parent;
|
||||
// _tap.SetActive(true);
|
||||
// Tap t = _tap.GetComponent<Tap>();
|
||||
// t.startBeat = beat;
|
||||
// t.type = type;
|
||||
//}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user