Merge branch 'release_1'

This commit is contained in:
minenice55 2023-12-05 17:40:18 -05:00
commit 76bd91a444
35 changed files with 768 additions and 699 deletions

File diff suppressed because it is too large Load Diff

View File

@ -20,17 +20,17 @@ AnimationClip:
m_Curve: m_Curve:
- serializedVersion: 3 - serializedVersion: 3
time: 0 time: 0
value: {x: 1.258, y: 0.542, z: 0} value: {x: 1.4, y: 0.68, z: 0}
inSlope: {x: -1.4679999, y: -0, z: -0} inSlope: {x: -1.184, y: -0, z: -0}
outSlope: {x: 0, y: 0.17200005, z: 0} outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0 tangentMode: 0
weightedMode: 0 weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3 - serializedVersion: 3
time: 0.5 time: 0.5
value: {x: 1.258, y: 0.628, z: 0} value: {x: 1.4, y: 0.89, z: 0}
inSlope: {x: -0, y: 0.17200005, z: -0} inSlope: {x: -0, y: 0.41999996, z: -0}
outSlope: {x: 0, y: 0, z: 0} outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0 tangentMode: 0
weightedMode: 0 weightedMode: 0
@ -49,8 +49,8 @@ AnimationClip:
time: 0 time: 0
value: 1 value: 1
inSlope: 2 inSlope: 2
outSlope: -2 outSlope: 0
tangentMode: 69 tangentMode: 5
weightedMode: 0 weightedMode: 0
inWeight: 0.33333334 inWeight: 0.33333334
outWeight: 0.33333334 outWeight: 0.33333334
@ -134,16 +134,16 @@ AnimationClip:
m_Curve: m_Curve:
- serializedVersion: 3 - serializedVersion: 3
time: 0 time: 0
value: 1.258 value: 1.4
inSlope: -1.4679999 inSlope: -1.184
outSlope: 0 outSlope: 0
tangentMode: 69 tangentMode: 5
weightedMode: 0 weightedMode: 0
inWeight: 0.33333334 inWeight: 0.33333334
outWeight: 0.33333334 outWeight: 0.33333334
- serializedVersion: 3 - serializedVersion: 3
time: 0.5 time: 0.5
value: 1.258 value: 1.4
inSlope: -0 inSlope: -0
outSlope: 0 outSlope: 0
tangentMode: 69 tangentMode: 69
@ -162,17 +162,17 @@ AnimationClip:
m_Curve: m_Curve:
- serializedVersion: 3 - serializedVersion: 3
time: 0 time: 0
value: 0.542 value: 0.68
inSlope: -0 inSlope: -0
outSlope: 0.17200005 outSlope: 0
tangentMode: 69 tangentMode: 5
weightedMode: 0 weightedMode: 0
inWeight: 0.33333334 inWeight: 0.33333334
outWeight: 0.33333334 outWeight: 0.33333334
- serializedVersion: 3 - serializedVersion: 3
time: 0.5 time: 0.5
value: 0.628 value: 0.89
inSlope: 0.17200005 inSlope: 0.41999996
outSlope: 0 outSlope: 0
tangentMode: 69 tangentMode: 69
weightedMode: 0 weightedMode: 0
@ -193,7 +193,7 @@ AnimationClip:
value: 0 value: 0
inSlope: -0 inSlope: -0
outSlope: 0 outSlope: 0
tangentMode: 69 tangentMode: 5
weightedMode: 0 weightedMode: 0
inWeight: 0.33333334 inWeight: 0.33333334
outWeight: 0.33333334 outWeight: 0.33333334
@ -220,8 +220,8 @@ AnimationClip:
time: 0 time: 0
value: 1 value: 1
inSlope: 2 inSlope: 2
outSlope: -2 outSlope: 0
tangentMode: 69 tangentMode: 5
weightedMode: 0 weightedMode: 0
inWeight: 0.33333334 inWeight: 0.33333334
outWeight: 0.33333334 outWeight: 0.33333334

View File

@ -98,6 +98,15 @@ AnimationClip:
- serializedVersion: 3 - serializedVersion: 3
time: 0.35 time: 0.35
value: {x: 0.017, y: 0.261, z: 74.52776} value: {x: 0.017, y: 0.261, z: 74.52776}
inSlope: {x: 2.7443511, y: -2.188788, z: 0}
outSlope: {x: 2.7443511, y: -2.188788, z: 0}
tangentMode: 0
weightedMode: 0
inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334}
- serializedVersion: 3
time: 0.4
value: {x: 0.1744351, y: 0.1891212, z: 74.52776}
inSlope: {x: 0, y: 0, z: 0} inSlope: {x: 0, y: 0, z: 0}
outSlope: {x: 0, y: 0, z: 0} outSlope: {x: 0, y: 0, z: 0}
tangentMode: 0 tangentMode: 0
@ -192,59 +201,6 @@ AnimationClip:
classID: 1 classID: 1
script: {fileID: 0} script: {fileID: 0}
m_PPtrCurves: m_PPtrCurves:
- curve:
- time: 0
value: {fileID: 0}
- time: 0.016666668
value: {fileID: 0}
- time: 0.033333335
value: {fileID: 0}
- time: 0.05
value: {fileID: 0}
- time: 0.06666667
value: {fileID: 0}
- time: 0.083333336
value: {fileID: 0}
- time: 0.1
value: {fileID: 0}
- time: 0.11666667
value: {fileID: 0}
- time: 0.13333334
value: {fileID: 0}
- time: 0.15
value: {fileID: 0}
- time: 0.16666667
value: {fileID: 0}
- time: 0.18333334
value: {fileID: 0}
- time: 0.2
value: {fileID: 0}
- time: 0.21666667
value: {fileID: 0}
- time: 0.23333333
value: {fileID: 0}
- time: 0.25
value: {fileID: 0}
- time: 0.26666668
value: {fileID: 0}
- time: 0.28333333
value: {fileID: 0}
- time: 0.3
value: {fileID: 0}
- time: 0.31666666
value: {fileID: 0}
- time: 0.33333334
value: {fileID: 0}
- time: 0.35
value: {fileID: 0}
- time: 0.36666667
value: {fileID: 0}
- time: 0.38333333
value: {fileID: 0}
attribute: m_Sprite
path: Fork_Lifter_Gameplay
classID: 212
script: {fileID: 0}
- curve: - curve:
- time: 0 - time: 0
value: {fileID: -4922902375269903740, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} value: {fileID: -4922902375269903740, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3}
@ -307,13 +263,6 @@ AnimationClip:
typeID: 1 typeID: 1
customType: 0 customType: 0
isPPtrCurve: 0 isPPtrCurve: 0
- serializedVersion: 2
path: 345648135
attribute: 0
script: {fileID: 0}
typeID: 212
customType: 23
isPPtrCurve: 1
- serializedVersion: 2 - serializedVersion: 2
path: 3267382320 path: 3267382320
attribute: 0 attribute: 0
@ -336,30 +285,6 @@ AnimationClip:
customType: 0 customType: 0
isPPtrCurve: 0 isPPtrCurve: 0
pptrCurveMapping: pptrCurveMapping:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: -4922902375269903740, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} - {fileID: -4922902375269903740, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3}
- {fileID: -3456084564025576355, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} - {fileID: -3456084564025576355, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3}
- {fileID: -3456084564025576355, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3} - {fileID: -3456084564025576355, guid: 52117e1d5cd298c42adfea952676c7d6, type: 3}
@ -688,6 +613,15 @@ AnimationClip:
- serializedVersion: 3 - serializedVersion: 3
time: 0.35 time: 0.35
value: 0.017 value: 0.017
inSlope: 2.7443511
outSlope: 2.7443511
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.4
value: 0.1744351
inSlope: 0 inSlope: 0
outSlope: 0 outSlope: 0
tangentMode: 136 tangentMode: 136
@ -716,6 +650,15 @@ AnimationClip:
- serializedVersion: 3 - serializedVersion: 3
time: 0.35 time: 0.35
value: 0.261 value: 0.261
inSlope: -2.188788
outSlope: -2.188788
tangentMode: 136
weightedMode: 0
inWeight: 0.33333334
outWeight: 0.33333334
- serializedVersion: 3
time: 0.4
value: 0.1891212
inSlope: 0 inSlope: 0
outSlope: 0 outSlope: 0
tangentMode: 136 tangentMode: 136

View File

@ -6701,7 +6701,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.z attribute: m_LocalEulerAngles.z
path: HandL path: FootR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6711,7 +6711,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.y attribute: m_LocalEulerAngles.y
path: HandL path: FootR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6721,7 +6721,37 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.x attribute: m_LocalEulerAngles.x
path: HandL path: FootR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: LegLowR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: LegLowR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: LegLowR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6761,7 +6791,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.z attribute: m_LocalEulerAngles.z
path: LegUpR path: LegLowL
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6771,7 +6801,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.y attribute: m_LocalEulerAngles.y
path: LegUpR path: LegLowL
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6781,7 +6811,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.x attribute: m_LocalEulerAngles.x
path: LegUpR path: LegLowL
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6911,7 +6941,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.z attribute: m_LocalEulerAngles.z
path: EyeL path: EyeR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6921,7 +6951,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.y attribute: m_LocalEulerAngles.y
path: EyeL path: EyeR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6931,7 +6961,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.x attribute: m_LocalEulerAngles.x
path: EyeL path: EyeR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6971,7 +7001,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.z attribute: m_LocalEulerAngles.z
path: FootR path: LegUpR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6981,7 +7011,7 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.y attribute: m_LocalEulerAngles.y
path: FootR path: LegUpR
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -6991,7 +7021,97 @@ AnimationClip:
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.x attribute: m_LocalEulerAngles.x
path: FootR path: LegUpR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: EyeL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: EyeL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: EyeL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: Head
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: Head
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: Head
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: HandL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: HandL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: HandL
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve: - curve:
@ -7024,66 +7144,6 @@ AnimationClip:
path: Mouth path: Mouth
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: EyeR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: EyeR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: EyeR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: LegLowL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: LegLowL
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: LegLowL
classID: 4
script: {fileID: 0}
- curve: - curve:
serializedVersion: 2 serializedVersion: 2
m_Curve: [] m_Curve: []
@ -7120,7 +7180,7 @@ AnimationClip:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.z attribute: m_LocalEulerAngles.x
path: Woosh path: Woosh
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
@ -7140,70 +7200,10 @@ AnimationClip:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
attribute: m_LocalEulerAngles.x attribute: m_LocalEulerAngles.z
path: Woosh path: Woosh
classID: 4 classID: 4
script: {fileID: 0} script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: Head
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: Head
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: Head
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.x
path: LegLowR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.y
path: LegLowR
classID: 4
script: {fileID: 0}
- curve:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_LocalEulerAngles.z
path: LegLowR
classID: 4
script: {fileID: 0}
m_HasGenericRootTransform: 0 m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0 m_HasMotionFloatCurves: 0
m_Events: [] m_Events: []

