MVP of the plane throwing game (#77)
Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com> Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com> Reviewed-on: #77
This commit is contained in:
157
Assets/Scripts/Minigames/Airplane/Settings/AirplaneSettings.cs
Normal file
157
Assets/Scripts/Minigames/Airplane/Settings/AirplaneSettings.cs
Normal file
@@ -0,0 +1,157 @@
|
||||
using AppleHills.Core.Settings;
|
||||
using Common.Input;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Minigames.Airplane.Settings
|
||||
{
|
||||
/// <summary>
|
||||
/// Settings for the airplane minigame.
|
||||
/// Create via Assets > Create > AppleHills > Settings > Airplane
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "AirplaneSettings", menuName = "AppleHills/Settings/Airplane", order = 9)]
|
||||
public class AirplaneSettings : BaseSettings, IAirplaneSettings
|
||||
{
|
||||
[Header("=== AIRPLANE TYPES ===")]
|
||||
|
||||
[Header("Jet Plane")]
|
||||
[SerializeField] private Data.AirplaneTypeConfig jetPlaneConfig = new Data.AirplaneTypeConfig
|
||||
{
|
||||
displayName = "Jet Plane",
|
||||
abilityType = Data.AirplaneAbilityType.Jet
|
||||
};
|
||||
|
||||
[SerializeField] private Data.JetAbilityConfig jetAbilityConfig = new Data.JetAbilityConfig();
|
||||
|
||||
[Header("Bobbing Plane")]
|
||||
[SerializeField] private Data.AirplaneTypeConfig bobbingPlaneConfig = new Data.AirplaneTypeConfig
|
||||
{
|
||||
displayName = "Bobbing Plane",
|
||||
abilityType = Data.AirplaneAbilityType.Bobbing
|
||||
};
|
||||
|
||||
[SerializeField] private Data.BobbingAbilityConfig bobbingAbilityConfig = new Data.BobbingAbilityConfig();
|
||||
|
||||
[Header("Drop Plane")]
|
||||
[SerializeField] private Data.AirplaneTypeConfig dropPlaneConfig = new Data.AirplaneTypeConfig
|
||||
{
|
||||
displayName = "Drop Plane",
|
||||
abilityType = Data.AirplaneAbilityType.Drop
|
||||
};
|
||||
|
||||
[SerializeField] private Data.DropAbilityConfig dropAbilityConfig = new Data.DropAbilityConfig();
|
||||
|
||||
[Header("Default Selection")]
|
||||
[Tooltip("Which airplane type is selected by default")]
|
||||
[SerializeField] private Data.AirplaneAbilityType defaultAirplaneType = Data.AirplaneAbilityType.Jet;
|
||||
|
||||
[Header("=== SLINGSHOT ===")]
|
||||
[SerializeField] private SlingshotConfig slingshotSettings = new SlingshotConfig
|
||||
{
|
||||
maxDragDistance = 5f,
|
||||
baseLaunchForce = 20f,
|
||||
minForceMultiplier = 0.1f,
|
||||
maxForceMultiplier = 1f,
|
||||
trajectoryPoints = 20,
|
||||
trajectoryTimeStep = 0.1f,
|
||||
trajectoryLockDuration = 0f, // No locking for airplane
|
||||
autoRegisterInput = true // Direct registration
|
||||
};
|
||||
|
||||
[Header("Flight Settings")]
|
||||
[Tooltip("Mass of the airplane")]
|
||||
[SerializeField] private float airplaneMass = 1f;
|
||||
|
||||
[Tooltip("Maximum flight time before timeout (seconds)")]
|
||||
[SerializeField] private float maxFlightTime = 10f;
|
||||
|
||||
[Header("Timing")]
|
||||
[Tooltip("Duration of intro sequence (seconds)")]
|
||||
[SerializeField] private float introDuration = 1f;
|
||||
|
||||
[Tooltip("Duration of person introduction (seconds)")]
|
||||
[SerializeField] private float personIntroDuration = 1f;
|
||||
|
||||
[Tooltip("Duration of result evaluation (seconds)")]
|
||||
[SerializeField] private float evaluationDuration = 1f;
|
||||
|
||||
[Header("Spawn System")]
|
||||
[Tooltip("X position where dynamic spawning begins")]
|
||||
[SerializeField] private float dynamicSpawnThreshold = 10f;
|
||||
|
||||
[Tooltip("Minimum random distance for target spawn")]
|
||||
[SerializeField] private float targetMinDistance = 30f;
|
||||
|
||||
[Tooltip("Maximum random distance for target spawn")]
|
||||
[SerializeField] private float targetMaxDistance = 50f;
|
||||
|
||||
[Tooltip("Minimum time interval between object spawns (seconds)")]
|
||||
[SerializeField] private float objectSpawnMinInterval = 1f;
|
||||
|
||||
[Tooltip("Maximum time interval between object spawns (seconds)")]
|
||||
[SerializeField] private float objectSpawnMaxInterval = 3f;
|
||||
|
||||
[Tooltip("Ratio of positive to negative objects (0 = all negative, 1 = all positive)")]
|
||||
[Range(0f, 1f)]
|
||||
[SerializeField] private float positiveNegativeRatio = 0.5f;
|
||||
|
||||
[Tooltip("Distance ahead of plane to spawn objects")]
|
||||
[SerializeField] private float spawnDistanceAhead = 15f;
|
||||
|
||||
[Tooltip("Distance interval for ground tile spawning")]
|
||||
[SerializeField] private float groundSpawnInterval = 5f;
|
||||
|
||||
[Header("Ground Snapping")]
|
||||
[Tooltip("Layer for ground detection (objects will snap to this)")]
|
||||
[Layer]
|
||||
[SerializeField] private int groundLayer = 0; // Default layer
|
||||
|
||||
[Tooltip("Maximum distance to raycast for ground")]
|
||||
[SerializeField] private float maxGroundRaycastDistance = 50f;
|
||||
|
||||
[Tooltip("Default Y offset for objects if no ground found")]
|
||||
[SerializeField] private float defaultObjectYOffset = 0f;
|
||||
|
||||
[Header("Debug")]
|
||||
[Tooltip("Show debug logs in console")]
|
||||
[SerializeField] private bool showDebugLogs;
|
||||
|
||||
#region IAirplaneSettings Implementation
|
||||
|
||||
public Data.AirplaneTypeConfig GetAirplaneConfig(Data.AirplaneAbilityType type)
|
||||
{
|
||||
return type switch
|
||||
{
|
||||
Data.AirplaneAbilityType.Jet => jetPlaneConfig,
|
||||
Data.AirplaneAbilityType.Bobbing => bobbingPlaneConfig,
|
||||
Data.AirplaneAbilityType.Drop => dropPlaneConfig,
|
||||
_ => jetPlaneConfig // Fallback to jet
|
||||
};
|
||||
}
|
||||
|
||||
public Data.JetAbilityConfig JetAbilityConfig => jetAbilityConfig;
|
||||
public Data.BobbingAbilityConfig BobbingAbilityConfig => bobbingAbilityConfig;
|
||||
public Data.DropAbilityConfig DropAbilityConfig => dropAbilityConfig;
|
||||
public Data.AirplaneAbilityType DefaultAirplaneType => defaultAirplaneType;
|
||||
public SlingshotConfig SlingshotSettings => slingshotSettings;
|
||||
public float AirplaneMass => airplaneMass;
|
||||
public float MaxFlightTime => maxFlightTime;
|
||||
public float IntroDuration => introDuration;
|
||||
public float PersonIntroDuration => personIntroDuration;
|
||||
public float EvaluationDuration => evaluationDuration;
|
||||
public float DynamicSpawnThreshold => dynamicSpawnThreshold;
|
||||
public float TargetMinDistance => targetMinDistance;
|
||||
public float TargetMaxDistance => targetMaxDistance;
|
||||
public float ObjectSpawnMinInterval => objectSpawnMinInterval;
|
||||
public float ObjectSpawnMaxInterval => objectSpawnMaxInterval;
|
||||
public float PositiveNegativeRatio => positiveNegativeRatio;
|
||||
public float SpawnDistanceAhead => spawnDistanceAhead;
|
||||
public float GroundSpawnInterval => groundSpawnInterval;
|
||||
public int GroundLayer => groundLayer;
|
||||
public float MaxGroundRaycastDistance => maxGroundRaycastDistance;
|
||||
public float DefaultObjectYOffset => defaultObjectYOffset;
|
||||
public bool ShowDebugLogs => showDebugLogs;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1c277e2fec3d42e2b3b0bed1b8a33beb
|
||||
timeCreated: 1764851415
|
||||
Reference in New Issue
Block a user