using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using System;
|
using System.Text.RegularExpressions;
|
|
|
using LitJson;
|
|
public class DailyQuestData
|
{
|
public int id { get; private set; }
|
public Redpoint redpoint { get; private set; }
|
|
public DailyQuestData(int _id)
|
{
|
this.id = _id;
|
}
|
|
public DailyQuestData(int _id, int _redpointId, int _parentRedpoint)
|
{
|
this.id = _id;
|
this.redpoint = new Redpoint(_parentRedpoint, _redpointId);
|
}
|
|
public void UpdateRedpointState(RedPointState _redpointState)
|
{
|
if (this.redpoint != null)
|
{
|
this.redpoint.state = _redpointState;
|
}
|
}
|
|
}
|
|
public class DailyQuestActiveValueReward
|
{
|
public int id { get; private set; }
|
|
bool m_Got = false;
|
public bool got {
|
get { return this.m_Got; }
|
set { this.m_Got = value; }
|
}
|
|
public DailyQuestActiveValueReward(int _id)
|
{
|
this.id = _id;
|
}
|
}
|
|
public struct DailyQuestTimes
|
{
|
public int completeTimes;
|
public int dayBuyTimes;
|
public int dayUseItemTimes;
|
}
|
|
public class DailyQuestOpenTime
|
{
|
public int id;
|
public bool always;
|
|
//常规的活动时间,key是星期x
|
Dictionary<int, List<HourMinute>> openTimes = new Dictionary<int, List<HourMinute>>();
|
|
public DailyQuestOpenTime(int _id)
|
{
|
this.id = _id;
|
}
|
|
public void ParseQuestNormalOpenTime(DailyQuestOpenTimeConfig activityOpenTime)
|
{
|
string timeString = activityOpenTime.OpenTime;
|
int duration = activityOpenTime.Duration;
|
var matches = Regex.Matches(timeString, "\\\"[0-9]\\\":\\[[0-9|,|\\[|\\]]+");
|
always = matches.Count == 0;
|
|
for (int i = 0; i < matches.Count; i++)
|
{
|
var match = matches[i];
|
var stringArray = match.Value.Split(':');
|
|
var week = 0;
|
var weekMatch = Regex.Match(stringArray[0], "[0-9]");
|
int.TryParse(weekMatch.Value, out week);
|
|
if (week == 0)
|
{
|
var subMatches = Regex.Matches(stringArray[1], "[0-9]{1,2},[0-9]{1,2}");
|
var tempHourMinutes = new List<HourMinute>();
|
|
for (int j = 0; j < subMatches.Count; j++)
|
{
|
tempHourMinutes.Add(new HourMinute(subMatches[j].Value, duration));
|
}
|
|
tempHourMinutes.Sort((HourMinute a, HourMinute b) => { return HourMinute.Compare(a, b); });
|
|
for (int j = 0; j < 7; j++)
|
{
|
var hourMinutes = openTimes[j] = new List<HourMinute>(tempHourMinutes);
|
}
|
}
|
else
|
{
|
var hourMinutes = openTimes[week % 7] = new List<HourMinute>();
|
var subMatches = Regex.Matches(stringArray[1], "[0-9]{1,2},[0-9]{1,2}");
|
|
for (int j = 0; j < subMatches.Count; j++)
|
{
|
hourMinutes.Add(new HourMinute(subMatches[j].Value, duration));
|
}
|
|
hourMinutes.Sort((HourMinute a, HourMinute b) => { return HourMinute.Compare(a, b); });
|
}
|
}
|
}
|
|
|
|
|
|
// 改成判断日常活动ID不在定制中配置则定制期间正常开启
|
public bool InOpenTime()
|
{
|
if (always)
|
{
|
return true;
|
}
|
|
|
return IsNormalOpenTime();
|
|
}
|
|
//日常活动开启判断
|
private bool IsNormalOpenTime()
|
{
|
var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek;
|
if (!openTimes.ContainsKey(dayOfWeek))
|
{
|
return false;
|
}
|
else
|
{
|
var hourMinutes = openTimes[dayOfWeek];
|
for (int i = 0; i < hourMinutes.Count; i++)
|
{
|
if (hourMinutes[i].InOpenTime())
|
{
|
return true;
|
}
|
}
|
|
return false;
|
}
|
}
|
|
|
public bool TryGetTodayNearestOpenTime(out HourMinute _hourMinute)
|
{
|
|
var dayOfWeek = (int)TimeUtility.ServerNow.DayOfWeek;
|
if (!openTimes.ContainsKey(dayOfWeek))
|
{
|
_hourMinute = default(HourMinute);
|
return false;
|
}
|
|
var hour = TimeUtility.ServerNow.Hour;
|
var minute = TimeUtility.ServerNow.Minute;
|
var hourMinutes = openTimes[dayOfWeek];
|
_hourMinute = hourMinutes[hourMinutes.Count - 1];
|
for (int i = 0; i < hourMinutes.Count; i++)
|
{
|
var hourMinute = hourMinutes[i];
|
if (hour < hourMinute.hourEnd || (hour == hourMinute.hourEnd && minute <= hourMinute.minuteEnd))
|
{
|
_hourMinute = hourMinute;
|
break;
|
}
|
}
|
|
return true;
|
|
}
|
|
|
|
public List<HourMinute> GetNormalHourMinutes()
|
{
|
foreach (var hourMinutes in openTimes.Values)
|
{
|
if (hourMinutes != null)
|
{
|
return hourMinutes;
|
}
|
}
|
return null;
|
}
|
}
|
|
public struct HourMinute
|
{
|
public int hourBegin;
|
public int minuteBegin;
|
public int hourEnd;
|
public int minuteEnd;
|
public bool wholeDay;
|
|
public HourMinute(string _input, int _duration)
|
{
|
var matches = Regex.Matches(_input, "[0-9]{1,2}");
|
if (matches.Count >= 2)
|
{
|
hourBegin = int.Parse(matches[0].Value);
|
minuteBegin = int.Parse(matches[1].Value);
|
|
hourEnd = hourBegin + _duration / 60;
|
minuteEnd = minuteBegin + _duration % 60;
|
if (minuteEnd >= 60)
|
{
|
minuteEnd = minuteEnd % 60;
|
hourEnd += 1;
|
}
|
|
wholeDay = false;
|
}
|
else
|
{
|
hourBegin = 0;
|
minuteBegin = 0;
|
hourEnd = 0;
|
minuteEnd = 0;
|
|
wholeDay = true;
|
}
|
}
|
|
public HourMinute(int _hourBegin, int _minuteBegin, int _hourEnd, int _minuteEnd)
|
{
|
hourBegin = _hourBegin;
|
minuteBegin = _minuteBegin;
|
hourEnd = _hourEnd;
|
minuteEnd = _minuteEnd;
|
|
wholeDay = hourBegin == 0 && minuteBegin == 0 && hourEnd == 0 && minuteEnd == 0;
|
|
}
|
|
public bool InOpenTime()
|
{
|
if (wholeDay)
|
{
|
return true;
|
}
|
else
|
{
|
var minutes = TimeUtility.ServerNow.Hour * 60 + TimeUtility.ServerNow.Minute;
|
if ((hourBegin * 60 + minuteBegin) <= minutes && (hourEnd * 60 + minuteEnd) > minutes)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
}
|
|
public bool AfterOpenTime(int hour, int minute)
|
{
|
if (wholeDay)
|
{
|
return false;
|
}
|
else
|
{
|
var minutes = hour * 60 + minute;
|
return (hourEnd * 60 + minuteEnd) <= minutes;
|
}
|
}
|
|
public override string ToString()
|
{
|
var minuteBeginStr = minuteBegin > 9 ? minuteBegin.ToString() : StringUtility.Contact("0", minuteBegin);
|
var minuteEndStr = minuteEnd > 9 ? minuteEnd.ToString() : StringUtility.Contact("0", minuteEnd);
|
return StringUtility.Contact(hourBegin, ":", minuteBeginStr, "--", hourEnd, ":", minuteEndStr);
|
}
|
|
public string ToOpenTime()
|
{
|
if (minuteBegin < 10)
|
{
|
return StringUtility.Contact(hourBegin, ":0", minuteBegin);
|
}
|
else
|
{
|
return StringUtility.Contact(hourBegin, ":", minuteBegin);
|
}
|
}
|
|
public static int Compare(HourMinute _lhs, HourMinute _rhs)
|
{
|
return (_lhs.hourBegin * 60 + _lhs.minuteBegin) < (_rhs.hourBegin * 60 + _rhs.minuteBegin) ? -1 : 1;
|
}
|
|
}
|
|
|
|
|
|