| 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;  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   | 
|   |