Files
RedHotRoast-ios/Assets/RedHotRoast/Define/Model/Game/RewardData.cs
T

209 lines
4.3 KiB
C#

using FairyGUI;
using System.Linq;
using UnityEngine;
namespace RedHotRoast
{
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<RewardSingleData> rewardDataList;
public RewardDisplayType displayType;
public RewardCondition condition;
private Action<bool> mOnCompleted;
public bool isSingle;
public decimal ctRate;
public RewardData()
{
InitData();
}
public void AddCompleted(Action<bool> onCompleted)
{
mOnCompleted += onCompleted;
}
public void OnCompleted(bool isSuccess)
{
mOnCompleted?.Invoke(isSuccess);
}
public void AddReward(RewardSingleData rewardSingleData)
{
rewardDataList ??= new List<RewardSingleData>();
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<RewardSingleData>();
}
}
public List<RewardSingleData> GetRewardDataList()
{
return rewardDataList;
}
public int GetRewardFlyCount()
{
return GetRewardDataList().Count(rewardSingleData => rewardSingleData.IsCanFly());
}
}
}