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