Advertisement
Pro_Unit

RewardPresenter Like a Visitor

Feb 18th, 2024
755
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.22 KB | None | 0 0
  1. using System.Collections.Generic;
  2.  
  3. using StatefulUI.Core;
  4.  
  5. namespace Game.RewardsSystem.Presenters
  6. {
  7.     public class RewardPresenter
  8.     {
  9.         private readonly IEnumerable<IRewardPresenter> _visitors;
  10.  
  11.         public RewardPresenter(IEnumerable<IRewardPresenter> visitors) =>
  12.             _visitors = visitors;
  13.  
  14.         public void Display(StatefulComponent view, IReward reward)
  15.         {
  16.             foreach(IRewardPresenter visitor in _visitors)
  17.                 if (visitor.IsMy(reward))
  18.                     visitor.Display(view, reward);
  19.         }
  20.     }
  21.  
  22.     public abstract class RewardPresenter<TRewardType> : IRewardPresenter where TRewardType : IReward
  23.     {
  24.         public bool IsMy<T>(T reward) where T : IReward => reward is TRewardType;
  25.  
  26.         public void Display(StatefulComponent view, IReward reward)
  27.         {
  28.             if (reward is TRewardType typedReward)
  29.                 Display(view, typedReward);
  30.         }
  31.  
  32.         protected abstract void Display(StatefulComponent view, TRewardType reward);
  33.     }
  34. }
  35. using StatefulUI.Core;
  36.  
  37. using StatefulUISupport.Scripts.Components;
  38.  
  39. namespace Game.RewardsSystem.Presenters
  40. {
  41.     public class CardRewardPresenter : RewardPresenter<CollectibleCardsReward>
  42.     {
  43.         protected override void Display(StatefulComponent root, CollectibleCardsReward reward)
  44.         {
  45.             root.SetState(StateRole.Card);
  46.  
  47.             StatefulComponent view = root.GetInnerComponent(InnerComponentRole.Card);
  48.  
  49.             view.SetImageSprite(ImageRole.Icon, reward.Icon);
  50.         }
  51.     }
  52. }
  53. using StatefulUI.Core;
  54.  
  55. using StatefulUISupport.Scripts.Components;
  56.  
  57. namespace Game.RewardsSystem.Presenters
  58. {
  59.     public class CurrencyRewardPresenter : RewardPresenter<CurrencyReward>
  60.     {
  61.         protected override void Display(StatefulComponent root, CurrencyReward reward)
  62.         {
  63.             root.SetState(StateRole.Currency);
  64.  
  65.             StatefulComponent view = root.GetInnerComponent(InnerComponentRole.Currency);
  66.  
  67.             view.GetImage(ImageRole.Icon).SetSprite(reward.Type.Icon);
  68.             view.GetText(TextRole.Value).SetText(reward.Amount.ToString());
  69.         }
  70.     }
  71. }
  72. using Game.RewardsSystem.Factories;
  73.  
  74. using StatefulUI.Core;
  75.  
  76. using StrongExtensions;
  77.  
  78. namespace Game.RewardsSystem.Presenters
  79. {
  80.     public class EmptyRewardPresenter : RewardPresenter<EmptyReward>
  81.     {
  82.         protected override void Display(StatefulComponent view, EmptyReward reward) =>
  83.             view.gameObject.Destroy();
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement