Trash maze MVP (#79)
Co-authored-by: Michal Pikulski <michal@foolhardyhorizons.com> Co-authored-by: Michal Pikulski <michal.a.pikulski@gmail.com> Reviewed-on: #79
This commit is contained in:
@@ -182,7 +182,7 @@ namespace Core
|
||||
// Register settings with service locator
|
||||
if (playerSettings != null)
|
||||
{
|
||||
ServiceLocator.Register<IPlayerFollowerSettings>(playerSettings);
|
||||
ServiceLocator.Register<IPlayerMovementConfigs>(playerSettings);
|
||||
Logging.Debug("PlayerFollowerSettings registered successfully");
|
||||
}
|
||||
else
|
||||
|
||||
@@ -3,37 +3,79 @@
|
||||
namespace AppleHills.Core.Settings
|
||||
{
|
||||
/// <summary>
|
||||
/// Settings related to player and follower behavior
|
||||
/// Settings related to player and follower behavior.
|
||||
/// Implements IPlayerMovementConfigs to provide separate configurations for different movement contexts.
|
||||
/// </summary>
|
||||
[CreateAssetMenu(fileName = "PlayerFollowerSettings", menuName = "AppleHills/Settings/Player & Follower", order = 1)]
|
||||
public class PlayerFollowerSettings : BaseSettings, IPlayerFollowerSettings
|
||||
public class PlayerFollowerSettings : BaseSettings, IPlayerMovementConfigs
|
||||
{
|
||||
[Header("Default Player Movement (Overworld)")]
|
||||
[SerializeField] private PlayerMovementSettingsData defaultPlayerMovement = new PlayerMovementSettingsData();
|
||||
|
||||
[Header("Trash Maze - Pulver Movement")]
|
||||
[SerializeField] private PlayerMovementSettingsData trashMazeMovement = new PlayerMovementSettingsData();
|
||||
|
||||
[Header("Follower Settings")]
|
||||
[SerializeField] private FollowerSettingsData followerMovement = new FollowerSettingsData();
|
||||
|
||||
// IPlayerMovementConfigs implementation
|
||||
public IPlayerMovementSettings DefaultPlayerMovement => defaultPlayerMovement;
|
||||
public IPlayerMovementSettings TrashMazeMovement => trashMazeMovement;
|
||||
public IFollowerSettings FollowerMovement => followerMovement;
|
||||
|
||||
public override void OnValidate()
|
||||
{
|
||||
base.OnValidate();
|
||||
defaultPlayerMovement?.Validate();
|
||||
trashMazeMovement?.Validate();
|
||||
followerMovement?.Validate();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializable data for player movement settings
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
public class PlayerMovementSettingsData : IPlayerMovementSettings
|
||||
{
|
||||
[Header("Player Settings")]
|
||||
[SerializeField] private float moveSpeed = 5f;
|
||||
[SerializeField] private float moveAcceleration = 10000f;
|
||||
[SerializeField] private float maxAcceleration = 10000f;
|
||||
[SerializeField] private float stopDistance = 0.1f;
|
||||
[SerializeField] private bool useRigidbody = true;
|
||||
[SerializeField] private HoldMovementMode defaultHoldMovementMode = HoldMovementMode.Pathfinding;
|
||||
|
||||
[Header("Follower Settings")]
|
||||
public float MoveSpeed => moveSpeed;
|
||||
public float MaxAcceleration => maxAcceleration;
|
||||
public float StopDistance => stopDistance;
|
||||
public bool UseRigidbody => useRigidbody;
|
||||
public HoldMovementMode DefaultHoldMovementMode => defaultHoldMovementMode;
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
moveSpeed = Mathf.Max(0.1f, moveSpeed);
|
||||
maxAcceleration = Mathf.Max(0.1f, maxAcceleration);
|
||||
stopDistance = Mathf.Max(0.01f, stopDistance);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Serializable data for follower settings
|
||||
/// </summary>
|
||||
[System.Serializable]
|
||||
public class FollowerSettingsData : IFollowerSettings
|
||||
{
|
||||
[SerializeField] private float followDistance = 1.5f;
|
||||
[SerializeField] private float manualMoveSmooth = 8f;
|
||||
[SerializeField] private float thresholdFar = 2.5f;
|
||||
[SerializeField] private float thresholdNear = 0.5f;
|
||||
[SerializeField] private float stopThreshold = 0.1f;
|
||||
|
||||
[Header("Backend Settings")]
|
||||
[Tooltip("Technical parameters, not for design tuning")]
|
||||
[SerializeField] private float followUpdateInterval = 0.1f;
|
||||
[SerializeField] private float followerSpeedMultiplier = 1.2f;
|
||||
[SerializeField] private float heldIconDisplayHeight = 2.0f;
|
||||
|
||||
[Header("Trash Maze Vision")]
|
||||
[SerializeField] private float trashMazeVisionRadius = 8f;
|
||||
|
||||
// IPlayerFollowerSettings implementation
|
||||
public float MoveSpeed => moveSpeed;
|
||||
public float MaxAcceleration => moveAcceleration;
|
||||
public float StopDistance => stopDistance;
|
||||
public bool UseRigidbody => useRigidbody;
|
||||
public HoldMovementMode DefaultHoldMovementMode => defaultHoldMovementMode;
|
||||
public float FollowDistance => followDistance;
|
||||
public float ManualMoveSmooth => manualMoveSmooth;
|
||||
public float ThresholdFar => thresholdFar;
|
||||
@@ -42,14 +84,19 @@ namespace AppleHills.Core.Settings
|
||||
public float FollowUpdateInterval => followUpdateInterval;
|
||||
public float FollowerSpeedMultiplier => followerSpeedMultiplier;
|
||||
public float HeldIconDisplayHeight => heldIconDisplayHeight;
|
||||
|
||||
public override void OnValidate()
|
||||
public float TrashMazeVisionRadius => trashMazeVisionRadius;
|
||||
|
||||
public void Validate()
|
||||
{
|
||||
base.OnValidate();
|
||||
// Validate values
|
||||
moveSpeed = Mathf.Max(0.1f, moveSpeed);
|
||||
followDistance = Mathf.Max(0.1f, followDistance);
|
||||
manualMoveSmooth = Mathf.Max(0.1f, manualMoveSmooth);
|
||||
thresholdFar = Mathf.Max(0.1f, thresholdFar);
|
||||
thresholdNear = Mathf.Max(0.01f, thresholdNear);
|
||||
stopThreshold = Mathf.Max(0.01f, stopThreshold);
|
||||
followUpdateInterval = Mathf.Max(0.01f, followUpdateInterval);
|
||||
followerSpeedMultiplier = Mathf.Max(0.1f, followerSpeedMultiplier);
|
||||
heldIconDisplayHeight = Mathf.Max(0f, heldIconDisplayHeight);
|
||||
trashMazeVisionRadius = Mathf.Max(1f, trashMazeVisionRadius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,18 +14,33 @@ namespace AppleHills.Core.Settings
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Interface for player and follower settings
|
||||
/// Interface for player movement settings (used by all player controllers)
|
||||
/// </summary>
|
||||
public interface IPlayerFollowerSettings
|
||||
public interface IPlayerMovementSettings
|
||||
{
|
||||
// Player settings
|
||||
float MoveSpeed { get; }
|
||||
float MaxAcceleration { get; } // Added new property for player acceleration
|
||||
float MaxAcceleration { get; }
|
||||
float StopDistance { get; }
|
||||
bool UseRigidbody { get; }
|
||||
HoldMovementMode DefaultHoldMovementMode { get; }
|
||||
|
||||
// Follower settings
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Container interface that holds multiple player movement configurations.
|
||||
/// Allows different controllers to use the same base settings interface with different values.
|
||||
/// </summary>
|
||||
public interface IPlayerMovementConfigs
|
||||
{
|
||||
IPlayerMovementSettings DefaultPlayerMovement { get; }
|
||||
IPlayerMovementSettings TrashMazeMovement { get; }
|
||||
IFollowerSettings FollowerMovement { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Interface for follower-specific settings (completely separate from player movement)
|
||||
/// </summary>
|
||||
public interface IFollowerSettings
|
||||
{
|
||||
float FollowDistance { get; }
|
||||
float ManualMoveSmooth { get; }
|
||||
float ThresholdFar { get; }
|
||||
@@ -34,6 +49,7 @@ namespace AppleHills.Core.Settings
|
||||
float FollowUpdateInterval { get; }
|
||||
float FollowerSpeedMultiplier { get; }
|
||||
float HeldIconDisplayHeight { get; }
|
||||
float TrashMazeVisionRadius { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user