From 62ebea8411c3ec0d3e3b76bc40685499d7f1b542 Mon Sep 17 00:00:00 2001 From: AstrlJelly Date: Fri, 7 Jun 2024 16:44:55 -0400 Subject: [PATCH] uhhh?? ig i forgot to save wow i guess i was. really tired last night. --- Assets/Resources/Games/dressYourBest.prefab | 41 +++- .../Monkey/Faces/MonkeyCallFace.anim | 71 +++++++ .../Monkey/Faces/MonkeyCallFace.anim.meta | 8 + .../Monkey/Faces/MonkeyCorrect.anim | 4 +- .../Monkey/Faces/MonkeyIncorrect.anim | 4 +- .../Animations/Monkey/MonkeyAnim.controller | 95 ++++++++- .../DressYourBest/Animations/Reaction.meta | 8 + .../Reaction/ReactionAnim.controller | 130 ++++++++++++ .../Reaction/ReactionAnim.controller.meta | 8 + .../Animations/Reaction/ReactionCorrect.anim | 193 ++++++++++++++++++ .../Reaction/ReactionCorrect.anim.meta | 8 + .../Reaction/ReactionIncorrect.anim | 193 ++++++++++++++++++ .../Reaction/ReactionIncorrect.anim.meta | 8 + .../Games/DressYourBest/DressYourBest.cs | 115 ++++++++--- 14 files changed, 835 insertions(+), 51 deletions(-) create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim.meta create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction.meta create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller.meta create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim.meta create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim create mode 100644 Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim.meta diff --git a/Assets/Resources/Games/dressYourBest.prefab b/Assets/Resources/Games/dressYourBest.prefab index 1ea331ff..e589761f 100644 --- a/Assets/Resources/Games/dressYourBest.prefab +++ b/Assets/Resources/Games/dressYourBest.prefab @@ -289,7 +289,7 @@ Transform: - {fileID: 8226260808373746563} - {fileID: 5878401426804739814} m_Father: {fileID: 5715047164748654698} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &6037582727269570347 Animator: @@ -512,7 +512,7 @@ Transform: - {fileID: 3448463463127742291} - {fileID: 8796473988025086322} m_Father: {fileID: 5715047164748654698} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &2937590231589242979 Animator: @@ -852,6 +852,7 @@ Transform: - {fileID: 7509207802279435211} - {fileID: 8336220536032857166} - {fileID: 1503179506244560240} + - {fileID: 5883637438837570447} - {fileID: 8769701094702201794} - {fileID: 3256309863007746927} - {fileID: 3350458927318833813} @@ -874,6 +875,7 @@ MonoBehaviour: girlAnim: {fileID: 2937590231589242979} monkeyAnim: {fileID: 3536726533992943518} sewingAnim: {fileID: 6037582727269570347} + reactionAnim: {fileID: 7081272534623568140} bgSpriteRenderer: {fileID: 2629062112903974991} lightRenderer: {fileID: 1403303695239245045} lightMaterialTemplate: {fileID: 2100000, guid: 42b863c88a7a9c4428440728fee737bb, type: 2} @@ -1400,13 +1402,14 @@ GameObject: m_Component: - component: {fileID: 5883637438837570447} - component: {fileID: 2012344898042423413} + - component: {fileID: 7081272534623568140} m_Layer: 0 m_Name: Reaction m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!4 &5883637438837570447 Transform: m_ObjectHideFlags: 0 @@ -1415,12 +1418,12 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 5555175038130275063} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalPosition: {x: -0.66, y: -0.02, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 8769701094702201794} - m_RootOrder: 6 + m_Father: {fileID: 5715047164748654698} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!212 &2012344898042423413 SpriteRenderer: @@ -1464,7 +1467,7 @@ SpriteRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_Sprite: {fileID: 455743163, guid: 91eefdf066035514b82191a67d108b89, type: 3} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 0} m_FlipX: 0 m_FlipY: 0 m_DrawMode: 0 @@ -1474,6 +1477,27 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!95 &7081272534623568140 +Animator: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5555175038130275063} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: a90105ef6315a114fb02eb8a6bf15f42, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 --- !u!1 &5831123814062995111 GameObject: m_ObjectHideFlags: 0 @@ -1677,9 +1701,8 @@ Transform: - {fileID: 2680789703424563267} - {fileID: 5792578720703545176} - {fileID: 4233767558195956804} - - {fileID: 5883637438837570447} m_Father: {fileID: 5715047164748654698} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &3536726533992943518 Animator: diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim new file mode 100644 index 00000000..cb45616e --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim @@ -0,0 +1,71 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MonkeyCallFace + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: -1983626645, guid: 91eefdf066035514b82191a67d108b89, type: 3} + - time: 0.13333334 + value: {fileID: -2055584907, guid: 91eefdf066035514b82191a67d108b89, type: 3} + attribute: m_Sprite + path: Head + classID: 212 + script: {fileID: 0} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 130111906 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: -1983626645, guid: 91eefdf066035514b82191a67d108b89, type: 3} + - {fileID: -2055584907, guid: 91eefdf066035514b82191a67d108b89, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.15 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim.meta b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim.meta new file mode 100644 index 00000000..4363f749 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCallFace.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1090d8c79dc86f149af8c4811c6299bc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCorrect.anim b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCorrect.anim index aabc6cb4..bff11eac 100644 --- a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCorrect.anim +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyCorrect.anim @@ -20,7 +20,7 @@ AnimationClip: m_PPtrCurves: - curve: - time: 0 - value: {fileID: -2055584907, guid: 91eefdf066035514b82191a67d108b89, type: 3} + value: {fileID: -1270103365, guid: 91eefdf066035514b82191a67d108b89, type: 3} attribute: m_Sprite path: Head classID: 212 @@ -40,7 +40,7 @@ AnimationClip: customType: 23 isPPtrCurve: 1 pptrCurveMapping: - - {fileID: -2055584907, guid: 91eefdf066035514b82191a67d108b89, type: 3} + - {fileID: -1270103365, guid: 91eefdf066035514b82191a67d108b89, type: 3} m_AnimationClipSettings: serializedVersion: 2 m_AdditiveReferencePoseClip: {fileID: 0} diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyIncorrect.anim b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyIncorrect.anim index 8410c419..b65c1987 100644 --- a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyIncorrect.anim +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/Faces/MonkeyIncorrect.anim @@ -20,7 +20,7 @@ AnimationClip: m_PPtrCurves: - curve: - time: 0 - value: {fileID: -2055584907, guid: 91eefdf066035514b82191a67d108b89, type: 3} + value: {fileID: -578941528, guid: 91eefdf066035514b82191a67d108b89, type: 3} attribute: m_Sprite path: Head classID: 212 @@ -40,7 +40,7 @@ AnimationClip: customType: 23 isPPtrCurve: 1 pptrCurveMapping: - - {fileID: -2055584907, guid: 91eefdf066035514b82191a67d108b89, type: 3} + - {fileID: -578941528, guid: 91eefdf066035514b82191a67d108b89, type: 3} m_AnimationClipSettings: serializedVersion: 2 m_AdditiveReferencePoseClip: {fileID: 0} diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/MonkeyAnim.controller b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/MonkeyAnim.controller index 3353b462..7c9d1093 100644 --- a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/MonkeyAnim.controller +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Monkey/MonkeyAnim.controller @@ -1,5 +1,57 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-4333161336659600000 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Sad + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 1e0250de52541f54b8137ca93a43b7a8, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &-1677676648488995382 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Happy + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: cfd96695df349724791682c162ceb9c1, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: --- !u!1102 &-1409298229096361948 AnimatorState: serializedVersion: 6 @@ -20,7 +72,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: 0} + m_Motion: {fileID: 7400000, guid: 3c83387d343c1e144a9f1bc8de6941c9, type: 2} m_Tag: m_SpeedParameter: m_MirrorParameter: @@ -40,7 +92,7 @@ AnimatorState: m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 - m_WriteDefaultValues: 0 + m_WriteDefaultValues: 1 m_Mirror: 0 m_SpeedParameterActive: 0 m_MirrorParameterActive: 0 @@ -80,9 +132,9 @@ AnimatorController: m_Mask: {fileID: 0} m_Motions: [] m_Behaviours: [] - m_BlendingMode: 0 + m_BlendingMode: 1 m_SyncedLayerIndex: -1 - m_DefaultWeight: 0 + m_DefaultWeight: 1 m_IKPass: 0 m_SyncedLayerAffectsTiming: 0 m_Controller: {fileID: 9100000} @@ -140,6 +192,32 @@ AnimatorState: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1102 &4226119145841885105 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CallFace + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 1090d8c79dc86f149af8c4811c6299bc, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: --- !u!1107 &4650706990511529687 AnimatorStateMachine: serializedVersion: 6 @@ -152,6 +230,15 @@ AnimatorStateMachine: - serializedVersion: 1 m_State: {fileID: 8118728865878460043} m_Position: {x: 370, y: 150, z: 0} + - serializedVersion: 1 + m_State: {fileID: -1677676648488995382} + m_Position: {x: 280, y: -30, z: 0} + - serializedVersion: 1 + m_State: {fileID: -4333161336659600000} + m_Position: {x: 370, y: 60, z: 0} + - serializedVersion: 1 + m_State: {fileID: 4226119145841885105} + m_Position: {x: 570, y: -30, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction.meta b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction.meta new file mode 100644 index 00000000..e9e5e8b2 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59150cc8be823cb46bb55e377206eac4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller new file mode 100644 index 00000000..bc1fc106 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller @@ -0,0 +1,130 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-1133403523855269911 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Incorrect + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 93d2c53ea2a98a94581181a583838fb8, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ReactionAnim + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 3908481374778911780} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &343592015237330692 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &2747063380849003634 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Correct + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 35e5172c77cae3e43a081e67e50557fa, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &3908481374778911780 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 343592015237330692} + m_Position: {x: 370, y: 100, z: 0} + - serializedVersion: 1 + m_State: {fileID: 2747063380849003634} + m_Position: {x: 330, y: -20, z: 0} + - serializedVersion: 1 + m_State: {fileID: -1133403523855269911} + m_Position: {x: 350, y: 40, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 343592015237330692} diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller.meta b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller.meta new file mode 100644 index 00000000..9af4b505 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionAnim.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a90105ef6315a114fb02eb8a6bf15f42 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim new file mode 100644 index 00000000..158a43d3 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim @@ -0,0 +1,193 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ReactionCorrect + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: -0.68, y: 0.21, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 212 + script: {fileID: 0} + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 455743163, guid: 91eefdf066035514b82191a67d108b89, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 304273561 + script: {fileID: 0} + typeID: 212 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: + - {fileID: 455743163, guid: 91eefdf066035514b82191a67d108b89, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.016666668 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 212 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.68 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.21 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim.meta b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim.meta new file mode 100644 index 00000000..87c9e0b0 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionCorrect.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35e5172c77cae3e43a081e67e50557fa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim new file mode 100644 index 00000000..9ae21279 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim @@ -0,0 +1,193 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ReactionIncorrect + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: -0.75, y: 0.69, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_ScaleCurves: [] + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 212 + script: {fileID: 0} + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: -591490588, guid: 91eefdf066035514b82191a67d108b89, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 304273561 + script: {fileID: 0} + typeID: 212 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: + - {fileID: -591490588, guid: 91eefdf066035514b82191a67d108b89, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.016666668 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 212 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.75 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.x + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.69 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.y + path: + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalPosition.z + path: + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim.meta b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim.meta new file mode 100644 index 00000000..74fc5495 --- /dev/null +++ b/Assets/Resources/Sprites/Games/DressYourBest/Animations/Reaction/ReactionIncorrect.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93d2c53ea2a98a94581181a583838fb8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Games/DressYourBest/DressYourBest.cs b/Assets/Scripts/Games/DressYourBest/DressYourBest.cs index ab26a88e..3904ffa0 100644 --- a/Assets/Scripts/Games/DressYourBest/DressYourBest.cs +++ b/Assets/Scripts/Games/DressYourBest/DressYourBest.cs @@ -24,8 +24,8 @@ namespace HeavenStudio.Games.Loaders var e = eventCaller.currentEntity; if (eventCaller.gameManager.TryGetMinigame(out DressYourBest instance)) { DressYourBest.Characters characters = (DressYourBest.Characters)e["characters"]; - instance.ToggleBopping(characters, e["bop"]); - if (e["auto"]) instance.DoBopping(e.beat, e.length, characters); + instance.ToggleBopping(characters, e["auto"]); + if (e["bop"]) instance.DoBopping(e.beat, e.length, characters); } }, defaultLength = 1f, @@ -33,8 +33,8 @@ namespace HeavenStudio.Games.Loaders parameters = new List() { new("characters", DressYourBest.Characters.Both, "Characters", "Choose the characters to toggle bopping."), - new("bop", true, "Bop", "Toggle if the selected characters should bop for the duration of this event."), new("auto", true, "Bop (Auto)", "Toggle if the selected characters should automatically bop until another Bop event is reached."), + new("bop", true, "Bop", "Toggle if the selected characters should bop for the duration of this event."), } }, new GameAction("start interval", "Start Interval", "Cues") @@ -176,6 +176,7 @@ namespace HeavenStudio.Games [SerializeField] private Animator girlAnim; [SerializeField] private Animator monkeyAnim; [SerializeField] private Animator sewingAnim; + [SerializeField] private Animator reactionAnim; [Header("Renderers")] [SerializeField] private SpriteRenderer bgSpriteRenderer; @@ -201,10 +202,16 @@ namespace HeavenStudio.Games private Sound whirringSfx = null; private List callEntities; + private double startIntervalEndBeat; + // if characters should bop automatically private bool girlBop = true; private bool monkeyBop = true; + private Faces girlFaceCurrent; + private Faces monkeyFaceCurrent; + + private void Awake() { // instantiate the material so it doesn't persist between game switches @@ -215,15 +222,24 @@ namespace HeavenStudio.Games private void Update() { bgSpriteRenderer.color = bgColorEase.GetColor(); + + if (PlayerInput.GetIsAction(InputAction_BasicPress) && !IsExpectingInputNow(InputAction_BasicPress)) { + ChangeEmotion(Characters.Girl, Faces.Sad); + sewingAnim.DoScaledAnimationAsync("Miss", 0.5f); + SoundByte.PlayOneShotGame("dressYourBest/hit_1", volume: 2); + SoundByte.PlayOneShot("miss"); + } } public override void OnLateBeatPulse(double beat) { - if (girlBop && !girlAnim.IsPlayingAnimationNames()) { + // if (girlBop && !girlAnim.IsPlayingAnimationNames()) { + if (girlBop) { girlAnim.DoScaledAnimationAsync("Bop", 0.5f, animLayer: 0); } - if (monkeyBop && !monkeyAnim.IsPlayingAnimationNames("Call")) { - monkeyAnim.DoScaledAnimationAsync("Bop", 0.5f); + // if (monkeyBop && beat >= startIntervalEndBeat && !monkeyAnim.IsPlayingAnimationNames("Call")) { + if (monkeyBop && beat >= startIntervalEndBeat) { + monkeyAnim.DoScaledAnimationAsync("Bop", 0.5f, animLayer: 0); } } @@ -231,13 +247,13 @@ namespace HeavenStudio.Games public override void OnGameSwitch(double beat) { StoreAllCallEntities(); - PersistBackgroundAppearance(beat); + PersistPreviousEntities(beat); } public override void OnPlay(double beat) { StoreAllCallEntities(); - PersistBackgroundAppearance(beat); + PersistPreviousEntities(beat); } private void StoreAllCallEntities() @@ -246,7 +262,7 @@ namespace HeavenStudio.Games callEntities = gameManager.Beatmap.Entities.FindAll(e => e.datamodel == "dressYourBest/monkey call"); } - private void PersistBackgroundAppearance(double beat) + private void PersistPreviousEntities(double beat) { // find the last background appearance from the current beat // this uses only beat, not length. earlier events will be completely ignored @@ -255,13 +271,25 @@ namespace HeavenStudio.Games RiqEntity e = bgEntity; ChangeBackgroundAppearance(e.beat, e.length, e["startColor"], e["endColor"], e["ease"]); } + + RiqEntity bopEntity = gameManager.Beatmap.Entities.FindLast(e => e.beat <= beat && e.datamodel == "dressYourBest/bop"); + if (bopEntity != null) { + RiqEntity e = bopEntity; + Characters characters = (Characters)e["characters"]; + ToggleBopping(characters, e["auto"]); + if (e["bop"] && beat > e.beat && beat < e.beat + e.length) { // if it is switched to or played in the middle of a bop event + DoBopping(e.beat, e.length, characters); + } + } } private void SetLightFromState(LightState state) { ColorPair colorPair = lightStates[(int)state]; - lightRenderer.material.SetColor("_ColorAlpha", colorPair.outside); - lightRenderer.material.SetColor("_ColorBravo", colorPair.inside); + // lightRenderer.material.SetColor("_ColorAlpha", colorPair.outside); + // lightRenderer.material.SetColor("_ColorBravo", colorPair.inside); + lightRenderer.material.SetColor("_ColorAlpha", colorPair.inside); + lightRenderer.material.SetColor("_ColorBravo", colorPair.outside); } public void ChangeBackgroundAppearance(double beat, float length, Color startColor, Color endColor, int ease) @@ -287,7 +315,7 @@ namespace HeavenStudio.Games bopAction += () => girlAnim.DoScaledAnimationAsync("Bop", 0.5f, animLayer: 0); } if (characters is Characters.Monkey or Characters.Both) { - bopAction += () => monkeyAnim.DoScaledAnimationAsync("Bop", 0.5f); + bopAction += () => monkeyAnim.DoScaledAnimationAsync("Bop", 0.5f, animLayer: 0); } List actions = new(); @@ -299,20 +327,19 @@ namespace HeavenStudio.Games public void ChangeEmotion(Characters character, Faces emotion) { + string emotionStr = emotion.ToString(); + if (character is Characters.Girl or Characters.Both) { - ChangeEmotion(girlAnim, emotion); + girlFaceCurrent = emotion; + girlAnim.DoScaledAnimationAsync(emotionStr, 0.5f, animLayer: 1); } if (character is Characters.Monkey or Characters.Both) { - ChangeEmotion(monkeyAnim, emotion); + Debug.Log("monkey emotionStr : " + emotionStr); + monkeyFaceCurrent = emotion; + monkeyAnim.DoScaledAnimationAsync(emotionStr, 0.5f, animLayer: 1); } } - private void ChangeEmotion(Animator anim, Faces emotion) - { - Debug.Log("emotion : " + emotion); - anim.DoScaledAnimationAsync(emotion.ToString(), 0.5f, animLayer: 1); - } - // startBeat exists so actions that happened when inactive aren't done again. that would suck public void QueueStartInterval(double beat, float length, bool autoPass, bool autoReact, double startBeat = double.MinValue) { @@ -322,14 +349,25 @@ namespace HeavenStudio.Games if (startBeat < beat + length) { List sounds = new(); List actions = new() { - new(beat, () => ChangeEmotion(girlAnim, Faces.Looking)) + new(beat, delegate { + startIntervalEndBeat = beat + length; + if (neededCalls[^1].beat == beat + length) { // if there's a block at the end, extend the bop one beat + startIntervalEndBeat++; + } + ChangeEmotion(Characters.Girl, Faces.Looking); + }) }; foreach (RiqEntity call in neededCalls) { // Debug.Log("call.beat : " + call.beat); if (call.beat < startBeat) continue; sounds.Add(new("dressYourBest/monkey_call_" + (call["callSfx"] + 1), call.beat)); - actions.Add(new(call.beat, () => monkeyAnim.DoScaledAnimationAsync("Call", 0.5f))); + actions.Add(new(call.beat, () => { + monkeyAnim.DoScaledAnimationAsync("Call", 0.5f, animLayer: 0); + // this is janky but unity animation Sucks Balls so it's really the best way to do it + monkeyFaceCurrent = Faces.Idle; + monkeyAnim.DoScaledAnimationAsync("CallFace", 0.5f, animLayer: 1); + })); } if (autoPass) { // have to add this after all the other actions as actions are done in order of beat @@ -355,12 +393,13 @@ namespace HeavenStudio.Games neededCalls ??= GetNeededCalls(startIntervalBeat, startIntervalLength); if (neededCalls.Count <= 0) return; // do the actual stuff under here - ChangeEmotion(girlAnim, Faces.Idle); + ChangeEmotion(Characters.Girl, Faces.Idle); SetLightFromState(LightState.Repeating); // "Any" check instead of just checking the last one? - if (neededCalls[^1].beat != beat) { - monkeyAnim.DoScaledAnimationAsync("Idle", 0.5f); - } + // if (neededCalls[^1].beat != beat) { + // monkeyAnim.DoScaledAnimationAsync("Idle", 0.5f, animLayer: 0); + // // ChangeEmotion(Characters.Monkey, Faces.Idle); + // } hitCount = 0; foreach (RiqEntity call in neededCalls) { @@ -382,21 +421,29 @@ namespace HeavenStudio.Games public void IntervalReact(double beat, float length) { + hasMissed = false; + Faces reaction = HasMissed ? Faces.Sad : Faces.Happy; - ChangeEmotion(monkeyAnim, reaction); - ChangeEmotion(girlAnim, reaction); + ChangeEmotion(Characters.Monkey, reaction); + ChangeEmotion(Characters.Girl, reaction); LightState lightState = (LightState)reaction; SetLightFromState(lightState); + string lightStateStr = lightState.ToString(); + reactionAnim.DoScaledAnimationAsync(lightStateStr, 0.5f); + // there's not a good way to schedule this afaik. // there might be some way to like, schedule the sound then change the sound source when missed? that could work maybe - SoundByte.PlayOneShotGame("dressYourBest/" + lightState.ToString().ToLower()); + SoundByte.PlayOneShotGame("dressYourBest/" + lightStateStr.ToLower()); // maybe wanna use a beat value that's checked in the update loop - // that would let people specify + // made this comment before adding this "current face" check _ = BeatAction.New(this, new() { new(beat + length, delegate { - ChangeEmotion(monkeyAnim, Faces.Idle); - ChangeEmotion(girlAnim, Faces.Idle); + reactionAnim.DoScaledAnimationAsync("Idle", 0.5f); + // makes sure it's not overriding new faces (really just the looking face.) + if (girlFaceCurrent == reaction) ChangeEmotion(Characters.Girl, Faces.Idle); + if (monkeyFaceCurrent == reaction) ChangeEmotion(Characters.Monkey, Faces.Idle); + // ChangeEmotion(Characters.Monkey, Faces.Idle); SetLightFromState(LightState.IdleOrListening); }) }); @@ -408,14 +455,14 @@ namespace HeavenStudio.Games private void OnHit(PlayerActionEvent caller, float state) { hitCount++; - SoundByte.PlayOneShotGame("dressYourBest/hit_1"); + SoundByte.PlayOneShotGame("dressYourBest/hit_1", volume: 2); SoundByte.PlayOneShotGame("dressYourBest/hit_2", pitch: SoundByte.GetPitchFromSemiTones(hitCount, false)); if (state is >= 1f or <= (-1f)) // barely { sewingAnim.DoScaledAnimationAsync("Miss", 0.5f); hasMissed = true; } - else // just + else // just { sewingAnim.DoScaledAnimationAsync("Hit", 0.5f); }