From f3627df2e95c8c02cfdd7b23fafacd6d60e91d0e Mon Sep 17 00:00:00 2001 From: Miguel Astor Date: Mon, 3 Aug 2026 00:02:04 -0400 Subject: [PATCH] TO SQUASH: Added FruitBall prefab, animation, and script. Updated BallSpawner to spawn FruitBalls. --- Assets/Animations/FruitBall.controller | 125 ++++++ Assets/Animations/FruitBall.controller.meta | 8 + Assets/Animations/FruitBallMove.anim | 72 ++++ Assets/Animations/FruitBallMove.anim.meta | 8 + Assets/Animations/FruitBallSpawn.anim | 96 +++++ Assets/Animations/FruitBallSpawn.anim.meta | 8 + .../{BasicBall.prefab => Basic Ball.prefab} | 2 +- ...all.prefab.meta => Basic Ball.prefab.meta} | 0 Assets/Prefabs/Fruit Ball.prefab | 305 ++++++++++++++ Assets/Prefabs/Fruit Ball.prefab.meta | 7 + Assets/Scenes/Game.unity | 4 +- Assets/Scripts/Game/BallSpawner.cs | 15 +- Assets/Scripts/Game/Balls/FruitBall.cs | 65 +++ Assets/Scripts/Game/Balls/FruitBall.cs.meta | 2 + Assets/Sprites/302.png | Bin 0 -> 743 bytes Assets/Sprites/302.png.meta | 376 ++++++++++++++++++ Assets/Sprites/304.png | Bin 0 -> 450 bytes Assets/Sprites/304.png.meta | 169 ++++++++ 18 files changed, 1258 insertions(+), 4 deletions(-) create mode 100644 Assets/Animations/FruitBall.controller create mode 100644 Assets/Animations/FruitBall.controller.meta create mode 100644 Assets/Animations/FruitBallMove.anim create mode 100644 Assets/Animations/FruitBallMove.anim.meta create mode 100644 Assets/Animations/FruitBallSpawn.anim create mode 100644 Assets/Animations/FruitBallSpawn.anim.meta rename Assets/Prefabs/{BasicBall.prefab => Basic Ball.prefab} (99%) rename Assets/Prefabs/{BasicBall.prefab.meta => Basic Ball.prefab.meta} (100%) create mode 100644 Assets/Prefabs/Fruit Ball.prefab create mode 100644 Assets/Prefabs/Fruit Ball.prefab.meta create mode 100644 Assets/Scripts/Game/Balls/FruitBall.cs create mode 100644 Assets/Scripts/Game/Balls/FruitBall.cs.meta create mode 100644 Assets/Sprites/302.png create mode 100644 Assets/Sprites/302.png.meta create mode 100644 Assets/Sprites/304.png create mode 100644 Assets/Sprites/304.png.meta diff --git a/Assets/Animations/FruitBall.controller b/Assets/Animations/FruitBall.controller new file mode 100644 index 0000000..f6b7a7e --- /dev/null +++ b/Assets/Animations/FruitBall.controller @@ -0,0 +1,125 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1101 &-6724315755470736062 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 3563595818666398678} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1107 &-63745541466114201 +AnimatorStateMachine: + serializedVersion: 7 + 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: 1779588230561138003} + m_Position: {x: 310, y: 120, z: 0} + - serializedVersion: 1 + m_State: {fileID: 3563595818666398678} + m_Position: {x: 570, y: 120, 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: 1779588230561138003} +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FruitBall + serializedVersion: 6 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -63745541466114201} + 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} + m_EvaluateTransitionsOnStart: 1 +--- !u!1102 &1779588230561138003 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FruitBallSpawn + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -6724315755470736062} + 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: 317e5fa6689d6b95fa71aad33e29abde, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &3563595818666398678 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FruitBallMove + 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: 0e49911bf1bfe09a09def9f489a5cb5a, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/Animations/FruitBall.controller.meta b/Assets/Animations/FruitBall.controller.meta new file mode 100644 index 0000000..fb396cc --- /dev/null +++ b/Assets/Animations/FruitBall.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 828e687b877b245d481aab50b9342dec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations/FruitBallMove.anim b/Assets/Animations/FruitBallMove.anim new file mode 100644 index 0000000..f972202 --- /dev/null +++ b/Assets/Animations/FruitBallMove.anim @@ -0,0 +1,72 @@ +%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: FruitBallMove + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: -5535265446822525397, guid: c63692b5893679b34ab40dce0b759a93, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + 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 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: + - {fileID: -5535265446822525397, guid: c63692b5893679b34ab40dce0b759a93, 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: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Animations/FruitBallMove.anim.meta b/Assets/Animations/FruitBallMove.anim.meta new file mode 100644 index 0000000..8fe8d94 --- /dev/null +++ b/Assets/Animations/FruitBallMove.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e49911bf1bfe09a09def9f489a5cb5a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Animations/FruitBallSpawn.anim b/Assets/Animations/FruitBallSpawn.anim new file mode 100644 index 0000000..cffa0ce --- /dev/null +++ b/Assets/Animations/FruitBallSpawn.anim @@ -0,0 +1,96 @@ +%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: FruitBallSpawn + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: 2398454704765574305, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.083333336 + value: {fileID: -3657361948485569323, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.18333334 + value: {fileID: -1304212789136197959, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.25 + value: {fileID: -2555810029117405087, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.33333334 + value: {fileID: 1653591640481058455, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.41666666 + value: {fileID: -452809238219045493, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.48333332 + value: {fileID: 2421739381380088398, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.5833333 + value: {fileID: 8502092797760279452, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - time: 0.6666667 + value: {fileID: -178209412, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + 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 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: + - {fileID: 2398454704765574305, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: -3657361948485569323, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: -1304212789136197959, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: -2555810029117405087, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: 1653591640481058455, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: -452809238219045493, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: 2421739381380088398, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: 8502092797760279452, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + - {fileID: -178209412, guid: 90e0ffb5445f477c1b73f2ea325b508f, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.68333334 + 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/Animations/FruitBallSpawn.anim.meta b/Assets/Animations/FruitBallSpawn.anim.meta new file mode 100644 index 0000000..6bcac66 --- /dev/null +++ b/Assets/Animations/FruitBallSpawn.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 317e5fa6689d6b95fa71aad33e29abde +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/BasicBall.prefab b/Assets/Prefabs/Basic Ball.prefab similarity index 99% rename from Assets/Prefabs/BasicBall.prefab rename to Assets/Prefabs/Basic Ball.prefab index d891a7d..3f80d7f 100644 --- a/Assets/Prefabs/BasicBall.prefab +++ b/Assets/Prefabs/Basic Ball.prefab @@ -16,7 +16,7 @@ GameObject: - component: {fileID: 93000031149638056} - component: {fileID: 3177825165818360414} m_Layer: 0 - m_Name: BasicBall + m_Name: Basic Ball m_TagString: Ball m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Prefabs/BasicBall.prefab.meta b/Assets/Prefabs/Basic Ball.prefab.meta similarity index 100% rename from Assets/Prefabs/BasicBall.prefab.meta rename to Assets/Prefabs/Basic Ball.prefab.meta diff --git a/Assets/Prefabs/Fruit Ball.prefab b/Assets/Prefabs/Fruit Ball.prefab new file mode 100644 index 0000000..a19da71 --- /dev/null +++ b/Assets/Prefabs/Fruit Ball.prefab @@ -0,0 +1,305 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3086586548818580311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 683092777780772} + - component: {fileID: 7647038298471257326} + - component: {fileID: 528314658997140170} + - component: {fileID: 885296302352173448} + - component: {fileID: 3195328591655437448} + - component: {fileID: -2300392721644857290} + - component: {fileID: 36043693063624440} + m_Layer: 0 + m_Name: Fruit Ball + m_TagString: Ball + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &683092777780772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &7647038298471257326 +SpriteRenderer: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 5 + m_MaskInteraction: 0 + m_Sprite: {fileID: -5535265446822525397, guid: c63692b5893679b34ab40dce0b759a93, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.15, y: 0.15} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_SpriteSortPoint: 0 +--- !u!61 &528314658997140170 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + m_Enabled: 1 + serializedVersion: 3 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_CompositeOperation: 0 + m_CompositeOrder: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 0.15, y: 0.15} + newSize: {x: 0.15, y: 0.15} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Size: {x: 0.15, y: 0.15} + m_EdgeRadius: 0 +--- !u!95 &885296302352173448 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 828e687b877b245d481aab50b9342dec, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!50 &3195328591655437448 +Rigidbody2D: + serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDamping: 0 + m_AngularDamping: 0.05 + m_GravityScale: 0 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!82 &-2300392721644857290 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_Resource: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &36043693063624440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3086586548818580311} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc75c31387827597c81cd1228c0e31ac, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::FruitBall + spawnSound: {fileID: 8300000, guid: 39ac5ebaed90d56bc94a1513178225e2, type: 3} + bounceSound: {fileID: 8300000, guid: a36177a84709d5c51ae647a599008d1d, type: 3} + hitSound: {fileID: 8300000, guid: 0535a1781b9d2e8018f56aa45b71932a, type: 3} diff --git a/Assets/Prefabs/Fruit Ball.prefab.meta b/Assets/Prefabs/Fruit Ball.prefab.meta new file mode 100644 index 0000000..dfd8ad3 --- /dev/null +++ b/Assets/Prefabs/Fruit Ball.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b67974a0c09fbe75aac299e30a0c665b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index d1e0935..cd9e483 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -563,7 +563,7 @@ MonoBehaviour: glassBallPrefab: {fileID: 0} eyeBallPrefab: {fileID: 0} oozeBallPrefab: {fileID: 0} - fruitBallPrefab: {fileID: 0} + fruitBallPrefab: {fileID: 3086586548818580311, guid: b67974a0c09fbe75aac299e30a0c665b, type: 3} gameBoard: {fileID: 297740150} --- !u!4 &240489637 Transform: @@ -574,7 +574,7 @@ Transform: m_GameObject: {fileID: 240489635} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -1.49136, y: 0.30891, z: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] diff --git a/Assets/Scripts/Game/BallSpawner.cs b/Assets/Scripts/Game/BallSpawner.cs index e8896bf..6ebd179 100644 --- a/Assets/Scripts/Game/BallSpawner.cs +++ b/Assets/Scripts/Game/BallSpawner.cs @@ -30,7 +30,8 @@ public class BallSpawner : MonoBehaviour ballQueue.Enqueue(() => SpawnBasicBall()); ballQueue.Enqueue(() => SpawnBasicBall()); ballQueue.Enqueue(() => SpawnBasicBall()); - ballQueue.Enqueue(() => SpawnBasicBall()); + ballQueue.Enqueue(() => SpawnFruitBall()); + ballQueue.Enqueue(() => SpawnFruitBall()); StartCoroutine(SpawnBalls()); } @@ -47,6 +48,18 @@ public class BallSpawner : MonoBehaviour Instantiate(basicBallPrefab, spawnPosition, Quaternion.identity); } + private void SpawnFruitBall() + { + if (fruitBallPrefab == null || gameBoard == null) + { + Debug.LogWarning("BallSpawner: Missing fruitBallPrefab or gameBoard reference."); + return; + } + + Vector3 spawnPosition = GetRandomPositionInsideGameBoard(); + Instantiate(fruitBallPrefab, spawnPosition, Quaternion.identity); + } + private Vector3 GetRandomPositionInsideGameBoard() { Bounds bounds; diff --git a/Assets/Scripts/Game/Balls/FruitBall.cs b/Assets/Scripts/Game/Balls/FruitBall.cs new file mode 100644 index 0000000..9a488a8 --- /dev/null +++ b/Assets/Scripts/Game/Balls/FruitBall.cs @@ -0,0 +1,65 @@ +using UnityEngine; + +public class FruitBall : MonoBehaviour +{ + private Animator animator; + + public AudioClip spawnSound; + + public AudioClip bounceSound; + + public AudioClip hitSound; + + private AudioSource audioSource; + + private Vector2 speed; + + private float speedMultiplier = 1.0f; + + private float speedIncreaseTimer = 0.0f; + + // Start is called once before the first execution of Update after the MonoBehaviour is created + void Start() + { + audioSource = GetComponent(); + animator = GetComponent(); + speed = new Vector2(Mathf.Sign(Random.Range(-1f, 1f)) * 0.0001f, + Mathf.Sign(Random.Range(-1f, 1f)) * 0.0001f); + + audioSource.PlayOneShot(spawnSound); + } + + // Update is called once per frame + void Update() + { + AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0); + + if (stateInfo.IsName("FruitBallMove")) { + transform.Translate(speed * speedMultiplier); + } + + if (speedIncreaseTimer > 0.0f) + { + speedIncreaseTimer -= Time.deltaTime; + if (speedIncreaseTimer <= 0.0f) + { + speedMultiplier = 1.0f; // Reset the speed multiplier to 1x + } + } + } + + void OnCollisionEnter2D(Collision2D collision) + { + if (collision.gameObject.CompareTag("Wall") || collision.gameObject.CompareTag("Ball")) + { + ContactPoint2D contact = collision.GetContact(0); + speed = Vector2.Reflect(speed, contact.normal); + + if (collision.gameObject.CompareTag("Ball")) + { + speedIncreaseTimer = 2.0f; // Reset the timer to 2 seconds + speedMultiplier = 50.0f; // Set the speed multiplier to 7x + } + } + } +} diff --git a/Assets/Scripts/Game/Balls/FruitBall.cs.meta b/Assets/Scripts/Game/Balls/FruitBall.cs.meta new file mode 100644 index 0000000..f687d9f --- /dev/null +++ b/Assets/Scripts/Game/Balls/FruitBall.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fc75c31387827597c81cd1228c0e31ac \ No newline at end of file diff --git a/Assets/Sprites/302.png b/Assets/Sprites/302.png new file mode 100644 index 0000000000000000000000000000000000000000..6c57e931b449b038e230601a088d0a180b116642 GIT binary patch literal 743 zcmV?P)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007 zbV*G`2kHm|0~raqRN0OI00JvXL_t(&-tC&Q4!j7y7N-~d6ZnoY z=2lLlCHx*Hd@&$^2sD4n>bm4aIX8c-1DD~MQjVJO!4+1XtD={f@fK%x5VNah197sS zvvWCrEes3){nBzCU?A}CW`8>s{!{qcoLnPjas)UFbY17wj0ek@xnREEXUND&+aRtk zC*szOn9Gs4ND92PBWlKj^WCLTfH&pCLCT5Mwyq*4Y&SM9C$4c^(yc>FCmm|kj9+iY zOR%>VEO0KER&Q|zyS-(9#<4DMMa(nHgDXo&FTd&VZS}clgknCy$P+yCgCT!eUZbt%27$rGKAyU z$(h1A-5F=?ytbS1vShpcE5ymtTqepeWlbCQpWH_fE@hm-=W@pMPZnq$Oz}I(M9L}W z9GV%Uxm{S!#|Jim%|ytZTw?SabPr+3s+=rdp3(uo<5?=<+R|R7ol7^^*IkC0pAwBP11%pNQ~f>bN?KbN~QX_ Z`Uk%w9v!!*lQ{qY002ovPDHLkV1jvGLH+;$ literal 0 HcmV?d00001 diff --git a/Assets/Sprites/302.png.meta b/Assets/Sprites/302.png.meta new file mode 100644 index 0000000..4676397 --- /dev/null +++ b/Assets/Sprites/302.png.meta @@ -0,0 +1,376 @@ +fileFormatVersion: 2 +guid: 90e0ffb5445f477c1b73f2ea325b508f +TextureImporter: + internalIDToNameTable: + - first: + 213: 2398454704765574305 + second: 302_0 + - first: + 213: -3657361948485569323 + second: 302_1 + - first: + 213: -1304212789136197959 + second: 302_2 + - first: + 213: -2555810029117405087 + second: 302_3 + - first: + 213: 1653591640481058455 + second: 302_4 + - first: + 213: -452809238219045493 + second: 302_5 + - first: + 213: 2421739381380088398 + second: 302_6 + - first: + 213: 8502092797760279452 + second: 302_7 + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: 302_0 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 1ac9a6fa8d5094120800000000000000 + internalID: 2398454704765574305 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_1 + rect: + serializedVersion: 2 + x: 18 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 5d4bc757fa07e3dc0800000000000000 + internalID: -3657361948485569323 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_2 + rect: + serializedVersion: 2 + x: 36 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 9b6f308d06186ede0800000000000000 + internalID: -1304212789136197959 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_3 + rect: + serializedVersion: 2 + x: 54 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 168831dd150f78cd0800000000000000 + internalID: -2555810029117405087 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_4 + rect: + serializedVersion: 2 + x: 72 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 79ecd6ef5dcb2f610800000000000000 + internalID: 1653591640481058455 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_5 + rect: + serializedVersion: 2 + x: 90 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b8540fc956c47b9f0800000000000000 + internalID: -452809238219045493 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_6 + rect: + serializedVersion: 2 + x: 108 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e420cbde22fbb9120800000000000000 + internalID: 2421739381380088398 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_7 + rect: + serializedVersion: 2 + x: 126 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c9398e18a508df570800000000000000 + internalID: 8502092797760279452 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: 302_8 + rect: + serializedVersion: 2 + x: 144 + y: 0 + width: 18 + height: 19 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: a8f587fd0f7db6cfe98d595f8b436011 + internalID: -178209412 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: a053d7e8b5eba33639e37209c832e405 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: + - key: SpriteEditor.SliceSettings + value: '{"sliceOnImport":false,"gridCellCount":{"x":9.0,"y":1.0},"gridSpriteSize":{"x":18.0,"y":19.0},"gridSpriteOffset":{"x":0.0,"y":0.0},"gridSpritePadding":{"x":0.0,"y":0.0},"pivot":{"x":0.5,"y":0.5},"pivotPixels":{"x":0.0,"y":0.0},"autoSlicingMethod":0,"spriteAlignment":0,"pivotUnitMode":0,"slicingType":2,"keepEmptyRects":false,"isAlternate":false}' + nameFileIdTable: + 302_0: 2398454704765574305 + 302_1: -3657361948485569323 + 302_2: -1304212789136197959 + 302_3: -2555810029117405087 + 302_4: 1653591640481058455 + 302_5: -452809238219045493 + 302_6: 2421739381380088398 + 302_7: 8502092797760279452 + 302_8: -178209412 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Sprites/304.png b/Assets/Sprites/304.png new file mode 100644 index 0000000000000000000000000000000000000000..259d8c1d1c5dac6eef771a8348520365c3fa9759 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^{2eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?e4!j%3BL+OK{-+c~oE|1gaz%1%7HD&FPTVlVNt4Cto3h_*yCqvgT#IV|>?nJ1 zP-u(B2?s_41CHxE3R>?;vUt3EqmcGtw`