using FairyGUI; using System.Linq; using UnityEngine; namespace BallKingdomCrush { using System; using System.Collections.Generic; [Flags] public enum RewardDisplayType { None = 0b_0000_0000, Number = 0b_0000_0001, ValueChange = 0b_0000_0010, Dialog = 0b_0000_0100, RewardFly = 0b_0000_1000, } public enum RewardOrigin { None, GameWin, H5Icon, LuckyWheel, SignIn, AdTask, Play, Achievement, H5Fly101, H5Fly102, Passview, } public enum RewardCondition { None, AD, } public class RewardSingleData { public int id; public int type; public decimal value; public decimal multiRate; public decimal rate; public decimal GetTotalValue() { return Math.Round(value * rate, 2); } public RewardOrigin origin; public Vector2 startPosition; public Vector2 endPosition; public int index; public RewardSingleData(int id, decimal value, RewardOrigin origin, int index = 0) { this.id = id; this.value = value; this.origin = origin; this.index = index; InitData(); } private void InitData() { InitRate(); InitMultiRate(); } private void InitRate() { if (rate == 0) { rate = 1; } } private void InitMultiRate() { if (multiRate == 0) { multiRate = 1; } } public void InitFlyPosition() { InitStartPosition(); InitEndPosition(); } private void InitStartPosition() { if (startPosition == Vector2.zero) { startPosition = GRoot.inst.size / 2; } } private void InitEndPosition() { if (endPosition == Vector2.zero && id != 0) { var itemUI = GameHelper.GetItemUI(id); var gObject = itemUI?.GetChildAt(1); if (gObject != null) { endPosition = itemUI.LocalToRoot((Vector2)gObject.position + gObject.size / 2, GRoot.inst); } } } public bool IsCanFly() { return IsCanFly(id); } public static bool IsCanFly(int id) { return id == 101 || id == 102 || id == 111; } } public class RewardData { private List rewardDataList; public RewardDisplayType displayType; public RewardCondition condition; private Action mOnCompleted; public bool isSingle; public decimal ctRate; public RewardData() { InitData(); } public void AddCompleted(Action onCompleted) { mOnCompleted += onCompleted; } public void OnCompleted(bool isSuccess) { mOnCompleted?.Invoke(isSuccess); } public void AddReward(RewardSingleData rewardSingleData) { rewardDataList ??= new List(); var isNeedAdd = true; foreach (var data in rewardDataList.Where(data => data.id == rewardSingleData.id)) { data.value += rewardSingleData.value; isNeedAdd = false; break; } if (isNeedAdd) { rewardDataList.Add(rewardSingleData); } } private void InitData() { if (rewardDataList != null) { rewardDataList.Clear(); } else { rewardDataList = new List(); } } public List GetRewardDataList() { return rewardDataList; } public int GetRewardFlyCount() { return GetRewardDataList().Count(rewardSingleData => rewardSingleData.IsCanFly()); } } }