113 lines
4.2 KiB
C#
113 lines
4.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using SharpUI.Source.Client.UI.User.CharacterSelect.CharacterList;
|
|
using SharpUI.Source.Common.UI.Base.Component;
|
|
using SharpUI.Source.Common.UI.Elements.List;
|
|
using SharpUI.Source.Common.UI.Elements.List.Selection;
|
|
using SharpUI.Source.Common.UI.Elements.TooltipInfo;
|
|
using SharpUI.Source.Common.Util.Extensions;
|
|
using SharpUI.Source.Data.Model.Character;
|
|
using TMPro;
|
|
using UniRx;
|
|
using UniRx.Triggers;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace SharpUI.Source.Client.UI.User.CharacterSelect
|
|
{
|
|
public class CharacterSelectComponent : MonoBehaviourComponent<CharacterSelectComponent, CharacterSelectPresenter>,
|
|
ICharacterSelectComponent
|
|
{
|
|
[SerializeField] public GameObject tooltipPrefab;
|
|
[SerializeField] public Button buttonBack;
|
|
[SerializeField] public Button buttonEnterWorld;
|
|
[SerializeField] public Button buttonCreateNewCharacter;
|
|
[SerializeField] public Button buttonDeleteCharacter;
|
|
[SerializeField] public ListView characterListView;
|
|
[SerializeField] public TMP_Text deleteCharacterInfoText;
|
|
|
|
private CharacterListAdapter _adapter;
|
|
private ISelectionChangeListener<Character> _selectionChangeListener;
|
|
private ITooltip _tooltipDeleteCharacter;
|
|
|
|
protected override CharacterSelectComponent GetComponent() => this;
|
|
|
|
private ICharacterSelectPresenter _presenter;
|
|
|
|
public void SetupComponent()
|
|
{
|
|
_presenter = GetPresenter();
|
|
|
|
_tooltipDeleteCharacter = Instantiate(tooltipPrefab).GetComponent<ITooltip>();
|
|
_tooltipDeleteCharacter.SetShowDelayTimeMillis(450);
|
|
_tooltipDeleteCharacter.OffsetPointerByPercentage(80f);
|
|
_tooltipDeleteCharacter.BindContent(deleteCharacterInfoText.GetComponent<RectTransform>());
|
|
|
|
_adapter = characterListView.GetComponent<CharacterListAdapter>();
|
|
_selectionChangeListener = _adapter.GetSelectionChangeListener();
|
|
|
|
_selectionChangeListener.ObserveItemSelected()
|
|
.SubscribeWith(this, _presenter.OnCharacterSelected);
|
|
|
|
_selectionChangeListener.ObserveSelectionChange()
|
|
.SubscribeWith(this, _ =>
|
|
_presenter.OnCharacterSelectionChanged(_adapter.HasSelectedItems()));
|
|
|
|
buttonBack.OnClickAsObservable()
|
|
.SubscribeWith(this, _ => _presenter.OnBack());
|
|
|
|
buttonEnterWorld.OnClickAsObservable()
|
|
.SubscribeWith(this, _ => _presenter.OnEnterWorld());
|
|
|
|
buttonCreateNewCharacter.OnClickAsObservable()
|
|
.SubscribeWith(this, _ => _presenter.OnCreateNewCharacter());
|
|
|
|
buttonDeleteCharacter.OnClickAsObservable()
|
|
.SubscribeWith(this, _ =>
|
|
{
|
|
var character = _adapter.GetSelectedData().First();
|
|
_presenter.OnDeleteCharacter(character);
|
|
});
|
|
|
|
buttonDeleteCharacter.OnPointerEnterAsObservable().SubscribeWith(this,
|
|
_ => _presenter.OnPointerEnteredDeleteCharacterButton());
|
|
buttonDeleteCharacter.OnPointerExitAsObservable().SubscribeWith(this,
|
|
_ => _presenter.OnPointerExitedDeleteCharacterButton());
|
|
}
|
|
|
|
public void DeleteSelected()
|
|
{
|
|
_adapter.RemoveSelected();
|
|
}
|
|
|
|
public void SetDeleteButtonEnabled(bool deleteEnabled)
|
|
{
|
|
buttonDeleteCharacter.interactable = deleteEnabled;
|
|
}
|
|
|
|
public void SetEnterWorldEnabled(bool enterEnabled)
|
|
{
|
|
buttonEnterWorld.interactable = enterEnabled;
|
|
}
|
|
|
|
public void ShowCharacterDetails(Character character)
|
|
{
|
|
// Show character details
|
|
}
|
|
|
|
public void ListCharacters(List<Character> characters)
|
|
{
|
|
_adapter.SetCharactersAndNotify(characters);
|
|
}
|
|
|
|
public void ShowDeleteCharacterTooltip()
|
|
{
|
|
_tooltipDeleteCharacter.ShowBelow(buttonDeleteCharacter.GetComponent<RectTransform>());
|
|
}
|
|
|
|
public void HideDeleteCharacterTooltip()
|
|
{
|
|
_tooltipDeleteCharacter.Hide();
|
|
}
|
|
}
|
|
} |