From b4b17c18ed9fca557f002aa7c4e8bbd440989485 Mon Sep 17 00:00:00 2001 From: Michal Pikulski Date: Fri, 21 Nov 2025 09:22:06 +0100 Subject: [PATCH] Some b ase obstacle and poop spawning --- .../AssetGroups/BlokkemonCards.asset | 6 - Assets/External/Placeholders/bird_poop.png | Bin 0 -> 15056 bytes .../External/Placeholders/bird_poop.png.meta | 195 ++++++ Assets/Prefabs/Minigames/BirdPoop/Poop.prefab | 180 ++++++ .../Minigames/BirdPoop/Poop.prefab.meta | 7 + .../ApplehillsFont/AppleHills01 SDF.asset | 602 +++++++++++++++++- Assets/Scenes/MiniGames/BirdPoop.unity | 155 ++++- .../BirdPooper/BirdPooperGameManager.cs | 52 +- .../Minigames/BirdPooper/PoopProjectile.cs | 115 ++++ .../BirdPooper/PoopProjectile.cs.meta | 3 + Assets/Settings/BirdPooperSettings.asset | 4 +- 11 files changed, 1297 insertions(+), 22 deletions(-) create mode 100644 Assets/External/Placeholders/bird_poop.png create mode 100644 Assets/External/Placeholders/bird_poop.png.meta create mode 100644 Assets/Prefabs/Minigames/BirdPoop/Poop.prefab create mode 100644 Assets/Prefabs/Minigames/BirdPoop/Poop.prefab.meta create mode 100644 Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs create mode 100644 Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs.meta diff --git a/Assets/AddressableAssetsData/AssetGroups/BlokkemonCards.asset b/Assets/AddressableAssetsData/AssetGroups/BlokkemonCards.asset index d8e9e749..e92adc01 100644 --- a/Assets/AddressableAssetsData/AssetGroups/BlokkemonCards.asset +++ b/Assets/AddressableAssetsData/AssetGroups/BlokkemonCards.asset @@ -123,12 +123,6 @@ MonoBehaviour: m_SerializedLabels: - BlokkemonCard FlaggedDuringContentUpdateRestriction: 0 - - m_GUID: c73a9b19b3208d940b9fae7360287a48 - m_Address: Assets/Data/Cards/Card_New Card.asset - m_ReadOnly: 0 - m_SerializedLabels: - - BlokkemonCard - FlaggedDuringContentUpdateRestriction: 0 - m_GUID: cd07dfe9285ad414a9b3bd71829b1c41 m_Address: Assets/Data/Cards/Card_New Card.asset m_ReadOnly: 0 diff --git a/Assets/External/Placeholders/bird_poop.png b/Assets/External/Placeholders/bird_poop.png new file mode 100644 index 0000000000000000000000000000000000000000..6528786b2056adfe335e070e43a2fd13548c23f0 GIT binary patch literal 15056 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 private void HandlePlayerDamaged() { - Debug.Log("[BirdPooperGameManager] Player damaged - showing game over screen"); + if (isGameOver) return; + + isGameOver = true; + Debug.Log($"[BirdPooperGameManager] Player damaged - Game Over! Targets Hit: {targetsHit}"); // Stop spawning obstacles if (obstacleSpawner != null) @@ -113,6 +130,39 @@ namespace Minigames.BirdPooper Debug.LogError("[BirdPooperGameManager] GameOverScreen reference missing!"); } } + + /// + /// Spawns a poop projectile at the player's current position. + /// Called by UI button OnClick event. + /// + public void SpawnPoop() + { + if (isGameOver || player == null || poopPrefab == null) + return; + + Vector3 spawnPosition = player.transform.position; + Instantiate(poopPrefab, spawnPosition, Quaternion.identity); + + Debug.Log($"[BirdPooperGameManager] Spawned poop at {spawnPosition}"); + } + + /// + /// Called when a target is successfully hit by poop (Phase 5). + /// + public void OnTargetHit() + { + if (isGameOver) return; + + targetsHit++; + Debug.Log($"[BirdPooperGameManager] Target Hit! Total: {targetsHit}"); + } + + #region Public Accessors + + public bool IsGameOver => isGameOver; + public int TargetsHit => targetsHit; + + #endregion } } diff --git a/Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs b/Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs new file mode 100644 index 00000000..118a66fd --- /dev/null +++ b/Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs @@ -0,0 +1,115 @@ +using Core; +using Core.Lifecycle; +using Core.Settings; +using UnityEngine; + +namespace Minigames.BirdPooper +{ + /// + /// Poop projectile that falls straight down with manual gravity. + /// Destroys when off-screen or hitting targets (Phase 5). + /// + [RequireComponent(typeof(Rigidbody2D))] + [RequireComponent(typeof(Collider2D))] + public class PoopProjectile : ManagedBehaviour + { + private IBirdPooperSettings settings; + private float verticalVelocity; // Current downward velocity + private const float GravityAcceleration = 20f; // Gravity acceleration (units/s²) + + internal override void OnManagedAwake() + { + base.OnManagedAwake(); + + // Load settings + settings = GameManager.GetSettingsObject(); + if (settings == null) + { + Debug.LogError("[PoopProjectile] BirdPooperSettings not found!"); + Destroy(gameObject); + return; + } + + // Initialize velocity with settings speed as starting velocity + verticalVelocity = settings.PoopFallSpeed; + + // Verify Rigidbody2D configuration + Rigidbody2D rb = GetComponent(); + if (rb != null) + { + rb.bodyType = RigidbodyType2D.Dynamic; + rb.gravityScale = 0f; // Manual gravity + rb.collisionDetectionMode = CollisionDetectionMode2D.Continuous; + } + + // Verify collider is trigger (for target detection in Phase 5) + Collider2D col = GetComponent(); + if (col != null && !col.isTrigger) + { + Debug.LogWarning("[PoopProjectile] Collider should be set as Trigger for target detection!"); + } + } + + private void Update() + { + if (settings != null) + { + ApplyGravity(); + FallDown(); + CheckBounds(); + } + } + + /// + /// Apply gravity acceleration to velocity. + /// + private void ApplyGravity() + { + // Increase downward velocity over time (gravity acceleration) + verticalVelocity += GravityAcceleration * Time.deltaTime; + } + + /// + /// Manual downward movement using current velocity. + /// + private void FallDown() + { + // Move straight down at current velocity + transform.position += Vector3.down * verticalVelocity * Time.deltaTime; + } + + /// + /// Check if projectile is off-screen and should be destroyed. + /// + private void CheckBounds() + { + if (transform.position.y < settings.PoopDestroyYPosition) + { + Destroy(gameObject); + } + } + + /// + /// Trigger collision detection for targets (Phase 5). + /// TODO: Uncomment when Target.cs is implemented in Phase 5 + /// + private void OnTriggerEnter2D(Collider2D other) + { + // Phase 5 integration - currently commented out + /* + if (other.CompareTag("Target")) + { + // Notify target it was hit + Target target = other.GetComponent(); + if (target != null) + { + target.OnHitByProjectile(); + } + + Destroy(gameObject); + } + */ + } + } +} + diff --git a/Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs.meta b/Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs.meta new file mode 100644 index 00000000..907a8a00 --- /dev/null +++ b/Assets/Scripts/Minigames/BirdPooper/PoopProjectile.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f2c53b7e2a0042efa4c6679b992b6b6c +timeCreated: 1763711288 \ No newline at end of file diff --git a/Assets/Settings/BirdPooperSettings.asset b/Assets/Settings/BirdPooperSettings.asset index ce77fa9b..01c8f989 100644 --- a/Assets/Settings/BirdPooperSettings.asset +++ b/Assets/Settings/BirdPooperSettings.asset @@ -17,6 +17,8 @@ MonoBehaviour: maxFallSpeed: 150 minY: -15 maxY: 15 + maxRotationAngle: 30 + rotationSpeed: 8 obstacleMoveSpeed: 5 obstacleSpawnInterval: 2 obstacleSpawnXPosition: 12 @@ -24,4 +26,4 @@ MonoBehaviour: obstacleMinSpawnY: -3 obstacleMaxSpawnY: 3 poopFallSpeed: 10 - poopDestroyYPosition: -10 + poopDestroyYPosition: -20