View File

@ -406,11 +406,11 @@ namespace HeavenStudio
public void LateUpdate() public void LateUpdate()
{ {
if (metronome && isPlaying) if (isPlaying)
{ {
if (songPositionInBeatsAsDouble >= Math.Ceiling(startBeat) + _metronomeTally) if (songPositionInBeatsAsDouble >= Math.Ceiling(startBeat) + _metronomeTally)
{ {
metronomeSound = Util.SoundByte.PlayOneShot("metronome", Math.Ceiling(startBeat) + _metronomeTally); if (metronome) metronomeSound = Util.SoundByte.PlayOneShot("metronome", Math.Ceiling(startBeat) + _metronomeTally);
_metronomeTally++; _metronomeTally++;
} }
} }

View File

@ -29,7 +29,7 @@ namespace HeavenStudio.Games.Loaders
}, },
new GameAction("setEmotion", "Emotion") new GameAction("setEmotion", "Emotion")
{ {
function = delegate { var e = eventCaller.currentEntity; BlueBear.instance.SetEmotion(e["type"]); }, function = delegate { var e = eventCaller.currentEntity; BlueBear.instance.SetEmotion(e.beat, e["type"]); },
parameters = new List<Param>() parameters = new List<Param>()
{ {
new Param("type", BlueBear.EmotionType.ClosedEyes, "Emotion", "Which emotion should the blue bear use?") new Param("type", BlueBear.EmotionType.ClosedEyes, "Emotion", "Which emotion should the blue bear use?")
@ -274,18 +274,18 @@ namespace HeavenStudio.Games
headAndBodyAnim.SetBool("ShouldOpenMouth", foodHolder.childCount != 0); headAndBodyAnim.SetBool("ShouldOpenMouth", foodHolder.childCount != 0);
if (headAndBodyAnim.GetBool("ShouldOpenMouth")) if (headAndBodyAnim.GetBool("ShouldOpenMouth"))
{ {
_emotionCancelled = true; _emotionCancelledBeat = Conductor.instance.songPositionInBeatsAsDouble;
} }
if (PlayerInput.GetIsAction(InputAction_Left) && !IsExpectingInputNow(InputAction_Left.inputLockCategory)) if (PlayerInput.GetIsAction(InputAction_Left) && !IsExpectingInputNow(InputAction_Left.inputLockCategory))
{ {
SoundByte.PlayOneShotGame("blueBear/whiff", -1, SoundByte.GetPitchFromSemiTones(UnityEngine.Random.Range(-1, 2), false)); SoundByte.PlayOneShotGame("blueBear/whiff", -1, SoundByte.GetPitchFromSemiTones(UnityEngine.Random.Range(-1, 2), false));
Bite(true); Bite(Conductor.instance.songPositionInBeatsAsDouble, true);
} }
else if (PlayerInput.GetIsAction(InputAction_Right) && !IsExpectingInputNow(InputAction_Right.inputLockCategory)) else if (PlayerInput.GetIsAction(InputAction_Right) && !IsExpectingInputNow(InputAction_Right.inputLockCategory))
{ {
SoundByte.PlayOneShotGame("blueBear/whiff", -1, SoundByte.GetPitchFromSemiTones(UnityEngine.Random.Range(-1, 2), false)); SoundByte.PlayOneShotGame("blueBear/whiff", -1, SoundByte.GetPitchFromSemiTones(UnityEngine.Random.Range(-1, 2), false));
Bite(false); Bite(Conductor.instance.songPositionInBeatsAsDouble, false);
} }
UpdateEmotions(); UpdateEmotions();
@ -298,7 +298,7 @@ namespace HeavenStudio.Games
windAnim.SetScaledAnimationSpeed(); windAnim.SetScaledAnimationSpeed();
} }
private bool _emotionCancelled = false; private double _emotionCancelledBeat = -1;
private int _emotionIndex = 0; private int _emotionIndex = 0;
private List<RiqEntity> _allEmotionsStretch = new(); private List<RiqEntity> _allEmotionsStretch = new();
private EmotionStretchType _lastEmotion = EmotionStretchType.LookUp; private EmotionStretchType _lastEmotion = EmotionStretchType.LookUp;
@ -317,12 +317,11 @@ namespace HeavenStudio.Games
_emotionIndex++; _emotionIndex++;
_lastEmotion = (EmotionStretchType)_allEmotionsStretch[_emotionIndex - 1]["type"]; _lastEmotion = (EmotionStretchType)_allEmotionsStretch[_emotionIndex - 1]["type"];
crying = _lastEmotion == EmotionStretchType.StartCrying; crying = _lastEmotion == EmotionStretchType.StartCrying;
_emotionCancelled = false;
UpdateEmotions(); UpdateEmotions();
return; return;
} }
if (beat >= e.beat && beat < e.beat + e.length && !_emotionCancelled) if (beat >= e.beat && beat < e.beat + e.length && !(_emotionCancelledBeat >= e.beat && _emotionCancelledBeat < e.beat + e.length))
{ {
_lastEmotion = (EmotionStretchType)e["type"]; _lastEmotion = (EmotionStretchType)e["type"];
crying = _lastEmotion == EmotionStretchType.StartCrying; crying = _lastEmotion == EmotionStretchType.StartCrying;
@ -388,9 +387,9 @@ namespace HeavenStudio.Games
windAnim.DoScaledAnimationAsync("Wind", 0.5f); windAnim.DoScaledAnimationAsync("Wind", 0.5f);
} }
public void Bite(bool left) public void Bite(double beat, bool left)
{ {
_emotionCancelled = true; _emotionCancelledBeat = beat;
if (crying) if (crying)
{ {
headAndBodyAnim.DoScaledAnimationAsync(left ? "CryBiteL" : "CryBiteR", 0.5f); headAndBodyAnim.DoScaledAnimationAsync(left ? "CryBiteL" : "CryBiteR", 0.5f);
@ -456,14 +455,15 @@ namespace HeavenStudio.Games
} }
} }
public void SetEmotion(int emotion) public void SetEmotion(double beat, int emotion)
{ {
_emotionCancelled = true; _emotionCancelledBeat = beat;
switch (emotion) switch (emotion)
{ {
case (int)EmotionType.Neutral: case (int)EmotionType.Neutral:
//check if smiling then play "StopSmile"
headAndBodyAnim.DoScaledAnimationAsync("Idle", 0.5f); headAndBodyAnim.DoScaledAnimationAsync("Idle", 0.5f);
if (_allEmotionsStretch.Count == 0 || _lastEmotion != EmotionStretchType.Smile) return;
headAndBodyAnim.DoScaledAnimationAsync("StopSmile", 0.5f);
crying = false; crying = false;
break; break;
case (int)EmotionType.ClosedEyes: case (int)EmotionType.ClosedEyes:

View File

@ -68,7 +68,7 @@ namespace HeavenStudio.Games.Scripts_BlueBear
SoundByte.PlayOneShotGame("blueBear/chompDonut"); SoundByte.PlayOneShotGame("blueBear/chompDonut");
} }
game.Bite(isCake); game.Bite(Conductor.instance.songPositionInBeatsAsDouble, isCake);
game.EatTreat(); game.EatTreat();
SpawnCrumbs(); SpawnCrumbs();

View File

@ -91,10 +91,8 @@ namespace HeavenStudio.Games
[SerializeField] List<BMExecutive> executives = new List<BMExecutive>(); [SerializeField] List<BMExecutive> executives = new List<BMExecutive>();
public BMExecutive firstSpinner; public BMExecutive firstSpinner;
[SerializeField] float shakeIntensity = 0.5f; [SerializeField] float shakeIntensity = 0.5f;
public bool shouldBop = true;
private bool assistantCanBop = true; private bool assistantCanBop = true;
private bool executivesCanBop = true; private bool executivesCanBop = true;
public GameEvent bop = new GameEvent();
[NonSerialized] public Sound chairLoopSound = null; [NonSerialized] public Sound chairLoopSound = null;
int missCounter = 0; int missCounter = 0;
private Tween shakeTween; private Tween shakeTween;
@ -104,6 +102,7 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("boardMeeting", "bop", "auto");
InitExecutives(); InitExecutives();
} }
@ -145,7 +144,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (!shouldBop) return; if (!BeatIsInBopRegion(beat)) return;
SingleBop(); SingleBop();
} }
@ -166,7 +165,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool goBop, bool autoBop) public void Bop(double beat, float length, bool goBop, bool autoBop)
{ {
shouldBop = autoBop;
if (goBop) if (goBop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -80,10 +80,10 @@ namespace HeavenStudio.Games
public enum WhoBops public enum WhoBops
{ {
Alalin, Alalin = 1,
Plalin, Plalin = 2,
Both, Both = 0,
None None = 3
} }
public enum Background public enum Background
@ -111,10 +111,6 @@ namespace HeavenStudio.Games
private double startSmile = 0; private double startSmile = 0;
private double stopSmile = 0; private double stopSmile = 0;
private bool bopLeft = true;
private bool bopRight = true;
public GameEvent bop = new GameEvent();
public static CatchyTune instance; public static CatchyTune instance;
static List<QueuedFruit> queuedFruits = new List<QueuedFruit>(); static List<QueuedFruit> queuedFruits = new List<QueuedFruit>();
struct QueuedFruit struct QueuedFruit
@ -184,6 +180,7 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("catchyTune", "bop", "bopAuto", false);
} }
const float orangeoffset = 0.5f; const float orangeoffset = 0.5f;
@ -249,6 +246,9 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
int whoBopsAuto = BeatIsInBopRegionInt(beat);
bool bopLeft = whoBopsAuto == (int)WhoBops.Plalin || whoBopsAuto == (int)WhoBops.Both;
bool bopRight = whoBopsAuto == (int)WhoBops.Alalin || whoBopsAuto == (int)WhoBops.Both;
if (bopLeft && stopCatchLeft == 0) if (bopLeft && stopCatchLeft == 0)
{ {
plalinAnim.DoScaledAnimationAsync("bop", 0.5f); plalinAnim.DoScaledAnimationAsync("bop", 0.5f);
@ -323,8 +323,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, int whoBops, int whoBopsAuto) public void Bop(double beat, float length, int whoBops, int whoBopsAuto)
{ {
bopLeft = whoBopsAuto == (int)WhoBops.Plalin || whoBopsAuto == (int)WhoBops.Both;
bopRight = whoBopsAuto == (int)WhoBops.Alalin || whoBopsAuto == (int)WhoBops.Both;
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)
{ {
BeatAction.New(instance, new List<BeatAction.Action>() BeatAction.New(instance, new List<BeatAction.Action>()

View File

@ -163,7 +163,6 @@ namespace HeavenStudio.Games
Sound SpinningLoop; Sound SpinningLoop;
[Header("Variables")] [Header("Variables")]
[SerializeField] List<PosterImages> posters = new List<PosterImages>(); [SerializeField] List<PosterImages> posters = new List<PosterImages>();
bool shouldBop = true;
bool canBop = true; bool canBop = true;
public bool doingCue; public bool doingCue;
double cueLength; double cueLength;
@ -171,7 +170,6 @@ namespace HeavenStudio.Games
bool shouldYay; bool shouldYay;
bool shouldDoSuccessZoom; bool shouldDoSuccessZoom;
public bool shouldBeBlack = false; public bool shouldBeBlack = false;
public GameEvent bop = new GameEvent();
int currentZoomIndex; int currentZoomIndex;
double currentZoomCamBeat; double currentZoomCamBeat;
float currentZoomCamLength; float currentZoomCamLength;
@ -230,6 +228,7 @@ namespace HeavenStudio.Games
void Awake() void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("cheerReaders", "bop", "toggle2");
for (int i = 0; i < topMasks.Count; i++) for (int i = 0; i < topMasks.Count; i++)
{ {
firstRow[i].posterBook = topMasks[i]; firstRow[i].posterBook = topMasks[i];
@ -264,7 +263,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (!shouldBop) return; if (!BeatIsInBopRegion(beat)) return;
BopSingle(); BopSingle();
} }
@ -482,7 +481,6 @@ namespace HeavenStudio.Games
public void BopToggle(double beat, float length, bool startBop, bool bopAuto) public void BopToggle(double beat, float length, bool startBop, bool bopAuto)
{ {
shouldBop = bopAuto;
if (startBop) if (startBop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -16,13 +16,13 @@ namespace HeavenStudio.Games.Loaders
{ {
new GameAction("start marching", "Start Marching") new GameAction("start marching", "Start Marching")
{ {
function = delegate { CropStomp.instance.StartMarching(eventCaller.currentEntity.beat); }, function = delegate { CropStomp.instance.StartMarching(eventCaller.currentEntity.beat); },
defaultLength = 2f, defaultLength = 2f,
inactiveFunction = delegate { CropStomp.MarchInactive(eventCaller.currentEntity.beat); } inactiveFunction = delegate { CropStomp.MarchInactive(eventCaller.currentEntity.beat); }
}, },
new GameAction("veggies", "Veggies") new GameAction("veggies", "Veggies")
{ {
defaultLength = 4f, defaultLength = 4f,
resizable = true resizable = true
}, },
new GameAction("mole", "Mole") new GameAction("mole", "Mole")
@ -49,7 +49,8 @@ namespace HeavenStudio.Games.Loaders
new GameAction("plantCollect", "Veggie Collection Values") new GameAction("plantCollect", "Veggie Collection Values")
{ {
function = delegate { var e = eventCaller.currentEntity; function = delegate { var e = eventCaller.currentEntity;
CropStomp.instance.SetCollectThresholds(e["threshold"], e["limit"], e["force"], e["forceAmount"]); }, CropStomp.instance.SetCollectThresholds(e["threshold"], e["limit"], e["force"], e["forceAmount"]);
},
defaultLength = 0.5f, defaultLength = 0.5f,
parameters = new List<Param>() parameters = new List<Param>()
{ {
@ -125,43 +126,34 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this;// Finding grass sprite width for grass scrolling. instance = this; // Finding grass sprite width for grass scrolling.
farmer.Init(); farmer.Init();
var grassSprite = grass.sprite; Sprite sprite = grass.sprite;
var borderLeft = grassSprite.rect.xMin + grassSprite.border.x; float borderLeft = sprite.rect.xMin + sprite.border.x;
var borderRight = grassSprite.rect.xMax - grassSprite.border.z; float borderRight = sprite.rect.xMax - sprite.border.z;
var borderWidthPixels = borderRight - borderLeft; float borderWidthPixels = borderRight - borderLeft;
grassWidth = borderWidthPixels / grassSprite.pixelsPerUnit; grassWidth = borderWidthPixels / sprite.pixelsPerUnit;
legsAnim.Play("LiftFront", 0, 1); // Start with leg up. legsAnim.Play("LiftFront", 0, 1); // Start with leg up.
}
// Initialize vegetables. public override void OnGameSwitch(double beat)
var cond = Conductor.instance; {
var entities = GameManager.instance.Beatmap.Entities; double startBeat;
double startBeat = cond.songPositionInBeatsAsDouble;
double endBeat = double.MaxValue; double endBeat = double.MaxValue;
var entities = GameManager.instance.Beatmap.Entities;
if (inactiveStart == -1f) if (inactiveStart == -1f)
{ {
// Find the beat of the closest "start marching" event. // Find the beat of the closest "start marching" event.
var marchStarts = entities.FindAll(m => m.datamodel == "cropStomp/start marching"); var lastMarch = entities.Find(c => c.datamodel == "cropStomp/start marching" && beat <= c.beat);
for (int i = 0; i < marchStarts.Count; i++) startBeat = lastMarch?.beat ?? beat;
{
var sampleBeat = marchStarts[i].beat;
if (cond.songPositionInBeatsAsDouble <= sampleBeat + 0.25f) // 0.25-beat buffer in case the start marching event is directly next to the game switch event.
{
startBeat = sampleBeat;
break;
}
}
} }
else else
{ {
// Find the beat of the next step, assuming marching started at inactiveStart. // Find the beat of the next step, assuming marching started at inactiveStart.
int stepsPassed = 0; int stepsPassed = 0;
while (inactiveStart + (stepsPassed * 2f) < cond.songPositionInBeatsAsDouble) while (inactiveStart + (stepsPassed * 2f) < beat)
{ {
stepsPassed++; stepsPassed++;
@ -175,54 +167,31 @@ namespace HeavenStudio.Games
startBeat = inactiveStart + (stepsPassed * 2f); startBeat = inactiveStart + (stepsPassed * 2f);
// Cue the marching proper to begin when applicable. // Cue the marching proper to begin when applicable.
BeatAction.New(this, new List<BeatAction.Action>() BeatAction.New(this, new() { new(startBeat - 0.25f, delegate { StartMarching(startBeat); }) });
{
new BeatAction.Action(startBeat - 0.25f, delegate { StartMarching(startBeat); })
});
inactiveStart = -1f; inactiveStart = -1f;
} }
// find out when the next game switch (or remix end) happens // find out when the next game switch (or remix end) happens
var allEnds = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" }); RiqEntity firstEnd = entities.Find(c => c.datamodel is "gameManager/switchGame/cropStomp" or "gameManager/end" && c.beat > startBeat);
if (allEnds.Count == 0) endBeat = firstEnd?.beat ?? double.MaxValue;
{
endBeat = double.MaxValue;
}
else
{
allEnds.Sort((x, y) => x.beat.CompareTo(y.beat));
//get the beat of the closest end event
foreach (var end in allEnds)
{
if (end.datamodel != "gameManager/end" && end.datamodel.Split(2) == "cropStomp") continue;
if (end.beat > startBeat)
{
endBeat = end.beat;
break;
}
}
}
// Veggie and mole events. // Veggie and mole events.
var vegEvents = entities.FindAll(v => v.datamodel == "cropStomp/veggies"); List<RiqEntity> vegEvents = entities.FindAll(v => v.datamodel == "cropStomp/veggies");
var moleEvents = entities.FindAll(m => m.datamodel == "cropStomp/mole"); List<RiqEntity> moleEvents = entities.FindAll(m => m.datamodel == "cropStomp/mole");
// Spawn veggies. // Spawn veggies.
for (int i = 0; i < vegEvents.Count; i++) for (int i = 0; i < vegEvents.Count; i++) {
{
var vegBeat = vegEvents[i].beat; var vegBeat = vegEvents[i].beat;
var vegLength = vegEvents[i].length; var vegLength = vegEvents[i].length;
// Only consider veggie events that aren't past the start point. // Only consider veggie events that aren't past the start point.
if (startBeat <= vegBeat + vegLength) if (startBeat <= vegBeat + vegLength) {
{
int veggiesInEvent = Mathf.CeilToInt(vegLength + 1) / 2; int veggiesInEvent = Mathf.CeilToInt(vegLength + 1) / 2;
for (int b = 0; b < veggiesInEvent; b++) for (int b = 0; b < veggiesInEvent; b++)
{ {
var targetVeggieBeat = vegBeat + 2f * b; var targetVeggieBeat = vegBeat + (2f * b);
if (startBeat <= targetVeggieBeat && targetVeggieBeat < endBeat) if (startBeat <= targetVeggieBeat && targetVeggieBeat < endBeat)
{ {
SpawnVeggie(targetVeggieBeat, startBeat, false); SpawnVeggie(targetVeggieBeat, startBeat, false);
@ -232,52 +201,40 @@ namespace HeavenStudio.Games
} }
// Spawn moles. // Spawn moles.
for (int i = 0; i < moleEvents.Count; i++) for (int i = 0; i < moleEvents.Count; i++) {
{
var moleBeat = moleEvents[i].beat; var moleBeat = moleEvents[i].beat;
if (startBeat <= moleBeat && moleBeat < endBeat) if (startBeat <= moleBeat && moleBeat < endBeat) {
{
SpawnVeggie(moleBeat, startBeat, true); SpawnVeggie(moleBeat, startBeat, true);
} }
} }
}
List<RiqEntity> cuedMoleSounds = new List<RiqEntity>();
public override void OnGameSwitch(double beat)
{
SetInitTresholds(beat); SetInitTresholds(beat);
SetMarchEndBeat(beat); SetMarchEndBeat(beat);
} }
public override void OnPlay(double beat) public override void OnPlay(double beat)
{ {
SetInitTresholds(beat); OnGameSwitch(beat);
SetMarchEndBeat(beat);
} }
private void SetMarchEndBeat(double beat) private void SetMarchEndBeat(double beat)
{ {
double nextEndBeat = double.MaxValue;
var nextEnd = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" }).Find(e => e.beat > beat); var nextEnd = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" }).Find(e => e.beat > beat);
if (nextEnd != null) nextEndBeat = nextEnd.beat; double nextEndBeat = nextEnd?.beat ?? double.MaxValue;
var allEnds = EventCaller.GetAllInGameManagerList("cropStomp", new string[] { "end" }); var firstEnd = GameManager.instance.Beatmap.Entities.Find(c => c.datamodel == "cropStomp/end" && c.beat >= beat && c.beat < nextEndBeat);
var tempEnds = allEnds.FindAll(x => x.beat >= beat && x.beat < nextEndBeat); if (firstEnd != null) {
if (tempEnds.Count == 0) return; marchEndBeat = firstEnd.beat;
willNotHum = firstEnd["mute"];
marchEndBeat = tempEnds[0].beat; }
willNotHum = tempEnds[0]["mute"];
} }
public static void MoleSound(double beat) public static void MoleSound(double beat)
{ {
MultiSound.Play(new MultiSound.Sound[] MultiSound.Play(new MultiSound.Sound[] {
{ new MultiSound.Sound("cropStomp/moleNyeh", beat - 2, offset: 0.134),
new MultiSound.Sound("cropStomp/moleNyeh", beat - 2, 1, 1, false, 0.134), new MultiSound.Sound("cropStomp/moleHeh1", beat - 1.5, offset: 0.05),
new MultiSound.Sound("cropStomp/moleHeh1", beat - 1.5, 1, 1, false, 0.05), new MultiSound.Sound("cropStomp/moleHeh2", beat - 1, offset: 0.061)
new MultiSound.Sound("cropStomp/moleHeh2", beat - 1, 1, 1, false, 0.061)
}, forcePlay: true); }, forcePlay: true);
} }
@ -285,11 +242,8 @@ namespace HeavenStudio.Games
{ {
var cond = Conductor.instance; var cond = Conductor.instance;
if (!cond.isPlaying) if (!cond.isPlaying || !isMarching) return;
return;
if (!isMarching)
return;
// Debug.Log(newBeat); // Debug.Log(newBeat);
bool cameraLocked = cond.songPositionInBeats >= marchEndBeat; bool cameraLocked = cond.songPositionInBeats >= marchEndBeat;
@ -308,11 +262,11 @@ namespace HeavenStudio.Games
if (PlayerInput.GetIsAction(InputAction_BasicRelease) && !IsExpectingInputNow(InputAction_BasicRelease)) if (PlayerInput.GetIsAction(InputAction_BasicRelease) && !IsExpectingInputNow(InputAction_BasicRelease))
{ {
bodyAnim.Play("Raise"); bodyAnim.DoScaledAnimationAsync("Raise", 0.5f);
} }
if (PlayerInput.GetIsAction(InputAction_Flick) && !IsExpectingInputNow(InputAction_FlickRelease)) if (PlayerInput.GetIsAction(InputAction_Flick) && !IsExpectingInputNow(InputAction_FlickRelease))
{ {
bodyAnim.Play("Pick"); bodyAnim.DoScaledAnimationAsync("Pick", 0.5f);
} }
if (cameraLocked) return; if (cameraLocked) return;
@ -326,7 +280,7 @@ namespace HeavenStudio.Games
var grassPos = grassTrans.localPosition; var grassPos = grassTrans.localPosition;
var newGrassX = grassPos.x + (scrollRate * Time.deltaTime); var newGrassX = grassPos.x + (scrollRate * Time.deltaTime);
newGrassX = (newGrassX % (grassWidth * 4.5f)); newGrassX %= grassWidth * 4.5f;
grassTrans.localPosition = new Vector3(newGrassX, grassPos.y, grassPos.z); grassTrans.localPosition = new Vector3(newGrassX, grassPos.y, grassPos.z);
@ -334,16 +288,14 @@ namespace HeavenStudio.Games
var dotsPos = dotsTrans.localPosition; var dotsPos = dotsTrans.localPosition;
var newDotsX = dotsPos.x + (scrollRate * Time.deltaTime); var newDotsX = dotsPos.x + (scrollRate * Time.deltaTime);
newDotsX = (newDotsX % dotsWidth); newDotsX %= dotsWidth;
dotsTrans.localPosition = new Vector3(newDotsX, dotsPos.y, dotsPos.z); dotsTrans.localPosition = new Vector3(newDotsX, dotsPos.y, dotsPos.z);
} }
private void LateUpdate() private void LateUpdate()
{ {
if (!isMarching) if (!isMarching) return;
return;
isFlicking = false; isFlicking = false;
} }
@ -357,12 +309,9 @@ namespace HeavenStudio.Games
private void SetInitTresholds(double beat) private void SetInitTresholds(double beat)
{ {
var allCollects = EventCaller.GetAllInGameManagerList("cropStomp", new string[] { "plantCollect" }); var lastCollect = GameManager.instance.Beatmap.Entities.FindLast(c => c.datamodel == "cropStomp/plantCollect" && c.beat < beat);
if (allCollects.Count == 0) return; if (lastCollect == null) return;
SetCollectThresholds(lastCollect["threshold"], lastCollect["limit"], lastCollect["force"], lastCollect["forceAmount"]);
var tempCollect = allCollects.FindLast(x => x.beat < beat);
if (tempCollect == null) return;
SetCollectThresholds(tempCollect["threshold"], tempCollect["limit"], tempCollect["force"], tempCollect["forceAmount"]);
} }
public void CollectPlant(int veggieType) public void CollectPlant(int veggieType)
@ -379,19 +328,18 @@ namespace HeavenStudio.Games
if (!isStepping) if (!isStepping)
{ {
stepCount += 1; stepCount += 1;
var stepAnim = (stepCount % 2 != 0 ? "StepFront" : "StepBack");
legsAnim.Play(stepAnim, 0, 0); var stepAnim = (stepCount % 2 != 0) ? "StepFront" : "StepBack";
legsAnim.DoScaledAnimationAsync(stepAnim, 0.5f);
isStepping = true; isStepping = true;
} }
} }
// Lift. // Lift.
else else
{ {
var liftAnim = (stepCount % 2 != 0 ? "LiftBack" : "LiftFront"); var liftAnim = (stepCount % 2 != 0) ? "LiftBack" : "LiftFront";
legsAnim.Play(liftAnim, 0, 0); legsAnim.DoScaledAnimationAsync(liftAnim, 0.5f);
var farmerPos = farmerTrans.localPosition; var farmerPos = farmerTrans.localPosition;
farmerTrans.localPosition = new Vector3(farmerPos.x - stepDistance, farmerPos.y, farmerPos.z); farmerTrans.localPosition = new Vector3(farmerPos.x - stepDistance, farmerPos.y, farmerPos.z);
@ -413,27 +361,28 @@ namespace HeavenStudio.Games
public void Stomp() public void Stomp()
{ {
// Don't increment step counter if autostep stepped already. // Don't increment step counter if autostep stepped already.
if (!isStepping) if (!isStepping) stepCount += 1;
stepCount += 1;
var stompAnim = (stepCount % 2 != 0 ? "StompFront" : "StompBack"); var stompAnim = (stepCount % 2 != 0) ? "StompFront" : "StompBack";
legsAnim.Play(stompAnim, 0, 0); legsAnim.DoScaledAnimationAsync(stompAnim, 0.5f);
SoundByte.PlayOneShotGame("cropStomp/stomp"); SoundByte.PlayOneShotGame("cropStomp/stomp");
if (shakeTween != null) if (shakeTween != null) shakeTween.Kill(true);
shakeTween.Kill(true);
DOTween.Punch(() => GameCamera.AdditionalPosition, x => GameCamera.AdditionalPosition = x, new Vector3(0, 0.75f, 0), DOTween.Punch(() =>
Conductor.instance.pitchedSecPerBeat*0.5f, 18, 1f); GameCamera.AdditionalPosition,
x => GameCamera.AdditionalPosition = x,
new Vector3(0, 0.75f, 0), Conductor.instance.pitchedSecPerBeat * 0.5f, 18, 1f
);
isStepping = true; isStepping = true;
} }
private void SpawnVeggie(double beat, double startBeat, bool isMole) private void SpawnVeggie(double beat, double startBeat, bool isMole)
{ {
var newVeggie = GameObject.Instantiate(isMole ? baseMole : baseVeggie, veggieHolder).GetComponent<Veggie>(); var newVeggie = Instantiate(isMole ? baseMole : baseVeggie, veggieHolder).GetComponent<Veggie>();
newVeggie.targetBeat = beat; newVeggie.targetBeat = beat;
@ -445,21 +394,16 @@ namespace HeavenStudio.Games
public static void MarchInactive(double beat) public static void MarchInactive(double beat)
{ {
if (GameManager.instance.currentGame == "cropStomp") //this function is only meant for making march sounds while the game is inactive if (GameManager.instance.currentGame == "cropStomp") return;
{
return;
}
inactiveStart = beat; inactiveStart = beat;
RiqEntity gameSwitch = GameManager.instance.Beatmap.Entities.Find(c => c.beat >= beat && c.datamodel == "gameManager/switchGame/cropStomp"); RiqEntity gameSwitch = GameManager.instance.Beatmap.Entities.Find(c => c.beat >= beat && c.datamodel == "gameManager/switchGame/cropStomp");
if (gameSwitch == null) if (gameSwitch == null) return;
return; int length = (int)Math.Ceiling((gameSwitch.beat - beat) / 2);
int length = (int)Math.Ceiling((gameSwitch.beat - beat)/2);
MultiSound.Sound[] sounds = new MultiSound.Sound[length]; MultiSound.Sound[] sounds = new MultiSound.Sound[length];
for(int i = 0; i < length; i++) for(int i = 0; i < length; i++) {
{ sounds[i] = new MultiSound.Sound("cropStomp/hmm", beat + (i * 2));
sounds[i] = new MultiSound.Sound("cropStomp/hmm", beat + i*2);
} }
MultiSound.Play(sounds, forcePlay:true); MultiSound.Play(sounds, forcePlay: true);
} }
} }
} }

View File

@ -70,7 +70,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp
if (PlayerInput.GetIsAction(CropStomp.InputAction_BasicPress) && !game.IsExpectingInputNow(CropStomp.InputAction_BasicPress)) if (PlayerInput.GetIsAction(CropStomp.InputAction_BasicPress) && !game.IsExpectingInputNow(CropStomp.InputAction_BasicPress))
{ {
game.bodyAnim.Play("Crouch", 0, 0); game.bodyAnim.DoScaledAnimationAsync("Crouch", 0.5f);
} }
} }
@ -87,8 +87,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp
startPlant.SetActive(collectedPlants >= plantThreshold); startPlant.SetActive(collectedPlants >= plantThreshold);
if (spawnedPlants.Count > 0) if (spawnedPlants.Count > 0)
{ {
foreach (var plant in spawnedPlants) foreach (var plant in spawnedPlants) {
{
Destroy(plant); Destroy(plant);
} }
spawnedPlants.Clear(); spawnedPlants.Clear();
@ -102,8 +101,9 @@ namespace HeavenStudio.Games.Scripts_CropStomp
{ {
spawnedPlant = Instantiate(plantLastRef, collectedHolder); spawnedPlant = Instantiate(plantLastRef, collectedHolder);
spawnedPlant.GetComponent<SpriteRenderer>().sprite = veggieSprites[lastVeggieType]; spawnedPlant.GetComponent<SpriteRenderer>().sprite = veggieSprites[lastVeggieType];
} else {
spawnedPlant = Instantiate((realIndex % 2 == 0) ? plantRightRef : plantLeftRef, collectedHolder);
} }
else spawnedPlant = Instantiate((realIndex % 2 == 0) ? plantRightRef : plantLeftRef, collectedHolder);
spawnedPlant.transform.localPosition = new Vector3(0, (realIndex * plantDistance) + plantStartDistance, 0); spawnedPlant.transform.localPosition = new Vector3(0, (realIndex * plantDistance) + plantStartDistance, 0);
spawnedPlant.GetComponent<SpriteRenderer>().sortingOrder = -realIndex - 2; spawnedPlant.GetComponent<SpriteRenderer>().sortingOrder = -realIndex - 2;
spawnedPlant.SetActive(true); spawnedPlant.SetActive(true);
@ -119,9 +119,8 @@ namespace HeavenStudio.Games.Scripts_CropStomp
private void Miss(PlayerActionEvent caller) private void Miss(PlayerActionEvent caller)
{ {
if (GameManager.instance.currentGame != "cropStomp") return; if (GameManager.instance.currentGame != "cropStomp" || !game.isMarching) return;
if (!game.isMarching)
return;
// REMARK: does not count for performance // REMARK: does not count for performance
nextStompBeat += 2f; nextStompBeat += 2f;
stomp?.Disable(); stomp?.Disable();
@ -133,18 +132,12 @@ namespace HeavenStudio.Games.Scripts_CropStomp
void Stomp(bool ng) void Stomp(bool ng)
{ {
if (GameManager.instance.currentGame != "cropStomp") return; if (GameManager.instance.currentGame != "cropStomp" || !game.isMarching) return;
if (!game.isMarching) if (ng) {
return; game.bodyAnim.DoScaledAnimationAsync("Crouch", 0.5f);
if (ng) } else {
{
game.bodyAnim.Play("Crouch", 0, 0);
}
else
{
game.Stomp(); game.Stomp();
game.bodyAnim.Play("Stomp", 0, 0); game.bodyAnim.DoScaledAnimationAsync("Stomp", 0.5f);
} }
nextStompBeat += 2f; nextStompBeat += 2f;
stomp?.Disable(); stomp?.Disable();

View File

@ -39,7 +39,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp
{ {
game = CropStomp.instance; game = CropStomp.instance;
if (Conductor.instance.isPlaying) // if (Conductor.instance.isPlaying)
game.ScheduleInput(targetBeat - 1, 1f, CropStomp.InputAction_BasicPress, StompJust, StompMiss, Out); game.ScheduleInput(targetBeat - 1, 1f, CropStomp.InputAction_BasicPress, StompJust, StompMiss, Out);
if (!isMole) if (!isMole)
@ -56,38 +56,23 @@ namespace HeavenStudio.Games.Scripts_CropStomp
private bool gotStomped; // Safeguard in case nested Update() call breaks. private bool gotStomped; // Safeguard in case nested Update() call breaks.
private void Update() private void Update()
{ {
if (!game.isMarching) if (!game.isMarching) return;
return;
// Veggie missed. Handle missed state. switch (veggieState)
if (veggieState == -1)
{ {
MissedUpdate(); case -1: MissedUpdate(); return;
return; // case 0:
} case 2: PickedUpdate(); return;
case 1:
float airPosition = Conductor.instance.GetPositionFromBeat(stompedBeat, landBeat - stompedBeat);
veggieTrans.position = curve.GetPoint(Mathf.Clamp(airPosition, 0, 1));
// Veggie picked. Handle picked state. if (PlayerInput.GetIsAction(CropStomp.InputAction_FlickRelease) && !game.IsExpectingInputNow(CropStomp.InputAction_FlickRelease))
if (veggieState == 2) {
{ pickEligible = false;
PickedUpdate(); }
return; break;
} // default:
var cond = Conductor.instance;
// In ground.
if (veggieState == 0)
{
}
// In air.
else if (veggieState == 1)
{
float airPosition = cond.GetPositionFromBeat(stompedBeat, landBeat - stompedBeat);
veggieTrans.position = curve.GetPoint(Mathf.Clamp(airPosition, 0, 1));
if (PlayerInput.GetIsAction(CropStomp.InputAction_FlickRelease) && !game.IsExpectingInputNow(CropStomp.InputAction_FlickRelease))
{
pickEligible = false;
}
} }
} }
@ -105,17 +90,17 @@ namespace HeavenStudio.Games.Scripts_CropStomp
StompVeggie(false); StompVeggie(false);
} }
private void StompMiss(PlayerActionEvent caller) private void StompMiss(PlayerActionEvent caller)
{ {
veggieState = -1; veggieState = -1;
caller.Disable(); caller.Disable();
} }
private void Out(PlayerActionEvent caller) {} private void Out(PlayerActionEvent caller) { }
private void PickJust(PlayerActionEvent caller, float state) private void PickJust(PlayerActionEvent caller, float state)
{ {
game.bodyAnim.Play("Pick", 0, 0); game.bodyAnim.DoScaledAnimationAsync("Pick", 0.5f);
game.isFlicking = true; game.isFlicking = true;
if (!pickEligible) return; if (!pickEligible) return;
if (GameManager.instance.autoplay) if (GameManager.instance.autoplay)
@ -131,13 +116,20 @@ namespace HeavenStudio.Games.Scripts_CropStomp
curve.transform.localScale = Vector3.one; // Return curve to normal size in the case of mole curves. curve.transform.localScale = Vector3.one; // Return curve to normal size in the case of mole curves.
var key1 = curve.KeyPoints[0]; for (int i = 0; i < 2; i++)
var key1Pos = key1.Position; {
key1.Position = new Vector3(key1Pos.x, veggieTrans.position.y, key1Pos.z); var key = curve.KeyPoints[i];
var keyPos = key.Position;
key.Position = new Vector3(keyPos.x, veggieTrans.position.y + (i * 2), keyPos.z);
}
var key2 = curve.KeyPoints[1]; // var key1 = curve.KeyPoints[0];
var key2Pos = key2.Position; // var key1Pos = key1.Position;
key2.Position = new Vector3(key2Pos.x, veggieTrans.position.y + 2f, key2Pos.z); // key1.Position = new Vector3(key1Pos.x, veggieTrans.position.y, key1Pos.z);
// var key2 = curve.KeyPoints[1];
// var key2Pos = key2.Position;
// key2.Position = new Vector3(key2Pos.x, veggieTrans.position.y + 2f, key2Pos.z);
pickedBeat = Conductor.instance.songPositionInBeatsAsDouble; pickedBeat = Conductor.instance.songPositionInBeatsAsDouble;
@ -154,9 +146,8 @@ namespace HeavenStudio.Games.Scripts_CropStomp
private void PickMiss(PlayerActionEvent caller) private void PickMiss(PlayerActionEvent caller)
{ {
veggieState = -1; veggieState = -1;
if (!isMole) if (!isMole) SoundByte.PlayOneShotGame("cropStomp/veggieMiss");
SoundByte.PlayOneShotGame("cropStomp/veggieMiss");
caller.Disable(); caller.Disable();
} }
@ -186,7 +177,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp
var distDiff = transform.position.x - game.farmerTrans.position.x; var distDiff = transform.position.x - game.farmerTrans.position.x;
if (distDiff > 1.5f) if (distDiff > 1.5f)
{ {
moleAnim.Play("Chuckle", 0, 0); moleAnim.DoScaledAnimationAsync("Chuckle", 0.5f);
moleLaughing = true; moleLaughing = true;
} }
} }
@ -223,6 +214,8 @@ namespace HeavenStudio.Games.Scripts_CropStomp
} }
gotStomped = true; gotStomped = true;
Debug.Log("Stomped!");
var cond = Conductor.instance; var cond = Conductor.instance;
ParticleSystem spawnedHit = Instantiate(game.hitParticle, game.hitParticle.transform.parent); ParticleSystem spawnedHit = Instantiate(game.hitParticle, game.hitParticle.transform.parent);
@ -235,12 +228,12 @@ namespace HeavenStudio.Games.Scripts_CropStomp
stompedBeat = cond.songPositionInBeatsAsDouble; stompedBeat = cond.songPositionInBeatsAsDouble;
landBeat = targetBeat + (float)cond.SecsToBeats(Minigame.NgLateTime()-1, cond.GetBpmAtBeat(targetBeat)); landBeat = targetBeat + (float)cond.SecsToBeats(Minigame.NgLateTime() - 1, cond.GetBpmAtBeat(targetBeat));
if (autoTriggered) if (autoTriggered)
{ {
game.Stomp(); game.Stomp();
game.bodyAnim.Play("Stomp", 0, 0); game.bodyAnim.DoScaledAnimationAsync("Stomp", 0.5f);
} }
if (!isMole) if (!isMole)
@ -251,7 +244,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp
} }
else else
{ {
moleAnim.Play("Idle", 0, 0); moleAnim.DoScaledAnimationAsync("Idle", 0.5f);
} }
var veggieScale = veggieTrans.localScale; var veggieScale = veggieTrans.localScale;
@ -267,7 +260,7 @@ namespace HeavenStudio.Games.Scripts_CropStomp
if (autoTriggered) if (autoTriggered)
{ {
game.bodyAnim.Play("Pick", 0, 0); game.bodyAnim.DoScaledAnimationAsync("Pick", 0.5f);
game.isFlicking = true; game.isFlicking = true;
} }

View File

@ -113,14 +113,12 @@ namespace HeavenStudio.Games
[SerializeField] private Student student; [SerializeField] private Student student;
[SerializeField] private GameObject djYellow; [SerializeField] private GameObject djYellow;
private Animator djYellowAnim; private Animator djYellowAnim;
private double lastReportedBeat = 0f;
public DJYellow djYellowScript; public DJYellow djYellowScript;
[Header("Properties")] [Header("Properties")]
public GameEvent bop = new GameEvent(); public GameEvent bop = new GameEvent();
public bool djYellowHolding; public bool djYellowHolding;
public bool andStop; public bool andStop;
public bool goBop;
public double beatOfInstance; public double beatOfInstance;
private bool djYellowBopLeft; private bool djYellowBopLeft;
public bool shouldBeHolding = false; public bool shouldBeHolding = false;
@ -138,7 +136,7 @@ namespace HeavenStudio.Games
djYellowAnim = djYellow.GetComponent<Animator>(); djYellowAnim = djYellow.GetComponent<Animator>();
djYellowScript = djYellow.GetComponent<DJYellow>(); djYellowScript = djYellow.GetComponent<DJYellow>();
student.Init(); student.Init();
goBop = true; SetupBopRegion("djSchool", "bop", "toggle");
} }
//For inactive game purposes //For inactive game purposes
@ -167,7 +165,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (!goBop) return; if (!BeatIsInBopRegion(beat)) return;
if (student.isHolding) if (student.isHolding)
{ {
student.anim.DoScaledAnimationAsync("HoldBop", 0.5f); student.anim.DoScaledAnimationAsync("HoldBop", 0.5f);
@ -243,7 +241,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool isBopping, bool autoBop) public void Bop(double beat, float length, bool isBopping, bool autoBop)
{ {
goBop = autoBop;
if (isBopping) if (isBopping)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -258,7 +258,7 @@ namespace HeavenStudio.Games.Scripts_DJSchool
{ {
new BeatAction.Action(caller.timer + caller.startBeat + 1, delegate new BeatAction.Action(caller.timer + caller.startBeat + 1, delegate
{ {
if (game.goBop) if (game.BeatIsInBopRegion(caller.timer + caller.startBeat + 1))
{ {
game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.CrossEyed); game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.CrossEyed);
if (game.djYellowHolding) game.djYellowScript.Reverse(); if (game.djYellowHolding) game.djYellowScript.Reverse();
@ -278,7 +278,7 @@ namespace HeavenStudio.Games.Scripts_DJSchool
{ {
new BeatAction.Action(beat, delegate new BeatAction.Action(beat, delegate
{ {
if (game.goBop) if (game.BeatIsInBopRegion(beat))
{ {
game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.CrossEyed); game.djYellowScript.ChangeHeadSprite(DJYellow.DJExpression.CrossEyed);
if (game.djYellowHolding) game.djYellowScript.Reverse(); if (game.djYellowHolding) game.djYellowScript.Reverse();

View File

@ -140,9 +140,7 @@ namespace HeavenStudio.Games
[SerializeField] Sprite[] ObjectTypes; [SerializeField] Sprite[] ObjectTypes;
private double lastReportedBeat = 0f;
private bool birdOnScreen = false; private bool birdOnScreen = false;
bool dontBop = false;
private const string sfxNum = "dogNinja/"; private const string sfxNum = "dogNinja/";
public static DogNinja instance; public static DogNinja instance;
@ -200,6 +198,7 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("dogNinja", "Bop", "auto");
} }
void OnDestroy() void OnDestroy()
@ -216,7 +215,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (dontBop) return; if (!BeatIsInBopRegion(beat)) return;
DogAnim.DoScaledAnimationAsync("Bop", 0.5f); DogAnim.DoScaledAnimationAsync("Bop", 0.5f);
} }
@ -267,7 +266,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool auto, bool bop) public void Bop(double beat, float length, bool auto, bool bop)
{ {
dontBop = !auto;
if (!bop) return; if (!bop) return;
List<BeatAction.Action> actions = new(); List<BeatAction.Action> actions = new();

View File

@ -76,9 +76,7 @@ namespace HeavenStudio.Games
[SerializeField] public float shadowDepthScaleMax; [SerializeField] public float shadowDepthScaleMax;
[SerializeField] SuperCurveObject.Path[] ballBouncePaths; [SerializeField] SuperCurveObject.Path[] ballBouncePaths;
double lastGirlGacha = double.MinValue; double lastGirlGacha = double.MinValue;
bool shouldBop = true;
bool canBop = true; bool canBop = true;
GameEvent bop = new GameEvent();
public static DoubleDate instance; public static DoubleDate instance;
public static List<QueuedBall> queuedBalls = new List<QueuedBall>(); public static List<QueuedBall> queuedBalls = new List<QueuedBall>();
[NonSerialized] public double lastHitWeasel = double.MinValue; [NonSerialized] public double lastHitWeasel = double.MinValue;
@ -132,6 +130,7 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("doubleDate", "bop", "autoBop");
} }
private void Start() { private void Start() {
@ -140,7 +139,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop) SingleBop(); if (BeatIsInBopRegion(beat)) SingleBop();
} }
void Update() void Update()
@ -198,7 +197,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool goBop, bool autoBop) public void Bop(double beat, float length, bool goBop, bool autoBop)
{ {
shouldBop = autoBop;
if (goBop) if (goBop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -21,7 +21,7 @@ namespace HeavenStudio.Games.Loaders
parameters = new List<Param>() parameters = new List<Param>()
{ {
new Param("bop", true, "Bop", "Should the drummers bop?"), new Param("bop", true, "Bop", "Should the drummers bop?"),
new Param("autoBop", true, "Bop (Auto)", "Should the drummers auto bop?") new Param("autoBop", false, "Bop (Auto)", "Should the drummers auto bop?")
} }
}, },
new GameAction("drum", "Hit Drum") new GameAction("drum", "Hit Drum")
@ -121,9 +121,6 @@ namespace HeavenStudio.Games
bool isMoving; bool isMoving;
string moveAnim; string moveAnim;
EasingFunction.Ease lastEase; EasingFunction.Ease lastEase;
bool goBop = true;
public GameEvent bop = new GameEvent();
public int count = 0; public int count = 0;
public static DrummingPractice instance; public static DrummingPractice instance;
@ -132,6 +129,7 @@ namespace HeavenStudio.Games
{ {
instance = this; instance = this;
SetMiis(); SetMiis();
SetupBopRegion("drummingPractice", "bop", "autoBop");
} }
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
@ -146,7 +144,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (goBop) if (BeatIsInBopRegion(beat))
{ {
Bop(); Bop();
} }
@ -191,7 +189,6 @@ namespace HeavenStudio.Games
public void SetBop(double beat, float length, bool shouldBop, bool autoBop) public void SetBop(double beat, float length, bool shouldBop, bool autoBop)
{ {
goBop = autoBop;
if (shouldBop) if (shouldBop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -218,8 +218,6 @@ namespace HeavenStudio.Games
private static bool wantKamoneAlt = false; private static bool wantKamoneAlt = false;
private static double wantBigReady = double.MinValue; private static double wantBigReady = double.MinValue;
private bool hasJumped = false; private bool hasJumped = false;
private bool goBopIdol = true;
private bool goBopSpec = true;
private bool noJudgement = false; private bool noJudgement = false;
private bool noJudgementInput = false; private bool noJudgementInput = false;
@ -235,6 +233,8 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("fanClub", "bop", "type2", false);
AddBopRegionEventsInt("fanClub", "finish", 3);
Spectators = new List<GameObject>(); Spectators = new List<GameObject>();
idolAnimator = Arisa.GetComponent<Animator>(); idolAnimator = Arisa.GetComponent<Animator>();
backupRAnimator = Blue.GetComponent<Animator>(); backupRAnimator = Blue.GetComponent<Animator>();
@ -357,6 +357,9 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
var cond = Conductor.instance; var cond = Conductor.instance;
int whoBops = BeatIsInBopRegionInt(beat);
bool goBopIdol = whoBops == (int)IdolBopType.Both || whoBops == (int)IdolBopType.Idol;
bool goBopSpec = whoBops == (int)IdolBopType.Both || whoBops == (int)IdolBopType.Spectators;
if (goBopIdol) if (goBopIdol)
{ {
if (!(cond.songPositionInBeatsAsDouble >= noBop.startBeat && cond.songPositionInBeatsAsDouble < noBop.startBeat + noBop.length)) if (!(cond.songPositionInBeatsAsDouble >= noBop.startBeat && cond.songPositionInBeatsAsDouble < noBop.startBeat + noBop.length))
@ -398,8 +401,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, int target = (int) IdolBopType.Both, int targetAuto = (int)IdolBopType.Both) public void Bop(double beat, float length, int target = (int) IdolBopType.Both, int targetAuto = (int)IdolBopType.Both)
{ {
goBopIdol = targetAuto == (int)IdolBopType.Both || targetAuto == (int)IdolBopType.Idol;
goBopSpec = targetAuto == (int)IdolBopType.Both || targetAuto == (int)IdolBopType.Spectators;
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)
{ {
BeatAction.New(instance, new List<BeatAction.Action>() BeatAction.New(instance, new List<BeatAction.Action>()
@ -934,7 +935,6 @@ namespace HeavenStudio.Games
if (noJudgement) return; if (noJudgement) return;
noJudgement = true; noJudgement = true;
noJudgementInput = false; noJudgementInput = false;
goBopSpec = false;
// recreation of sub61 // recreation of sub61
BeatAction.New(this, new List<BeatAction.Action>() BeatAction.New(this, new List<BeatAction.Action>()

View File

@ -124,6 +124,12 @@ namespace HeavenStudio.Games
BackgroundColorUpdate(); BackgroundColorUpdate();
} }
public override void OnPlay(double beat)
{
base.OnPlay(beat);
OnGameSwitch(beat);
}
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
{ {
base.OnGameSwitch(beat); base.OnGameSwitch(beat);
@ -247,10 +253,5 @@ namespace HeavenStudio.Games
BackgroundColorGrad(lastEventGrad.beat, lastEventGrad.length, lastEventGrad["start"], lastEventGrad["end"], lastEventGrad["ease"]); BackgroundColorGrad(lastEventGrad.beat, lastEventGrad.length, lastEventGrad["start"], lastEventGrad["end"], lastEventGrad["ease"]);
} }
} }
public override void OnPlay(double beat)
{
PersistColor(beat);
}
} }
} }

View File

@ -692,6 +692,7 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("karateman", "bop", "toggle");
KarateManPot.ResetLastCombo(); KarateManPot.ResetLastCombo();
@ -1168,13 +1169,13 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
bool autoBop = BeatIsInBopRegion(beat);
Joe.bop.length = autoBop ? float.MaxValue : 0;
Joe.RequestBop(); Joe.RequestBop();
} }
public void ToggleBop(double beat, float length, bool toggle, bool autoBop) public void ToggleBop(double beat, float length, bool toggle, bool autoBop)
{ {
Joe.bop.length = autoBop ? float.MaxValue : 0;
if (toggle) if (toggle)
{ {
var actions = new List<BeatAction.Action>(); var actions = new List<BeatAction.Action>();

View File

@ -94,10 +94,8 @@ namespace HeavenStudio.Games
[Header("Variables")] [Header("Variables")]
bool intervalStarted; bool intervalStarted;
double intervalStartBeat; double intervalStartBeat;
bool bossBop = true;
public double beatInterval = 4f; public double beatInterval = 4f;
public bool bossAnnoyed = false; public bool bossAnnoyed = false;
private double lastReportedBeat = 0f;
const string sfxName = "meatGrinder/"; const string sfxName = "meatGrinder/";
public static MeatGrinder instance; public static MeatGrinder instance;
@ -124,6 +122,7 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("meatGrinder", "bop", "bossBop");
} }
void OnDestroy() void OnDestroy()
@ -161,7 +160,7 @@ namespace HeavenStudio.Games
{ {
if (!BossAnim.IsPlayingAnimationName("BossCall") if (!BossAnim.IsPlayingAnimationName("BossCall")
&& !BossAnim.IsPlayingAnimationName("BossSignal") && !BossAnim.IsPlayingAnimationName("BossSignal")
&& bossBop) && BeatIsInBopRegion(beat))
{ {
BossAnim.DoScaledAnimationAsync(bossAnnoyed ? "BossMiss" : "Bop", 0.5f); BossAnim.DoScaledAnimationAsync(bossAnnoyed ? "BossMiss" : "Bop", 0.5f);
} }
@ -169,7 +168,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, double length, bool doesBop, bool autoBop) public void Bop(double beat, double length, bool doesBop, bool autoBop)
{ {
bossBop = autoBop;
if (doesBop) if (doesBop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -6,6 +6,7 @@ using HeavenStudio.Util;
using HeavenStudio.Common; using HeavenStudio.Common;
using HeavenStudio.InputSystem; using HeavenStudio.InputSystem;
using System; using System;
using System.Linq;
namespace HeavenStudio.Games namespace HeavenStudio.Games
{ {
@ -448,6 +449,82 @@ namespace HeavenStudio.Games
} }
#region Bop
protected enum DefaultBopEnum
{
Off = 0,
On = 1,
}
private Dictionary<double, int> bopRegion = new();
public bool BeatIsInBopRegion(double beat)
{
if (bopRegion.Count == 0) return true;
int bop = 0;
foreach (var item in bopRegion)
{
if (beat < item.Key) break;
if (beat >= item.Key) bop = item.Value;
}
return (DefaultBopEnum)bop == DefaultBopEnum.On;
}
public int BeatIsInBopRegionInt(double beat)
{
if (bopRegion.Count == 0) return 0;
int bop = 0;
foreach (var item in bopRegion)
{
if (beat < item.Key) break;
if (beat >= item.Key) bop = item.Value;
}
return bop;
}
protected void SetupBopRegion(string gameName, string eventName, string toggleName, bool isBool = true)
{
var allEvents = EventCaller.GetAllInGameManagerList(gameName, new string[] { eventName });
allEvents.Sort((x, y) => x.beat.CompareTo(y.beat));
foreach (var e in allEvents)
{
if (isBool)
{
bopRegion.Add(e.beat, e[toggleName] ? 1 : 0);
}
else
{
bopRegion.Add(e.beat, e[toggleName]);
}
}
}
protected void AddBopRegionEvents(string gameName, string eventName, bool allowBop)
{
var allEvents = EventCaller.GetAllInGameManagerList(gameName, new string[] { eventName });
foreach (var e in allEvents)
{
bopRegion.Add(e.beat, allowBop ? 1 : 0);
}
bopRegion = bopRegion.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
}
protected void AddBopRegionEventsInt(string gameName, string eventName, int allowBop)
{
var allEvents = EventCaller.GetAllInGameManagerList(gameName, new string[] { eventName });
foreach (var e in allEvents)
{
bopRegion.Add(e.beat, allowBop);
}
bopRegion = bopRegion.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
}
#endregion
private void OnDestroy() private void OnDestroy()
{ {
foreach (var evt in scheduledInputs) foreach (var evt in scheduledInputs)

View File

@ -17,14 +17,14 @@ namespace HeavenStudio.Games.Loaders
{ {
function = delegate { function = delegate {
var e = eventCaller.currentEntity; var e = eventCaller.currentEntity;
MunchyMonk.instance.Bop(e.beat, e["bop"], e["autoBop"]); MunchyMonk.instance.Bop(e.beat, e.length, e["bop"]);
}, },
parameters = new List<Param>() parameters = new List<Param>()
{ {
new Param("bop", true, "Monk Bops?", "Does the monk bop?"), new Param("bop", true, "Monk Bops?", "Does the monk bop?"),
new Param("autoBop", false, "Monk Bops? (Auto)", "Does the monk auto bop?"), new Param("autoBop", false, "Monk Bops? (Auto)", "Does the monk auto bop?"),
}, },
defaultLength = 0.5f, resizable = true
}, },
new GameAction("MonkMove", "Monk Move") new GameAction("MonkMove", "Monk Move")
{ {
@ -209,7 +209,6 @@ namespace HeavenStudio.Games
public double lastReportedBeat = 0f; public double lastReportedBeat = 0f;
public bool needBlush; public bool needBlush;
public bool isStaring; public bool isStaring;
bool monkBop = true;
// these variables are static so that they can be set outside of the game/stay the same between game switches // these variables are static so that they can be set outside of the game/stay the same between game switches
static public int howManyGulps; static public int howManyGulps;
@ -241,6 +240,7 @@ namespace HeavenStudio.Games
{ {
instance = this; instance = this;
Baby.SetActive(!disableBaby); Baby.SetActive(!disableBaby);
SetupBopRegion("munchyMonk", "Bop", "autoBop");
} }
private void Start() private void Start()
@ -352,7 +352,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if ((MonkAnim.IsAnimationNotPlaying() || MonkAnim.IsPlayingAnimationName("Bop") || MonkAnim.IsPlayingAnimationName("Idle")) if ((MonkAnim.IsAnimationNotPlaying() || MonkAnim.IsPlayingAnimationName("Bop") || MonkAnim.IsPlayingAnimationName("Idle"))
&& monkBop && BeatIsInBopRegion(beat)
&& !isStaring) && !isStaring)
{ {
MonkAnim.DoScaledAnimationAsync("Bop", 0.5f); MonkAnim.DoScaledAnimationAsync("Bop", 0.5f);
@ -370,15 +370,23 @@ namespace HeavenStudio.Games
} }
} }
public void Bop(double beat, bool bop, bool autoBop) public void Bop(double beat, double length, bool bop)
{ {
monkBop = autoBop; if (!bop) return;
if (bop) { List<BeatAction.Action> actions = new();
needBlush = false;
MonkAnim.DoScaledAnimationAsync("Bop", 0.5f); for (int i = 0; i < length; i++)
if (growLevel == 4) BrowAnim.DoScaledAnimationAsync("Bop", 0.5f); {
if (growLevel > 0) StacheAnim.DoScaledAnimationAsync($"Bop{growLevel}", 0.5f); actions.Add(new(beat + i, delegate
{
needBlush = false;
MonkAnim.DoScaledAnimationAsync("Bop", 0.5f);
if (growLevel == 4) BrowAnim.DoScaledAnimationAsync("Bop", 0.5f);
if (growLevel > 0) StacheAnim.DoScaledAnimationAsync($"Bop{growLevel}", 0.5f);
}));
} }
if (actions.Count > 0) BeatAction.New(this, actions);
} }
public void InputFunctions(int whichVar, float state = 0) public void InputFunctions(int whichVar, float state = 0)

View File

@ -229,6 +229,7 @@ namespace HeavenStudio.Games
void Awake() void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("octopusMachine", "bop", "keepBop");
} }
private void Start() private void Start()
@ -263,8 +264,11 @@ namespace HeavenStudio.Games
if (autoAction) bopIterate++; if (autoAction) bopIterate++;
bool keepBop = BeatIsInBopRegion(beat);
foreach (var octo in octopodes) foreach (var octo in octopodes)
{ {
octo.cantBop = !keepBop;
octo.RequestBop(); octo.RequestBop();
} }
} }
@ -339,7 +343,6 @@ namespace HeavenStudio.Games
foreach (var octo in octopodes) { foreach (var octo in octopodes) {
if (singleBop) octo.PlayAnimation(whichBop); if (singleBop) octo.PlayAnimation(whichBop);
if (keepBop) bopStatus = whichBop; if (keepBop) bopStatus = whichBop;
octo.cantBop = !keepBop;
} }
} }

View File

@ -152,8 +152,6 @@ namespace HeavenStudio.Games
public Paddlers paddlers; public Paddlers paddlers;
private bool goBop = true;
public static RhythmRally instance; public static RhythmRally instance;
private void Awake() private void Awake()
@ -166,6 +164,7 @@ namespace HeavenStudio.Games
playerAnim.Play("Idle", 0, 0); playerAnim.Play("Idle", 0, 0);
opponentAnim.Play("Idle", 0, 0); opponentAnim.Play("Idle", 0, 0);
SetupBopRegion("rhythmRally", "bop", "bopAuto");
} }
const float tableHitTime = 0.58f; const float tableHitTime = 0.58f;
@ -366,7 +365,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (goBop && !inPose) if (BeatIsInBopRegion(beat) && !inPose)
{ {
BopSingle(); BopSingle();
} }
@ -374,7 +373,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool bop, bool bopAuto) public void Bop(double beat, float length, bool bop, bool bopAuto)
{ {
goBop = bopAuto;
if (bop) if (bop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -70,23 +70,21 @@ namespace HeavenStudio.Games
public Animator CloseCrane; public Animator CloseCrane;
public Animator FarCrane; public Animator FarCrane;
public GameObject Player; public GameObject Player;
private bool shouldBop = true;
private bool missed; private bool missed;
private bool hasSlurped; private bool hasSlurped;
public GameEvent bop = new GameEvent();
public static RhythmSomen instance; public static RhythmSomen instance;
// Start is called before the first frame update // Start is called before the first frame update
void Awake() void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("rhythmSomen", "bop", "toggle");
} }
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop) SomenPlayer.DoScaledAnimationAsync("HeadBob", 0.5f); if (BeatIsInBopRegion(beat)) SomenPlayer.DoScaledAnimationAsync("HeadBob", 0.5f);
} }
void Update() void Update()
@ -125,7 +123,6 @@ namespace HeavenStudio.Games
public void ToggleBop(double beat, float length, bool bopOrNah, bool autoBop) public void ToggleBop(double beat, float length, bool bopOrNah, bool autoBop)
{ {
shouldBop = autoBop;
if (bopOrNah) if (bopOrNah)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -143,7 +143,6 @@ namespace HeavenStudio.Games
private float currentZoomCamBeat; private float currentZoomCamBeat;
private Vector3 lastCamPos = new Vector3(0, 0, -10); private Vector3 lastCamPos = new Vector3(0, 0, -10);
private Vector3 currentCamPos = new Vector3(0, 0, -10); private Vector3 currentCamPos = new Vector3(0, 0, -10);
private bool shouldBop = true;
private bool missedBigGuy; private bool missedBigGuy;
private bool reporterShouldHeart; private bool reporterShouldHeart;
private bool hitPose; private bool hitPose;
@ -201,6 +200,7 @@ namespace HeavenStudio.Games
void Awake() void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("ringside", "toggleBop", "bop");
var camEvents = EventCaller.GetAllInGameManagerList("ringside", new string[] { "poseForTheFans" }); var camEvents = EventCaller.GetAllInGameManagerList("ringside", new string[] { "poseForTheFans" });
List<RiqEntity> tempEvents = new List<RiqEntity>(); List<RiqEntity> tempEvents = new List<RiqEntity>();
for (int i = 0; i < camEvents.Count; i++) for (int i = 0; i < camEvents.Count; i++)
@ -220,7 +220,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop && canBop) if (BeatIsInBopRegion(beat) && canBop)
{ {
if (UnityEngine.Random.Range(1, 18) == 1) if (UnityEngine.Random.Range(1, 18) == 1)
{ {
@ -331,7 +331,6 @@ namespace HeavenStudio.Games
public void ToggleBop(double beat, float length, bool startBopping, bool autoBop) public void ToggleBop(double beat, float length, bool startBopping, bool autoBop)
{ {
shouldBop = autoBop;
if (startBopping) if (startBopping)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)
@ -510,7 +509,7 @@ namespace HeavenStudio.Games
new BeatAction.Action(beat + 1, delegate { PoseCheck(beat); }), new BeatAction.Action(beat + 1, delegate { PoseCheck(beat); }),
new BeatAction.Action(beat + 4f, delegate new BeatAction.Action(beat + 4f, delegate
{ {
if (shouldBop) if (BeatIsInBopRegion(beat + 4f))
{ {
if (UnityEngine.Random.Range(1, 18) == 1) if (UnityEngine.Random.Range(1, 18) == 1)
{ {

View File

@ -89,6 +89,7 @@ namespace HeavenStudio.Games.Loaders
namespace HeavenStudio.Games namespace HeavenStudio.Games
{ {
using JetBrains.Annotations;
using Scripts_NtrSamurai; using Scripts_NtrSamurai;
public class SamuraiSliceNtr : Minigame public class SamuraiSliceNtr : Minigame
@ -102,15 +103,12 @@ namespace HeavenStudio.Games
public enum WhoBops public enum WhoBops
{ {
Samurai = 0, Samurai = 2,
Children = 1, Children = 1,
Both = 2, Both = 0,
None = 3 None = 3
} }
private bool goBopSamurai = true;
private bool goBopChild = true;
[Header("References")] [Header("References")]
public NtrSamurai player; public NtrSamurai player;
public GameObject launcher; public GameObject launcher;
@ -167,10 +165,15 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("samuraiSliceNtr", "bop", "whoBopsAuto", false);
} }
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
int whoBopsAuto = BeatIsInBopRegionInt(beat);
bool goBopSamurai = whoBopsAuto == (int)WhoBops.Samurai || whoBopsAuto == (int)WhoBops.Both;
bool goBopChild = whoBopsAuto == (int)WhoBops.Children || whoBopsAuto == (int)WhoBops.Both;
if (goBopSamurai) player.Bop(); if (goBopSamurai) player.Bop();
if (goBopChild) childParent.GetComponent<NtrSamuraiChild>().Bop(); if (goBopChild) childParent.GetComponent<NtrSamuraiChild>().Bop();
} }
@ -187,8 +190,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, int whoBops, int whoBopsAuto) public void Bop(double beat, float length, int whoBops, int whoBopsAuto)
{ {
goBopSamurai = whoBopsAuto == (int)WhoBops.Samurai || whoBopsAuto == (int)WhoBops.Both;
goBopChild = whoBopsAuto == (int)WhoBops.Children || whoBopsAuto == (int)WhoBops.Both;
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)
{ {
BeatAction.New(instance, new List<BeatAction.Action>() BeatAction.New(instance, new List<BeatAction.Action>()

View File

@ -136,9 +136,34 @@ namespace HeavenStudio.Games.Scripts_SeeSaw
transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat); transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
break; break;
case JumpState.HighOutOut: case JumpState.HighOutOut:
if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
{
if (!hasChangedAnimMidAir) anim.Play("Jump_OutOut_Fall", 0, 0);
hasChangedAnimMidAir = true;
}
transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
break;
case JumpState.HighOutIn: case JumpState.HighOutIn:
if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
{
if (!hasChangedAnimMidAir) anim.Play("Jump_OutIn_Tuck", 0, 0);
hasChangedAnimMidAir = true;
}
transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
break;
case JumpState.HighInOut: case JumpState.HighInOut:
if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
{
if (!hasChangedAnimMidAir) anim.Play("Jump_InOut_Tuck", 0, 0);
hasChangedAnimMidAir = true;
}
break;
case JumpState.HighInIn: case JumpState.HighInIn:
if (currentBeat >= startBeat + 1 && !hasChangedAnimMidAir && see)
{
if (!hasChangedAnimMidAir) anim.Play("Jump_InIn_Fall", 0, 0);
hasChangedAnimMidAir = true;
}
transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat); transform.position = GetPathPositionFromBeat(currentPath, Math.Max(startBeat, currentBeat), startBeat);
break; break;
} }

View File

@ -144,7 +144,6 @@ namespace HeavenStudio.Games
public Animator Gramps; public Animator Gramps;
public Animator Hit; public Animator Hit;
public GameObject Player; public GameObject Player;
[NonSerialized] public bool shouldBop = true;
bool canBop = true; bool canBop = true;
bool grampsCanBop = true; bool grampsCanBop = true;
public bool spaceGrampsShouldBop = false; public bool spaceGrampsShouldBop = false;
@ -226,11 +225,12 @@ namespace HeavenStudio.Games
instance = this; instance = this;
colorStart = defaultBGColor; colorStart = defaultBGColor;
colorEnd = defaultBGColor; colorEnd = defaultBGColor;
SetupBopRegion("spaceDance", "bop", "auto");
} }
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop) if (BeatIsInBopRegion(beat))
{ {
Bop(); Bop();
} }
@ -656,7 +656,6 @@ namespace HeavenStudio.Games
public void EpicBop(double beat, float length, bool autoDancers, bool dancers, bool autoGramps, bool gramps) public void EpicBop(double beat, float length, bool autoDancers, bool dancers, bool autoGramps, bool gramps)
{ {
shouldBop = autoDancers;
spaceGrampsShouldBop = autoGramps; spaceGrampsShouldBop = autoGramps;
if (dancers || gramps) if (dancers || gramps)
{ {

View File

@ -110,9 +110,7 @@ namespace HeavenStudio.Games
[SerializeField] private float monkeyJumpHeight = 3f; [SerializeField] private float monkeyJumpHeight = 3f;
[SerializeField] private float maxFlashOpacity = 0.8f; [SerializeField] private float maxFlashOpacity = 0.8f;
private GameEvent bop = new();
private bool canBop = true; private bool canBop = true;
private bool shouldBop = true;
private double jumpStartBeat = double.MinValue; private double jumpStartBeat = double.MinValue;
@ -121,11 +119,12 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("tapTrial", "bop", "toggle2");
} }
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop) SingleBop(); if (BeatIsInBopRegion(beat)) SingleBop();
} }
private void Update() private void Update()
@ -253,7 +252,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool bop, bool autoBop) public void Bop(double beat, float length, bool bop, bool autoBop)
{ {
shouldBop = autoBop;
if (bop) if (bop)
{ {
List<BeatAction.Action> actions = new(); List<BeatAction.Action> actions = new();
@ -443,14 +441,14 @@ namespace HeavenStudio.Games
private void MissJump(PlayerActionEvent caller) private void MissJump(PlayerActionEvent caller)
{ {
player.JumpTapMiss(false); player.JumpTapMiss(false);
if (giraffe.IsAnimationNotPlaying()) giraffe.DoScaledAnimationAsync("Miss", 0.5f); if (giraffe.IsAnimationNotPlaying() && currentAnim != GiraffeAnimation.Exit) giraffe.DoScaledAnimationAsync("Miss", 0.5f);
ResetScroll(); ResetScroll();
} }
private void MissJumpFinal(PlayerActionEvent caller) private void MissJumpFinal(PlayerActionEvent caller)
{ {
player.JumpTapMiss(true); player.JumpTapMiss(true);
if (giraffe.IsAnimationNotPlaying()) giraffe.DoScaledAnimationAsync("Miss", 0.5f); if (giraffe.IsAnimationNotPlaying() && currentAnim != GiraffeAnimation.Exit) giraffe.DoScaledAnimationAsync("Miss", 0.5f);
ResetScroll(); ResetScroll();
} }

View File

@ -228,8 +228,6 @@ namespace HeavenStudio.Games
bool doingPoses = false; bool doingPoses = false;
bool shouldHold = false; bool shouldHold = false;
double crouchEndBeat; double crouchEndBeat;
public bool shouldBop = true;
public GameEvent bop = new GameEvent();
static List<QueuedPose> queuedPoses = new List<QueuedPose>(); static List<QueuedPose> queuedPoses = new List<QueuedPose>();
static List<QueuedCrouch> queuedCrouches = new List<QueuedCrouch>(); static List<QueuedCrouch> queuedCrouches = new List<QueuedCrouch>();
[Header("Components")] [Header("Components")]
@ -255,11 +253,12 @@ namespace HeavenStudio.Games
void Awake() void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("theDazzles", "bop", "toggle");
} }
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop) if (BeatIsInBopRegion(beat))
{ {
foreach (var girl in npcGirls) foreach (var girl in npcGirls)
{ {
@ -353,7 +352,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool goBop, bool autoBop) public void Bop(double beat, float length, bool goBop, bool autoBop)
{ {
shouldBop = autoBop;
if (goBop) if (goBop)
{ {
for (int i = 0; i < length; i++) for (int i = 0; i < length; i++)

View File

@ -147,8 +147,6 @@ namespace HeavenStudio.Games
Dictionary<double, RiqEntity> passBallDict = new(); Dictionary<double, RiqEntity> passBallDict = new();
string currentPassType; string currentPassType;
public static TossBoys instance; public static TossBoys instance;
bool shouldBop = true;
public GameEvent bop = new GameEvent();
float currentEventLength; float currentEventLength;
const int IAAka = IAMAXCAT; const int IAAka = IAMAXCAT;
@ -236,6 +234,7 @@ namespace HeavenStudio.Games
instance = this; instance = this;
colorStart = defaultBGColor; colorStart = defaultBGColor;
colorEnd = defaultBGColor; colorEnd = defaultBGColor;
SetupBopRegion("tossBoys", "bop", "auto");
} }
new void OnDrawGizmos() new void OnDrawGizmos()
@ -264,7 +263,7 @@ namespace HeavenStudio.Games
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
if (shouldBop) if (BeatIsInBopRegion(beat))
{ {
SingleBop(); SingleBop();
} }
@ -352,7 +351,6 @@ namespace HeavenStudio.Games
public void Bop(double beat, float length, bool auto, bool goBop) public void Bop(double beat, float length, bool auto, bool goBop)
{ {
shouldBop = auto;
if (goBop) if (goBop)
{ {
List<BeatAction.Action> bops = new List<BeatAction.Action>(); List<BeatAction.Action> bops = new List<BeatAction.Action>();

View File

@ -114,12 +114,13 @@ namespace HeavenStudio.Games
private void Awake() private void Awake()
{ {
instance = this; instance = this;
SetupBopRegion("trickClass", "bop", "autoBop");
} }
public override void OnBeatPulse(double beat) public override void OnBeatPulse(double beat)
{ {
var cond = Conductor.instance; var cond = Conductor.instance;
if (!goBop) return; if (!BeatIsInBopRegion(beat)) return;
if ((!playerReady) && cond.songPositionInBeatsAsDouble > playerBopStart) if ((!playerReady) && cond.songPositionInBeatsAsDouble > playerBopStart)
playerAnim.DoScaledAnimationAsync("Bop"); playerAnim.DoScaledAnimationAsync("Bop");