Stash work on mingame

This commit is contained in:
Michal Pikulski
2025-11-19 08:30:47 +01:00
parent 235fa04eba
commit 359e0e35bd
43 changed files with 2739 additions and 1 deletions

View File

@@ -0,0 +1,97 @@
using AppleHills.Core.Settings;
using Minigames.CardSorting.Data;
using UnityEngine;
namespace Core.Settings
{
/// <summary>
/// Settings for Card Sorting minigame.
/// Follows DivingMinigameSettings pattern.
/// </summary>
[CreateAssetMenu(fileName = "CardSortingSettings", menuName = "AppleHills/Settings/CardSorting", order = 4)]
public class CardSortingSettings : BaseSettings, ICardSortingSettings
{
[Header("Timing")]
[Tooltip("Total game duration in seconds")]
[SerializeField] private float gameDuration = 120f;
[Tooltip("Initial time between item spawns (seconds)")]
[SerializeField] private float initialSpawnInterval = 2f;
[Tooltip("Minimum time between item spawns as difficulty increases (seconds)")]
[SerializeField] private float minimumSpawnInterval = 0.5f;
[Header("Conveyor Speed")]
[Tooltip("Initial belt movement speed")]
[SerializeField] private float initialBeltSpeed = 1f;
[Tooltip("Maximum belt movement speed")]
[SerializeField] private float maxBeltSpeed = 3f;
[Tooltip("Curve for difficulty progression (X=time%, Y=speed multiplier)")]
[SerializeField] private AnimationCurve speedCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
[Header("Item Pools")]
[Tooltip("Garbage items that can spawn (banana peels, cans, receipts, etc.)")]
[SerializeField] private GarbageItemDefinition[] garbageItems = new GarbageItemDefinition[0];
[Header("Spawn Weights")]
[Tooltip("Weight for spawning normal rarity cards")]
[Range(0, 100)] [SerializeField] private float normalCardWeight = 40f;
[Tooltip("Weight for spawning rare rarity cards")]
[Range(0, 100)] [SerializeField] private float rareCardWeight = 30f;
[Tooltip("Weight for spawning legendary rarity cards")]
[Range(0, 100)] [SerializeField] private float legendCardWeight = 20f;
[Tooltip("Weight for spawning garbage items")]
[Range(0, 100)] [SerializeField] private float garbageWeight = 10f;
[Header("Scoring")]
[Tooltip("Points awarded for correct sort")]
[SerializeField] private int correctSortPoints = 10;
[Tooltip("Points deducted for incorrect sort")]
[SerializeField] private int incorrectSortPenalty = -5;
[Tooltip("Points deducted when item falls off belt")]
[SerializeField] private int missedItemPenalty = -3;
[Header("Rewards")]
[Tooltip("Booster packs awarded per correct sort")]
[SerializeField] private int boosterPacksPerCorrectItem = 1;
// Interface implementation
public float GameDuration => gameDuration;
public float InitialSpawnInterval => initialSpawnInterval;
public float MinimumSpawnInterval => minimumSpawnInterval;
public float InitialBeltSpeed => initialBeltSpeed;
public float MaxBeltSpeed => maxBeltSpeed;
public AnimationCurve SpeedCurve => speedCurve;
public GarbageItemDefinition[] GarbageItems => garbageItems;
public float NormalCardWeight => normalCardWeight;
public float RareCardWeight => rareCardWeight;
public float LegendCardWeight => legendCardWeight;
public float GarbageWeight => garbageWeight;
public int CorrectSortPoints => correctSortPoints;
public int IncorrectSortPenalty => incorrectSortPenalty;
public int MissedItemPenalty => missedItemPenalty;
public int BoosterPacksPerCorrectItem => boosterPacksPerCorrectItem;
public override void OnValidate()
{
base.OnValidate();
gameDuration = Mathf.Max(1f, gameDuration);
initialSpawnInterval = Mathf.Max(0.1f, initialSpawnInterval);
minimumSpawnInterval = Mathf.Max(0.1f, minimumSpawnInterval);
minimumSpawnInterval = Mathf.Min(minimumSpawnInterval, initialSpawnInterval);
initialBeltSpeed = Mathf.Max(0.1f, initialBeltSpeed);
maxBeltSpeed = Mathf.Max(initialBeltSpeed, maxBeltSpeed);
correctSortPoints = Mathf.Max(0, correctSortPoints);
boosterPacksPerCorrectItem = Mathf.Max(0, boosterPacksPerCorrectItem);
}
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a0fd5f8ab5d74b12968501dd4e3cc416
timeCreated: 1763461789

View File

@@ -0,0 +1,40 @@
using Minigames.CardSorting.Data;
using UnityEngine;
namespace Core.Settings
{
/// <summary>
/// Settings interface for Card Sorting minigame.
/// Accessed via GameManager.GetSettingsObject&lt;ICardSortingSettings&gt;()
/// </summary>
public interface ICardSortingSettings
{
// Timing
float GameDuration { get; }
float InitialSpawnInterval { get; }
float MinimumSpawnInterval { get; }
// Conveyor Speed
float InitialBeltSpeed { get; }
float MaxBeltSpeed { get; }
AnimationCurve SpeedCurve { get; }
// Item Pools
GarbageItemDefinition[] GarbageItems { get; }
// Spawn Weights
float NormalCardWeight { get; }
float RareCardWeight { get; }
float LegendCardWeight { get; }
float GarbageWeight { get; }
// Scoring
int CorrectSortPoints { get; }
int IncorrectSortPenalty { get; }
int MissedItemPenalty { get; }
// Rewards
int BoosterPacksPerCorrectItem { get; }
}
}

View File

@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 646b90dfa92640e59430f871037affea
timeCreated: 1763461774