Initial Unity project commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using System;
|
||||
using Core.TaskSystem;
|
||||
using Michsky.UI.Reach;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Events;
|
||||
|
||||
namespace UI.Tasks
|
||||
{
|
||||
public class TaskListItemView : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private ButtonManager button;
|
||||
|
||||
[Header("Status Presentation")]
|
||||
[SerializeField] private Sprite todoIcon;
|
||||
[SerializeField] private Sprite completedIcon;
|
||||
[SerializeField] private Sprite expiredIcon;
|
||||
|
||||
[SerializeField] private string todoPrefix = "";
|
||||
[SerializeField] private string completedPrefix = "";
|
||||
[SerializeField] private string expiredPrefix = "";
|
||||
|
||||
TaskEntry task;
|
||||
Action<TaskEntry> onClicked;
|
||||
UnityAction clickAction;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
if (button == null) { button = GetComponent<ButtonManager>(); }
|
||||
}
|
||||
|
||||
public void Bind(TaskEntry task, Action<TaskEntry> onClicked)
|
||||
{
|
||||
this.task = task;
|
||||
this.onClicked = onClicked;
|
||||
|
||||
if (button == null)
|
||||
{
|
||||
Debug.LogError($"{nameof(TaskListItemView)} on '{name}' is missing ButtonManager reference.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (clickAction != null) { button.onClick.RemoveListener(clickAction); }
|
||||
clickAction = HandleClick;
|
||||
button.onClick.AddListener(clickAction);
|
||||
|
||||
ApplyPresentation(task);
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if (button != null && clickAction != null) { button.onClick.RemoveListener(clickAction); }
|
||||
}
|
||||
|
||||
void HandleClick()
|
||||
{
|
||||
onClicked?.Invoke(task);
|
||||
}
|
||||
|
||||
void ApplyPresentation(TaskEntry task)
|
||||
{
|
||||
if (task == null)
|
||||
{
|
||||
if (button != null) { button.SetText(string.Empty); }
|
||||
return;
|
||||
}
|
||||
|
||||
(Sprite icon, string prefix) = task.status switch
|
||||
{
|
||||
TaskStatus.Completed => (completedIcon, completedPrefix),
|
||||
TaskStatus.Expired => (expiredIcon, expiredPrefix),
|
||||
_ => (todoIcon, todoPrefix)
|
||||
};
|
||||
|
||||
button.enableIcon = icon != null;
|
||||
button.buttonIcon = icon;
|
||||
|
||||
string label = string.IsNullOrEmpty(prefix) ? task.ShortName : $"{prefix}{task.ShortName}";
|
||||
button.SetText(label);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user