Fire off impulses on booster taps

This commit is contained in:
Michal Pikulski
2025-11-06 18:57:10 +01:00
parent d01859cec0
commit 1b1ea65744
4 changed files with 102 additions and 9 deletions

View File

@@ -11,6 +11,7 @@ GameObject:
- component: {fileID: 5228380266581535650} - component: {fileID: 5228380266581535650}
- component: {fileID: 7671014600744692184} - component: {fileID: 7671014600744692184}
- component: {fileID: 4981820558408988033} - component: {fileID: 4981820558408988033}
- component: {fileID: 4448843358972162772}
m_Layer: 0 m_Layer: 0
m_Name: BoosterOpeningPage m_Name: BoosterOpeningPage
m_TagString: Untagged m_TagString: Untagged
@@ -82,6 +83,60 @@ MonoBehaviour:
cardSpacing: 50 cardSpacing: 50
cardRevealDelay: 0.5 cardRevealDelay: 0.5
boosterDisappearDuration: 0.5 boosterDisappearDuration: 0.5
impulseSource: {fileID: 4448843358972162772}
--- !u!114 &4448843358972162772
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 498445838423597154}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 180ecf9b41d478f468eb3e9083753217, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineImpulseSource
ImpulseDefinition:
ImpulseChannel: -1
ImpulseShape: 2
CustomImpulseShape:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
ImpulseDuration: 0.2
ImpulseType: 0
DissipationRate: 0.25
RawSignal: {fileID: 0}
AmplitudeGain: 1
FrequencyGain: 1
RepeatMode: 0
Randomize: 1
TimeEnvelope:
AttackShape:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
DecayShape:
serializedVersion: 2
m_Curve: []
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
AttackTime: 0
SustainTime: 0.2
DecayTime: 0.7
ScaleWithImpact: 1
HoldForever: 0
ImpactRadius: 100
DirectionMode: 0
DissipationMode: 2
DissipationDistance: 100
PropagationSpeed: 343
DefaultVelocity: {x: -0.2, y: -1, z: 0}
--- !u!1 &2154569789549533728 --- !u!1 &2154569789549533728
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -450309,6 +450309,7 @@ GameObject:
- component: {fileID: 1137411210} - component: {fileID: 1137411210}
- component: {fileID: 1137411214} - component: {fileID: 1137411214}
- component: {fileID: 1137411213} - component: {fileID: 1137411213}
- component: {fileID: 1137411215}
m_Layer: 0 m_Layer: 0
m_Name: CinemachineCamera m_Name: CinemachineCamera
m_TagString: Untagged m_TagString: Untagged
@@ -450413,6 +450414,30 @@ MonoBehaviour:
RotationDamping: {x: 1, y: 1, z: 1} RotationDamping: {x: 1, y: 1, z: 1}
QuaternionDamping: 1 QuaternionDamping: 1
FollowOffset: {x: 0, y: 0, z: -10} FollowOffset: {x: 0, y: 0, z: -10}
--- !u!114 &1137411215
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1137411209}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 00b2d199b96b516448144ab30fb26aed, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.Cinemachine::Unity.Cinemachine.CinemachineImpulseListener
ApplyAfter: 2
ChannelMask: 1
Gain: 1
Use2DDistance: 0
UseCameraSpace: 1
SignalCombinationMode: 0
ReactionSettings:
m_SecondaryNoise: {fileID: 0}
AmplitudeGain: 1
FrequencyGain: 1
Duration: 1
m_NoiseOffsets: {x: 0, y: 0, z: 0}
--- !u!1 &1137721150 --- !u!1 &1137721150
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -9,12 +9,12 @@
"Unity.InputSystem", "Unity.InputSystem",
"Unity.TextMeshPro", "Unity.TextMeshPro",
"OptimizedRope", "OptimizedRope",
"Unity.Cinemachine",
"AudioSourceEvents", "AudioSourceEvents",
"NewAssembly", "NewAssembly",
"SkiaSharp.Unity", "SkiaSharp.Unity",
"SkiaSharp.Editor", "SkiaSharp.Editor",
"SkiaSharp" "SkiaSharp",
"Unity.Cinemachine"
], ],
"includePlatforms": [], "includePlatforms": [],
"excludePlatforms": [], "excludePlatforms": [],

View File

@@ -1,4 +1,4 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using AppleHills.Data.CardSystem; using AppleHills.Data.CardSystem;
@@ -7,8 +7,10 @@ using Pixelplacement;
using UI.Core; using UI.Core;
using UI.CardSystem.DragDrop; using UI.CardSystem.DragDrop;
using UI.DragAndDrop.Core; using UI.DragAndDrop.Core;
using Unity.Cinemachine;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using UnityEngine.UI;
namespace UI.CardSystem namespace UI.CardSystem
{ {
@@ -35,6 +37,7 @@ namespace UI.CardSystem
[Header("Settings")] [Header("Settings")]
[SerializeField] private float cardRevealDelay = 0.5f; [SerializeField] private float cardRevealDelay = 0.5f;
[SerializeField] private float boosterDisappearDuration = 0.5f; [SerializeField] private float boosterDisappearDuration = 0.5f;
[SerializeField] private CinemachineImpulseSource impulseSource;
private int _availableBoosterCount; private int _availableBoosterCount;
private BoosterPackDraggable _currentBoosterInCenter; private BoosterPackDraggable _currentBoosterInCenter;
@@ -212,12 +215,22 @@ namespace UI.CardSystem
{ {
Debug.Log($"[BoosterOpeningPage] Booster tapped: {currentTaps}/{maxTaps}"); Debug.Log($"[BoosterOpeningPage] Booster tapped: {currentTaps}/{maxTaps}");
// Calculate shake intensity (increases with each tap) // Fire Cinemachine impulse with random velocity (excluding Z)
float shakeIntensity = currentTaps / (float)maxTaps; if (impulseSource != null)
float shakeAmount = 10f + (shakeIntensity * 30f); // 10 to 40 units {
// Generate random velocity vector (X and Y only, Z = 0)
// TODO: Shake visual feedback Vector3 randomVelocity = new Vector3(
// This would be handled by BoosterPackVisual if we add a shake method Random.Range(-1f, 1f),
Random.Range(-1f, 1f),
0f
);
// Normalize to ensure consistent strength
randomVelocity.Normalize();
// Generate the impulse with strength 1 and random velocity
impulseSource.GenerateImpulse(randomVelocity);
}
} }
/// <summary> /// <summary>