mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-08 18:55:07 +00:00
Screen Tiling Split into two events + Some tweaks and new vfx! (#585)
* toss boys fixed * see saw tweaks * fixed quiz show bug * splashdown spawn tweaked * split screen tiling into two different events * screen fit added
This commit is contained in:
parent
2a4a5b9f8f
commit
c1bcf2151e
11 changed files with 167 additions and 84 deletions
|
@ -93,6 +93,9 @@ MonoBehaviour:
|
||||||
ambientBg: {fileID: 5129120947114944961}
|
ambientBg: {fileID: 5129120947114944961}
|
||||||
ambientBgGO: {fileID: 269805006432045765}
|
ambientBgGO: {fileID: 269805006432045765}
|
||||||
letterboxBgGO: {fileID: 3741076794236313655}
|
letterboxBgGO: {fileID: 3741076794236313655}
|
||||||
|
overlayCanvas: {fileID: 8512930684284350359}
|
||||||
|
letterboxMask: {fileID: 8925473620302868482}
|
||||||
|
parentView: {fileID: 2077856143944097172}
|
||||||
camera: {fileID: 378821074852065722}
|
camera: {fileID: 378821074852065722}
|
||||||
--- !u!1 &269805006432045765
|
--- !u!1 &269805006432045765
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
|
@ -1049,11 +1049,11 @@ namespace HeavenStudio.Games
|
||||||
SetDistance(distanceEvent.beat, distanceEvent["type"], distanceEvent["ease"]);
|
SetDistance(distanceEvent.beat, distanceEvent["type"], distanceEvent["ease"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wantStartRally >= beat && IsRallyBeat(wantStartRally))
|
if (wantStartRally >= beat && IsRallyBeat(wantStartRally) && wantStartRally < nextGameSwitchBeatGlobal)
|
||||||
{
|
{
|
||||||
StartRally(wantStartRally);
|
StartRally(wantStartRally);
|
||||||
}
|
}
|
||||||
else if (wantStartBaBum >= beat && IsBaBumBeat(wantStartBaBum))
|
else if (wantStartBaBum >= beat && IsBaBumBeat(wantStartBaBum) && wantStartBaBum < nextGameSwitchBeatGlobal)
|
||||||
{
|
{
|
||||||
StartBaBumBumBum(wantStartBaBum, wantCount, wantAlt);
|
StartBaBumBumBum(wantStartBaBum, wantCount, wantAlt);
|
||||||
}
|
}
|
||||||
|
|
|
@ -573,16 +573,7 @@ namespace HeavenStudio.Games
|
||||||
ScheduleAutoplayInput(beat, length + inputBeat, InputAction_Right, AutoplayAButton, Nothing, Nothing);
|
ScheduleAutoplayInput(beat, length + inputBeat, InputAction_Right, AutoplayAButton, Nothing, Nothing);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int hundredLoops = Mathf.FloorToInt((float)countToMatch / 100f);
|
||||||
if (doingConsectiveIntervals)
|
|
||||||
{
|
|
||||||
countToMatch += relevantInputs.Count;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
countToMatch = relevantInputs.Count;
|
|
||||||
}
|
|
||||||
int hundredLoops = Mathf.FloorToInt(countToMatch / 100);
|
|
||||||
countToMatch -= hundredLoops * 100;
|
countToMatch -= hundredLoops * 100;
|
||||||
doingConsectiveIntervals = consecutive;
|
doingConsectiveIntervals = consecutive;
|
||||||
float timeUpBeat = 0f;
|
float timeUpBeat = 0f;
|
||||||
|
@ -598,6 +589,14 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
new BeatAction.Action(beat, delegate
|
new BeatAction.Action(beat, delegate
|
||||||
{
|
{
|
||||||
|
if (doingConsectiveIntervals)
|
||||||
|
{
|
||||||
|
countToMatch += relevantInputs.Count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
countToMatch = relevantInputs.Count;
|
||||||
|
}
|
||||||
if (shouldPrepareArms)
|
if (shouldPrepareArms)
|
||||||
{
|
{
|
||||||
contesteeLeftArmAnim.DoScaledAnimationAsync("LeftPrepare", 0.5f);
|
contesteeLeftArmAnim.DoScaledAnimationAsync("LeftPrepare", 0.5f);
|
||||||
|
|
|
@ -204,6 +204,9 @@ namespace HeavenStudio.Games
|
||||||
|
|
||||||
public static SeeSaw instance;
|
public static SeeSaw instance;
|
||||||
|
|
||||||
|
private Sound _landSoundEnd;
|
||||||
|
private double _gameSwitchBeat;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
instance = this;
|
instance = this;
|
||||||
|
@ -218,6 +221,7 @@ namespace HeavenStudio.Games
|
||||||
GrabJumpEvents(beat);
|
GrabJumpEvents(beat);
|
||||||
PersistColor(beat);
|
PersistColor(beat);
|
||||||
PersistColors(beat);
|
PersistColors(beat);
|
||||||
|
_gameSwitchBeat = beat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnGameSwitch(double beat)
|
public override void OnGameSwitch(double beat)
|
||||||
|
@ -225,6 +229,16 @@ namespace HeavenStudio.Games
|
||||||
GrabJumpEvents(beat);
|
GrabJumpEvents(beat);
|
||||||
PersistColor(beat);
|
PersistColor(beat);
|
||||||
PersistColors(beat);
|
PersistColors(beat);
|
||||||
|
_gameSwitchBeat = beat;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
foreach (var evt in scheduledInputs)
|
||||||
|
{
|
||||||
|
evt.Disable();
|
||||||
|
}
|
||||||
|
if (_landSoundEnd != null) _landSoundEnd.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PersistColors(double beat)
|
private void PersistColors(double beat)
|
||||||
|
@ -353,9 +367,8 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
if (canPrepare && cond.songPositionInBeatsAsDouble < allJumpEvents[currentJumpIndex].beat)
|
if (canPrepare && cond.songPositionInBeatsAsDouble < allJumpEvents[currentJumpIndex].beat)
|
||||||
{
|
{
|
||||||
|
|
||||||
float beatToJump = (float)allJumpEvents[currentJumpIndex].beat - (inJump ? 1 : 2);
|
float beatToJump = (float)allJumpEvents[currentJumpIndex].beat - (inJump ? 1 : 2);
|
||||||
SoundByte.PlayOneShotGame("seeSaw/prepareHigh", beatToJump);
|
if (beatToJump >= _gameSwitchBeat) SoundByte.PlayOneShotGame("seeSaw/prepareHigh", beatToJump);
|
||||||
BeatAction.New(instance, new List<BeatAction.Action>()
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
{
|
{
|
||||||
new BeatAction.Action(beatToJump, delegate { see.SetState(inJump ? SeeSawGuy.JumpState.StartJumpIn : SeeSawGuy.JumpState.StartJump, beatToJump); see.canBop = false; })
|
new BeatAction.Action(beatToJump, delegate { see.SetState(inJump ? SeeSawGuy.JumpState.StartJumpIn : SeeSawGuy.JumpState.StartJump, beatToJump); see.canBop = false; })
|
||||||
|
@ -495,7 +508,7 @@ namespace HeavenStudio.Games
|
||||||
if (currentJumpIndex >= allJumpEvents.Count || allJumpEvents[currentJumpIndex].beat != beat + 4)
|
if (currentJumpIndex >= allJumpEvents.Count || allJumpEvents[currentJumpIndex].beat != beat + 4)
|
||||||
{
|
{
|
||||||
saw.canBop = true;
|
saw.canBop = true;
|
||||||
SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + 4);
|
_landSoundEnd = SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + 4);
|
||||||
BeatAction.New(instance, new List<BeatAction.Action>()
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
{
|
{
|
||||||
new BeatAction.Action(beat + 3.75f, delegate { see.canBop = true; }),
|
new BeatAction.Action(beat + 3.75f, delegate { see.canBop = true; }),
|
||||||
|
@ -555,7 +568,7 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
saw.canBop = true;
|
saw.canBop = true;
|
||||||
float beatLength = see.ShouldEndJumpOut() ? 4 : 3;
|
float beatLength = see.ShouldEndJumpOut() ? 4 : 3;
|
||||||
SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + beatLength);
|
_landSoundEnd = SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + beatLength);
|
||||||
BeatAction.New(instance, new List<BeatAction.Action>()
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
{
|
{
|
||||||
new BeatAction.Action(beat + beatLength - 0.25f, delegate { see.canBop = true; }),
|
new BeatAction.Action(beat + beatLength - 0.25f, delegate { see.canBop = true; }),
|
||||||
|
@ -615,7 +628,7 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
saw.canBop = true;
|
saw.canBop = true;
|
||||||
float beatLength = see.ShouldEndJumpOut() ? 3 : 2;
|
float beatLength = see.ShouldEndJumpOut() ? 3 : 2;
|
||||||
SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + beatLength);
|
_landSoundEnd = SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + beatLength);
|
||||||
BeatAction.New(instance, new List<BeatAction.Action>()
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
{
|
{
|
||||||
new BeatAction.Action(beat + beatLength - 0.25f, delegate { see.canBop = true; }),
|
new BeatAction.Action(beat + beatLength - 0.25f, delegate { see.canBop = true; }),
|
||||||
|
@ -674,7 +687,7 @@ namespace HeavenStudio.Games
|
||||||
if (currentJumpIndex >= allJumpEvents.Count || allJumpEvents[currentJumpIndex].beat != beat + 2)
|
if (currentJumpIndex >= allJumpEvents.Count || allJumpEvents[currentJumpIndex].beat != beat + 2)
|
||||||
{
|
{
|
||||||
saw.canBop = true;
|
saw.canBop = true;
|
||||||
SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + 2);
|
_landSoundEnd = SoundByte.PlayOneShotGame("seeSaw/otherLand", beat + 2);
|
||||||
BeatAction.New(instance, new List<BeatAction.Action>()
|
BeatAction.New(instance, new List<BeatAction.Action>()
|
||||||
{
|
{
|
||||||
new BeatAction.Action(beat + 1.75f, delegate { see.canBop = true; }),
|
new BeatAction.Action(beat + 1.75f, delegate { see.canBop = true; }),
|
||||||
|
@ -718,18 +731,19 @@ namespace HeavenStudio.Games
|
||||||
|
|
||||||
void DetermineSeeJump(double beat, bool miss = false, bool high = false, float height = 0)
|
void DetermineSeeJump(double beat, bool miss = false, bool high = false, float height = 0)
|
||||||
{
|
{
|
||||||
if (currentJumpIndex >= 0
|
if (currentJumpIndex < 0) return;
|
||||||
&& (allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/longLong" || allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/shortLong"))
|
if (allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/longLong" || allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/shortLong")
|
||||||
{
|
{
|
||||||
if (NextJumpEventIsOnBeat())
|
if (NextJumpEventIsOnBeat())
|
||||||
{
|
{
|
||||||
|
bool shouldHighJump = allJumpEvents[currentJumpIndex]["high"] || high;
|
||||||
if (allJumpEvents[currentJumpIndex].datamodel is "seeSaw/longLong" or "seeSaw/shortLong")
|
if (allJumpEvents[currentJumpIndex].datamodel is "seeSaw/longLong" or "seeSaw/shortLong")
|
||||||
{
|
{
|
||||||
see.SetState(high ? SeeSawGuy.JumpState.HighOutOut : SeeSawGuy.JumpState.OutOut, beat, miss, height);
|
see.SetState(shouldHighJump ? SeeSawGuy.JumpState.HighOutOut : SeeSawGuy.JumpState.OutOut, beat, miss, height);
|
||||||
}
|
}
|
||||||
else if (allJumpEvents[currentJumpIndex].datamodel is "seeSaw/longShort" or "seeSaw/shortShort")
|
else if (allJumpEvents[currentJumpIndex].datamodel is "seeSaw/longShort" or "seeSaw/shortShort")
|
||||||
{
|
{
|
||||||
see.SetState(high ? SeeSawGuy.JumpState.HighOutIn : SeeSawGuy.JumpState.OutIn, beat, miss, height);
|
see.SetState(shouldHighJump ? SeeSawGuy.JumpState.HighOutIn : SeeSawGuy.JumpState.OutIn, beat, miss, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -745,8 +759,7 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (currentJumpIndex >= 0
|
else if (allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/longShort" || allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/shortShort")
|
||||||
&& (allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/longShort" || allJumpEvents[currentJumpIndex - 1].datamodel == "seeSaw/shortShort"))
|
|
||||||
{
|
{
|
||||||
if (NextJumpEventIsOnBeat())
|
if (NextJumpEventIsOnBeat())
|
||||||
{
|
{
|
||||||
|
|
|
@ -124,10 +124,10 @@ namespace HeavenStudio.Games.Scripts_Splashdown
|
||||||
Instantiate(splashPrefab, splashHolder).Init("Appearsplash");
|
Instantiate(splashPrefab, splashHolder).Init("Appearsplash");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GoDown()
|
public void GoDown(bool splash = true)
|
||||||
{
|
{
|
||||||
SetState(MovementState.Dive, startBeat);
|
SetState(MovementState.Dive, startBeat);
|
||||||
Instantiate(splashPrefab, splashHolder).Init("GodownSplash");
|
if (splash) Instantiate(splashPrefab, splashHolder).Init("GodownSplash");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Bop()
|
public void Bop()
|
||||||
|
|
|
@ -65,7 +65,7 @@ namespace HeavenStudio.Games.Loaders
|
||||||
},
|
},
|
||||||
new GameAction("amount", "Synchrette Amount")
|
new GameAction("amount", "Synchrette Amount")
|
||||||
{
|
{
|
||||||
function = delegate { Splashdown.instance.SpawnSynchrettes(eventCaller.currentEntity["amount"]); },
|
function = delegate { Splashdown.instance.SpawnSynchrettes(eventCaller.currentEntity["amount"], eventCaller.currentEntity.beat); },
|
||||||
defaultLength = 0.5f,
|
defaultLength = 0.5f,
|
||||||
parameters = new List<Param>()
|
parameters = new List<Param>()
|
||||||
{
|
{
|
||||||
|
@ -93,6 +93,7 @@ namespace HeavenStudio.Games
|
||||||
|
|
||||||
private List<NtrSynchrette> currentSynchrettes = new List<NtrSynchrette>();
|
private List<NtrSynchrette> currentSynchrettes = new List<NtrSynchrette>();
|
||||||
private NtrSynchrette player;
|
private NtrSynchrette player;
|
||||||
|
private double _gameSwitchBeat = -1;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
|
@ -100,6 +101,18 @@ namespace HeavenStudio.Games
|
||||||
SpawnSynchrettes(3);
|
SpawnSynchrettes(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void OnGameSwitch(double beat)
|
||||||
|
{
|
||||||
|
_gameSwitchBeat = beat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnPlay(double beat)
|
||||||
|
{
|
||||||
|
var events = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame" }).FindAll(x => x.beat < beat);
|
||||||
|
if (events.Count == 0) return;
|
||||||
|
_gameSwitchBeat = events[^1].beat;
|
||||||
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
var cond = Conductor.instance;
|
var cond = Conductor.instance;
|
||||||
|
@ -125,7 +138,7 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SpawnSynchrettes(int amount)
|
public void SpawnSynchrettes(int amount, double beat = -1)
|
||||||
{
|
{
|
||||||
if (currentSynchrettes.Count > 0)
|
if (currentSynchrettes.Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -137,13 +150,20 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
if (player != null) Destroy(player.gameObject);
|
if (player != null) Destroy(player.gameObject);
|
||||||
float startPos = -((amount / 2) * synchretteDistance) + ((amount % 2 == 0) ? synchretteDistance / 2 : 0);
|
float startPos = -((amount / 2) * synchretteDistance) + ((amount % 2 == 0) ? synchretteDistance / 2 : 0);
|
||||||
|
bool shouldGoDown = false;
|
||||||
|
if (beat >= 0)
|
||||||
|
{
|
||||||
|
var inputEvents = EventCaller.GetAllInGameManagerList("splashdown", new string[] { "dive", "appear", "jump", "together", "togetherR9" }).FindAll(x => x.beat < beat && x.beat >= _gameSwitchBeat);
|
||||||
|
if (inputEvents.Count > 0) shouldGoDown = inputEvents[^1].datamodel == "splashdown/dive";
|
||||||
|
}
|
||||||
for (int i = 0; i < amount; i++)
|
for (int i = 0; i < amount; i++)
|
||||||
{
|
{
|
||||||
NtrSynchrette spawnedSynchrette = Instantiate(synchrettePrefab, synchretteHolder);
|
NtrSynchrette spawnedSynchrette = Instantiate(synchrettePrefab, synchretteHolder);
|
||||||
spawnedSynchrette.transform.localPosition = new Vector3(startPos + (synchretteDistance * i), spawnedSynchrette.transform.localPosition.y, 0);
|
spawnedSynchrette.transform.localPosition = new Vector3(startPos + (synchretteDistance * i), spawnedSynchrette.transform.localPosition.y, 0);
|
||||||
if (i < amount - 1) currentSynchrettes.Add(spawnedSynchrette);
|
if (i < amount - 1) currentSynchrettes.Add(spawnedSynchrette);
|
||||||
else player = spawnedSynchrette;
|
else player = spawnedSynchrette;
|
||||||
|
|
||||||
|
if (shouldGoDown) spawnedSynchrette.GoDown(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,7 @@ namespace HeavenStudio.Games
|
||||||
|
|
||||||
protected static bool IA_TouchNrm(out double dt)
|
protected static bool IA_TouchNrm(out double dt)
|
||||||
{
|
{
|
||||||
return PlayerInput.GetFlick(out dt)
|
return PlayerInput.GetTouchDown(InputController.ActionsTouch.Tap, out dt)
|
||||||
&& (instance.currentReceiver is WhichTossKid.Akachan
|
&& (instance.currentReceiver is WhichTossKid.Akachan
|
||||||
|| (instance.lastReceiver is WhichTossKid.Akachan or WhichTossKid.None
|
|| (instance.lastReceiver is WhichTossKid.Akachan or WhichTossKid.None
|
||||||
&& instance.currentReceiver is WhichTossKid.None)
|
&& instance.currentReceiver is WhichTossKid.None)
|
||||||
|
@ -178,7 +178,7 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
protected static bool IA_TouchDir(out double dt)
|
protected static bool IA_TouchDir(out double dt)
|
||||||
{
|
{
|
||||||
return PlayerInput.GetFlick(out dt)
|
return PlayerInput.GetTouchDown(InputController.ActionsTouch.Tap, out dt)
|
||||||
&& (instance.currentReceiver is WhichTossKid.Kiiyan
|
&& (instance.currentReceiver is WhichTossKid.Kiiyan
|
||||||
|| (instance.lastReceiver is WhichTossKid.Kiiyan
|
|| (instance.lastReceiver is WhichTossKid.Kiiyan
|
||||||
&& instance.currentReceiver is WhichTossKid.None)
|
&& instance.currentReceiver is WhichTossKid.None)
|
||||||
|
@ -187,7 +187,7 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
protected static bool IA_TouchAlt(out double dt)
|
protected static bool IA_TouchAlt(out double dt)
|
||||||
{
|
{
|
||||||
return PlayerInput.GetFlick(out dt)
|
return PlayerInput.GetTouchDown(InputController.ActionsTouch.Tap, out dt)
|
||||||
&& (instance.currentReceiver is WhichTossKid.Aokun
|
&& (instance.currentReceiver is WhichTossKid.Aokun
|
||||||
|| (instance.lastReceiver is WhichTossKid.Aokun
|
|| (instance.lastReceiver is WhichTossKid.Aokun
|
||||||
&& instance.currentReceiver is WhichTossKid.None)
|
&& instance.currentReceiver is WhichTossKid.None)
|
||||||
|
@ -276,44 +276,6 @@ namespace HeavenStudio.Games
|
||||||
BackgroundColorUpdate();
|
BackgroundColorUpdate();
|
||||||
if (cond.isPlaying && !cond.isPaused)
|
if (cond.isPlaying && !cond.isPaused)
|
||||||
{
|
{
|
||||||
if (PlayerInput.CurrentControlStyle == InputController.ControlStyles.Touch)
|
|
||||||
{
|
|
||||||
TossKid next = GetCurrentReceiver();
|
|
||||||
if (currentReceiver == WhichTossKid.None && lastReceiver != WhichTossKid.None)
|
|
||||||
{
|
|
||||||
next = GetReceiver(lastReceiver);
|
|
||||||
}
|
|
||||||
else if (currentReceiver == WhichTossKid.None && lastReceiver == WhichTossKid.None)
|
|
||||||
{
|
|
||||||
next = akachan;
|
|
||||||
}
|
|
||||||
if (PlayerInput.GetIsAction(InputAction_BasicPress))
|
|
||||||
{
|
|
||||||
if (currentBall != null && next != null)
|
|
||||||
{
|
|
||||||
if (currentBall.willBePopped)
|
|
||||||
{
|
|
||||||
next.PopBallPrepare();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
next.Crouch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (next != null)
|
|
||||||
{
|
|
||||||
next.Crouch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (PlayerInput.GetIsAction(InputAction_BasicRelease))
|
|
||||||
{
|
|
||||||
if (next != null)
|
|
||||||
{
|
|
||||||
next.UnCrouch();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PlayerInput.GetIsAction(InputAction_Aka) && !IsExpectingInputNow(InputAction_Aka))
|
if (PlayerInput.GetIsAction(InputAction_Aka) && !IsExpectingInputNow(InputAction_Aka))
|
||||||
{
|
{
|
||||||
akachan.HitBall(false);
|
akachan.HitBall(false);
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace HeavenStudio.Games.Scripts_TossBoys
|
||||||
|
|
||||||
public void Bop()
|
public void Bop()
|
||||||
{
|
{
|
||||||
if (crouch || preparing) return;
|
if (crouch || preparing || (!anim.IsAnimationNotPlaying() && !anim.IsPlayingAnimationName(prefix + "Idle"))) return;
|
||||||
DoAnimationScaledAsync("Bop", 0.5f);
|
DoAnimationScaledAsync("Bop", 0.5f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1025,7 +1025,15 @@ namespace HeavenStudio
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new GameAction("screenTiling", "Screen Tiling")
|
new GameAction("fitScreen", "Fit Game To Screen")
|
||||||
|
{
|
||||||
|
defaultLength = 0.5f,
|
||||||
|
parameters = new()
|
||||||
|
{
|
||||||
|
new("enable", true, "Enabled")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new GameAction("screenTiling", "Tile Screen")
|
||||||
{
|
{
|
||||||
resizable = true,
|
resizable = true,
|
||||||
parameters = new()
|
parameters = new()
|
||||||
|
@ -1034,15 +1042,26 @@ namespace HeavenStudio
|
||||||
new("yStart", new EntityTypes.Float(1, 100, 1), "Start Vertical Tiles"),
|
new("yStart", new EntityTypes.Float(1, 100, 1), "Start Vertical Tiles"),
|
||||||
new("xEnd", new EntityTypes.Float(1, 100, 1), "End Horizontal Tiles"),
|
new("xEnd", new EntityTypes.Float(1, 100, 1), "End Horizontal Tiles"),
|
||||||
new("yEnd", new EntityTypes.Float(1, 100, 1), "End Vertical Tiles"),
|
new("yEnd", new EntityTypes.Float(1, 100, 1), "End Vertical Tiles"),
|
||||||
|
new Param("axis", StaticCamera.ViewAxis.All, "Axis"),
|
||||||
|
new("ease", Util.EasingFunction.Ease.Linear, "Ease", "", new()
|
||||||
|
{
|
||||||
|
new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "xStart", "yStart" })
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
new GameAction("scrollTiles", "Scroll Tiles")
|
||||||
|
{
|
||||||
|
resizable = true,
|
||||||
|
parameters = new()
|
||||||
|
{
|
||||||
new("xScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Horizontal Scroll"),
|
new("xScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Horizontal Scroll"),
|
||||||
new("yScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Vertical Scroll"),
|
new("yScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Vertical Scroll"),
|
||||||
new("xScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Horizontal Scroll"),
|
new("xScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Horizontal Scroll"),
|
||||||
new("yScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Vertical Scroll"),
|
new("yScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Vertical Scroll"),
|
||||||
|
new Param("axis", StaticCamera.ViewAxis.All, "Axis"),
|
||||||
new("ease", Util.EasingFunction.Ease.Linear, "Ease", "", new()
|
new("ease", Util.EasingFunction.Ease.Linear, "Ease", "", new()
|
||||||
{
|
{
|
||||||
new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "xStart", "yStart", "xScrollStart", "yScrollStart" })
|
new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "xScrollStart", "yScrollStart" })
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,8 @@ namespace HeavenStudio
|
||||||
{
|
{
|
||||||
private RawImage _image;
|
private RawImage _image;
|
||||||
|
|
||||||
private List<RiqEntity> _events = new();
|
private List<RiqEntity> _tileEvents = new();
|
||||||
|
private List<RiqEntity> _scrollEvents = new();
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
|
@ -24,14 +25,19 @@ namespace HeavenStudio
|
||||||
|
|
||||||
public void OnBeatChanged(double beat)
|
public void OnBeatChanged(double beat)
|
||||||
{
|
{
|
||||||
_events = EventCaller.GetAllInGameManagerList("vfx", new string[] { "screenTiling" });
|
_tileEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "screenTiling" });
|
||||||
|
_scrollEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "scrollTiles" });
|
||||||
ResetUVRect();
|
ResetUVRect();
|
||||||
Update();
|
Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
foreach (var e in _events)
|
float newXTiles = 1;
|
||||||
|
float newYTiles = 1;
|
||||||
|
float newXScroll = 0;
|
||||||
|
float newYScroll = 0;
|
||||||
|
foreach (var e in _tileEvents)
|
||||||
{
|
{
|
||||||
float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
|
float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
|
||||||
if (normalized < 0) break;
|
if (normalized < 0) break;
|
||||||
|
@ -40,13 +46,45 @@ namespace HeavenStudio
|
||||||
|
|
||||||
var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]);
|
var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]);
|
||||||
|
|
||||||
float newXTiles = func(e["xStart"], e["xEnd"], clampNormal);
|
switch ((StaticCamera.ViewAxis)e["axis"])
|
||||||
float newYTiles = func(e["yStart"], e["yEnd"], clampNormal);
|
{
|
||||||
float newXScroll = func(e["xScrollStart"], e["xScrollEnd"], clampNormal);
|
case StaticCamera.ViewAxis.All:
|
||||||
float newYScroll = func(e["yScrollStart"], e["yScrollEnd"], clampNormal);
|
newXTiles = func(e["xStart"], e["xEnd"], clampNormal);
|
||||||
|
newYTiles = func(e["yStart"], e["yEnd"], clampNormal);
|
||||||
_image.uvRect = new Rect(newXScroll, newYScroll, newXTiles, newYTiles);
|
break;
|
||||||
|
case StaticCamera.ViewAxis.X:
|
||||||
|
newXTiles = func(e["xStart"], e["xEnd"], clampNormal);
|
||||||
|
break;
|
||||||
|
case StaticCamera.ViewAxis.Y:
|
||||||
|
newYTiles = func(e["yStart"], e["yEnd"], clampNormal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var e in _scrollEvents)
|
||||||
|
{
|
||||||
|
float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
|
||||||
|
if (normalized < 0) break;
|
||||||
|
|
||||||
|
float clampNormal = Mathf.Clamp01(normalized);
|
||||||
|
|
||||||
|
var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]);
|
||||||
|
|
||||||
|
switch ((StaticCamera.ViewAxis)e["axis"])
|
||||||
|
{
|
||||||
|
case StaticCamera.ViewAxis.All:
|
||||||
|
newXScroll = func(e["xScrollStart"], e["xScrollEnd"], clampNormal);
|
||||||
|
newYScroll = func(e["yScrollStart"], e["yScrollEnd"], clampNormal);
|
||||||
|
break;
|
||||||
|
case StaticCamera.ViewAxis.X:
|
||||||
|
newXScroll = func(e["xScrollStart"], e["xScrollEnd"], clampNormal);
|
||||||
|
break;
|
||||||
|
case StaticCamera.ViewAxis.Y:
|
||||||
|
newYScroll = func(e["yScrollStart"], e["yScrollEnd"], clampNormal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_image.uvRect = new Rect(newXScroll, newYScroll, newXTiles, newYTiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetUVRect()
|
public void ResetUVRect()
|
||||||
|
|
|
@ -21,6 +21,10 @@ namespace HeavenStudio
|
||||||
[SerializeField] GameObject ambientBgGO;
|
[SerializeField] GameObject ambientBgGO;
|
||||||
[SerializeField] GameObject letterboxBgGO;
|
[SerializeField] GameObject letterboxBgGO;
|
||||||
|
|
||||||
|
[SerializeField] RectTransform overlayCanvas;
|
||||||
|
[SerializeField] RectTransform letterboxMask;
|
||||||
|
[SerializeField] RectTransform parentView;
|
||||||
|
|
||||||
public static StaticCamera instance { get; private set; }
|
public static StaticCamera instance { get; private set; }
|
||||||
public new Camera camera;
|
public new Camera camera;
|
||||||
|
|
||||||
|
@ -37,6 +41,7 @@ namespace HeavenStudio
|
||||||
private List<RiqEntity> panEvents = new();
|
private List<RiqEntity> panEvents = new();
|
||||||
private List<RiqEntity> scaleEvents = new();
|
private List<RiqEntity> scaleEvents = new();
|
||||||
private List<RiqEntity> rotationEvents = new();
|
private List<RiqEntity> rotationEvents = new();
|
||||||
|
private List<RiqEntity> fitScreenEvents = new();
|
||||||
|
|
||||||
static Vector3 defaultPan = new Vector3(0, 0, 0);
|
static Vector3 defaultPan = new Vector3(0, 0, 0);
|
||||||
static Vector3 defaultScale = new Vector3(1, 1, 1);
|
static Vector3 defaultScale = new Vector3(1, 1, 1);
|
||||||
|
@ -78,6 +83,7 @@ namespace HeavenStudio
|
||||||
panEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "pan view" });
|
panEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "pan view" });
|
||||||
scaleEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "scale view" });
|
scaleEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "scale view" });
|
||||||
rotationEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "rotate view" });
|
rotationEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "rotate view" });
|
||||||
|
fitScreenEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "fitScreen" });
|
||||||
|
|
||||||
panLast = defaultPan;
|
panLast = defaultPan;
|
||||||
scaleLast = defaultScale;
|
scaleLast = defaultScale;
|
||||||
|
@ -86,6 +92,7 @@ namespace HeavenStudio
|
||||||
UpdatePan();
|
UpdatePan();
|
||||||
UpdateRotation();
|
UpdateRotation();
|
||||||
UpdateScale();
|
UpdateScale();
|
||||||
|
UpdateGameScreenFit();
|
||||||
|
|
||||||
canvas.localPosition = pan;
|
canvas.localPosition = pan;
|
||||||
canvas.eulerAngles = new Vector3(0, 0, rotation);
|
canvas.eulerAngles = new Vector3(0, 0, rotation);
|
||||||
|
@ -98,12 +105,34 @@ namespace HeavenStudio
|
||||||
UpdatePan();
|
UpdatePan();
|
||||||
UpdateRotation();
|
UpdateRotation();
|
||||||
UpdateScale();
|
UpdateScale();
|
||||||
|
UpdateGameScreenFit();
|
||||||
|
|
||||||
canvas.localPosition = pan;
|
canvas.localPosition = pan;
|
||||||
canvas.eulerAngles = new Vector3(0, 0, rotation);
|
canvas.eulerAngles = new Vector3(0, 0, rotation);
|
||||||
canvas.localScale = scale;
|
canvas.localScale = scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void UpdateGameScreenFit()
|
||||||
|
{
|
||||||
|
var curBeat = Conductor.instance.songPositionInBeatsAsDouble;
|
||||||
|
letterboxMask.localScale = new Vector3(1, 1, 1);
|
||||||
|
overlayCanvas.localScale = new Vector3(1, 1, 1);
|
||||||
|
foreach (var e in fitScreenEvents)
|
||||||
|
{
|
||||||
|
if (curBeat < e.beat) break;
|
||||||
|
if (e["enable"])
|
||||||
|
{
|
||||||
|
letterboxMask.localScale = new Vector3(parentView.sizeDelta.x / 16, parentView.sizeDelta.y / 9, 1);
|
||||||
|
overlayCanvas.localScale = new Vector3(parentView.sizeDelta.x / 16, parentView.sizeDelta.y / 9, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
letterboxMask.localScale = new Vector3(1, 1, 1);
|
||||||
|
overlayCanvas.localScale = new Vector3(1, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdatePan()
|
private void UpdatePan()
|
||||||
{
|
{
|
||||||
foreach (var e in panEvents)
|
foreach (var e in panEvents)
|
||||||
|
|
Loading…
Reference in a new issue