Working MVP code for Valentines
This commit is contained in:
151
Assets/Scripts/Minigames/Airplane/Targets/AirplaneTarget.cs
Normal file
151
Assets/Scripts/Minigames/Airplane/Targets/AirplaneTarget.cs
Normal file
@@ -0,0 +1,151 @@
|
||||
using System;
|
||||
using Core;
|
||||
using Core.Lifecycle;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Minigames.Airplane.Targets
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a target in the airplane minigame.
|
||||
/// Detects airplane collisions and can be highlighted when active.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
public class AirplaneTarget : ManagedBehaviour
|
||||
{
|
||||
#region Events
|
||||
|
||||
/// <summary>
|
||||
/// Fired when this target is hit. Parameters: (AirplaneTarget target, GameObject airplane)
|
||||
/// </summary>
|
||||
public event Action<AirplaneTarget, GameObject> OnTargetHit;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Inspector Properties
|
||||
|
||||
[Header("Target Configuration")]
|
||||
[Tooltip("Name of this target (for validation)")]
|
||||
[SerializeField] private string targetName = "Target";
|
||||
|
||||
[Header("Visual Feedback")]
|
||||
[Tooltip("Sprite renderer for visual feedback (optional)")]
|
||||
[SerializeField] private SpriteRenderer spriteRenderer;
|
||||
|
||||
[Tooltip("Color when target is active")]
|
||||
[SerializeField] private Color activeColor = Color.yellow;
|
||||
|
||||
[Tooltip("Color when target is inactive")]
|
||||
[SerializeField] private Color inactiveColor = Color.white;
|
||||
|
||||
[Header("Debug")]
|
||||
[SerializeField] private bool showDebugLogs = false;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string TargetName => targetName;
|
||||
|
||||
private bool _isActive = false;
|
||||
public bool IsActive => _isActive;
|
||||
|
||||
#endregion
|
||||
|
||||
#region State
|
||||
|
||||
private Collider2D _targetCollider;
|
||||
private Color _originalColor;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Lifecycle
|
||||
|
||||
internal override void OnManagedAwake()
|
||||
{
|
||||
base.OnManagedAwake();
|
||||
|
||||
// Cache components
|
||||
_targetCollider = GetComponent<Collider2D>();
|
||||
|
||||
// Configure collider as trigger
|
||||
if (_targetCollider != null)
|
||||
{
|
||||
_targetCollider.isTrigger = true;
|
||||
}
|
||||
|
||||
// Cache sprite renderer if not assigned
|
||||
if (spriteRenderer == null)
|
||||
{
|
||||
spriteRenderer = GetComponent<SpriteRenderer>();
|
||||
}
|
||||
|
||||
// Store original color
|
||||
if (spriteRenderer != null)
|
||||
{
|
||||
_originalColor = spriteRenderer.color;
|
||||
}
|
||||
}
|
||||
|
||||
internal override void OnManagedStart()
|
||||
{
|
||||
base.OnManagedStart();
|
||||
|
||||
// Start as inactive
|
||||
SetAsActiveTarget(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Active State
|
||||
|
||||
/// <summary>
|
||||
/// Set this target as active (highlighted) or inactive
|
||||
/// </summary>
|
||||
public void SetAsActiveTarget(bool active)
|
||||
{
|
||||
_isActive = active;
|
||||
|
||||
// Update visual feedback
|
||||
if (spriteRenderer != null)
|
||||
{
|
||||
spriteRenderer.color = active ? activeColor : inactiveColor;
|
||||
}
|
||||
|
||||
if (showDebugLogs) Logging.Debug($"[AirplaneTarget] {targetName} set to {(active ? "active" : "inactive")}");
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Collision Detection
|
||||
|
||||
/// <summary>
|
||||
/// Detect when airplane enters trigger
|
||||
/// </summary>
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
// Check if it's an airplane
|
||||
var airplane = other.GetComponent<Core.AirplaneController>();
|
||||
if (airplane != null)
|
||||
{
|
||||
if (showDebugLogs) Logging.Debug($"[AirplaneTarget] {targetName} hit by airplane: {other.gameObject.name}");
|
||||
|
||||
OnTargetHit?.Invoke(this, other.gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Reset target to original state
|
||||
/// </summary>
|
||||
public void Reset()
|
||||
{
|
||||
SetAsActiveTarget(false);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user