//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Thursday, September 27, 2018
|
//--------------------------------------------------------
|
|
using LitJson;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
namespace vnxbqy.UI
|
{
|
|
|
public class WheelOfFortuneModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
{
|
public class AngleClass
|
{
|
public float AngleStart;
|
public float AngleEnd;
|
}
|
|
public int Lattice = -1;//格子
|
public int Number = 0;//次数(当日已转次数)
|
public int NeedJade = 0;//需要仙玉
|
public float AngleSave = 0f;//角度记录
|
public Dictionary<int, AngleClass> AngleDic = new Dictionary<int, AngleClass>();
|
private double[][] AngleList;
|
public event Action<float> WheelOfFortuneUpdate;
|
public event Action<int> onStateUpdate;
|
|
private string StrKey = string.Empty;
|
private bool IsOk = false;
|
private const int Redpoint_key1 = 20916;//幸运转盘红点
|
public Redpoint redPointStre1 = new Redpoint(209, Redpoint_key1);
|
VipModel m_Vipmodel;
|
VipModel vipmodel { get { return m_Vipmodel ?? (m_Vipmodel = ModelCenter.Instance.GetModel<VipModel>()); } }
|
|
public bool IsOpen
|
{
|
get
|
{
|
return FuncOpen.Instance.IsFuncOpen(144);
|
}
|
}
|
|
public bool IsAdvance
|
{
|
get
|
{
|
return false;
|
}
|
}
|
|
public bool priorityOpen
|
{
|
get
|
{
|
if (redPointStre1.state == RedPointState.Simple)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public override void Init()
|
{
|
OpenServerActivityCenter.Instance.Register(16, this);
|
var BindJadewheel = FuncConfigConfig.Get("BindJadeWheelCfg");
|
NeedJade = int.Parse(BindJadewheel.Numerical1);
|
AngleList = JsonMapper.ToObject<double[][]>(BindJadewheel.Numerical5);
|
if (AngleDic.Count <= 0)
|
{
|
for (int i = 0; i < AngleList.Length; i++)
|
{
|
int Type = i + 1;
|
AngleClass angleClass = new AngleClass();
|
angleClass.AngleStart = (float)AngleList[i][0];
|
angleClass.AngleEnd = (float)AngleList[i][1];
|
AngleDic.Add(Type, angleClass);
|
}
|
}
|
SysNotifyMgr.Instance.RegisterCondition("BindJadeNotice", SatisfyNotifyCondition);
|
}
|
|
public override void UnInit()
|
{
|
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
IsOk = false;
|
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//数据的刷新(h0418)
|
PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//数据的刷新(h0418)
|
FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent;
|
FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
|
IsOk = true;
|
StrKey = "IsOpenFiaryJadeRedPoint" + PlayerDatas.Instance.baseData.PlayerID;
|
AngleSave = LocalSave.GetFloat(StrKey);
|
RedPoint();
|
}
|
|
|
|
private void OnFuncStateChangeEvent(int obj)
|
{
|
if (obj == 144)
|
{
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(16);
|
}
|
RedPoint();
|
}
|
}
|
|
public void BindJadeWheelResult(HA324_tagMCBindJadeWheelResult Info)
|
{
|
Lattice = Info.Index;
|
Number = Info.Cnt;
|
if (IsOk && Info.Index!=0)
|
{
|
if (AngleDic.ContainsKey(Lattice))
|
{
|
float flo = UnityEngine.Random.Range(AngleDic[Lattice].AngleStart + 1f, AngleDic[Lattice].AngleEnd - 1f);
|
flo = (float)Math.Round((double)flo, 2);
|
if (flo > 360f)
|
{
|
flo = flo - 360f;
|
}
|
if (Math.Abs(flo- AngleSave)<=0.2)
|
{
|
if ((flo + 1f )> (AngleDic[Lattice].AngleStart + 1f) && (flo + 1f) < (AngleDic[Lattice].AngleEnd - 1f))
|
{
|
flo += 1;
|
}
|
else if ((flo - 1f) > (AngleDic[Lattice].AngleStart + 1f) && (flo - 1f) < (AngleDic[Lattice].AngleEnd - 1f))
|
{
|
flo -= 1;
|
}
|
}
|
LocalSave.SetFloat(StrKey, flo);
|
AngleSave = LocalSave.GetFloat(StrKey);
|
}
|
if (WheelOfFortuneUpdate != null)
|
{
|
WheelOfFortuneUpdate(AngleSave);
|
}
|
RedPoint();
|
}
|
}
|
public void StartTheDraw()//开始抽奖
|
{
|
CA517_tagCMStartBindJadeWheel _tagC517 = new CA517_tagCMStartBindJadeWheel();
|
GameNetSystem.Instance.SendInfo(_tagC517);
|
}
|
|
private void Updatefighting(PlayerDataType obj)//红点
|
{
|
if (obj == PlayerDataType.VIPLv)
|
{
|
RedPoint();
|
}
|
}
|
private void RedPoint()
|
{
|
if (!FuncOpen.Instance.IsFuncOpen(144))
|
{
|
return;
|
}
|
int GetDayOfYear = DateTime.Now.DayOfYear;
|
string strKey = "WheelOfRedPoint" + PlayerDatas.Instance.baseData.PlayerID;
|
int day = LocalSave.GetInt(strKey);
|
if (day != GetDayOfYear)
|
{
|
redPointStre1.state = RedPointState.Simple;
|
}
|
else
|
{
|
redPointStre1.state = RedPointState.None;
|
}
|
}
|
|
public int GetTheGrid(float angle)
|
{
|
foreach (var key in AngleDic.Keys)
|
{
|
if (angle > AngleDic[key].AngleStart && angle < AngleDic[key].AngleEnd)
|
{
|
return key;
|
}
|
}
|
return 0;
|
}
|
private bool SatisfyNotifyCondition(string key, ArrayList paramArray)
|
{
|
|
if (paramArray != null && paramArray.Count > 0 &&
|
paramArray[0].Equals(UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName)))
|
{
|
return false;
|
}
|
return true;
|
}
|
}
|
}
|