2017-04-18 65 views
1

我为我的游戏编写了一个白天和黑夜系统,但我遇到了其中一种方法的问题。除了一种方法之外,我已将其编码得很好。下面是完整的代码:白天黑夜系统,即使不亮时也检查灯光?

using Plus.Utilities; 
using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace Plus.Roleplay.GameEnvironment 
{ 
    class GameEnvironmentHandler 
    { 
     private List<TimeSpan> _darkTimes; 
     private List<TimeSpan> _lightTimes; 

     public GameEnvironmentHandler() 
     { 
      _darkTimes = new List<TimeSpan> 
      { 
       new TimeSpan(19, 0, 0), 
       new TimeSpan(19, 30, 0), 
       new TimeSpan(20, 0, 0), 
       new TimeSpan(20, 30, 0), 
       new TimeSpan (21, 0, 0) 
      }; 

      _lightTimes = new List<TimeSpan> 
      { 
       new TimeSpan(06, 0, 0), 
       new TimeSpan(06, 30, 0), 
       new TimeSpan(07, 0, 0), 
       new TimeSpan(07, 30, 0), 
       new TimeSpan (08, 0, 0) 
      }; 
     } 

     public bool IsGettingDark() 
     { 
      return RoleplayHelper.IsTimeOfDayBetween(DateTime.Now, 
       _darkTimes.First(), _darkTimes.Last()); 
     } 

     public bool IsGettingLight() 
     { 
      return RoleplayHelper.IsTimeOfDayBetween(DateTime.Now, 
       _lightTimes.First(), _lightTimes.Last()) 
       || RoleplayHelper.IsTimeOfDayBetween(DateTime.Now, 
       _lightTimes.First(), _darkTimes.Last()); 
     } 
    } 
} 

我有是IsGettingLight()问题的方法,我已经编写它来检查的时间是插图中的第一个和最后光时间,但如果它的最后一次后,时间开始变浅,在第一次变黑之前,我如何检查它是否变暗,变黑或变亮?我知道它是在第一次黑暗时间消除一点时间后做的事情,但是我究竟要删除什么,以及如何?

+0

止跌” t在'_lightTimes.Last()'和'_darkTimes.First()'之间?不知道我理解的问题,或者你为什么不问类似的问题有关_darkTimes.Last()'和'_lightTimes.First之间'时代()' –

+0

另外,不知道'TimeSpan'是使用合适的对象......它应该代表一段时间,而不是特定的时间。对于一个特定的时间,你应该使用'DateTime'对象的那个小时,分钟和秒部分与'DateTime.Now.TimeOfDay' –

+0

@RufusL比较,我不能使用的TimeOfDay,因为这两个时间可能在午夜后重叠成另一天。我所说的(在_lightTimes.Last()和_darkTimes.First()之间)我的意思是说,它总是不亮,它不会变暗或变亮。我正试图让每一天的每一分钟都会变得轻松。 –

回答

0

这里有一个办法做到这一点:

// firstLight starts at 5:30 
var firstLight = new TimeSpan(5, 30, 0); 

// fullLight start at 8:00 
var fullLightStart = new TimeSpan(8, 0, 0); 

// first Darkness starts at 18:30 
var firstDark = new TimeSpan(18, 30, 0); 

// fullDarkness starts at 21:00 
var fullDarkStart = new TimeSpan(21, 0, 0); 

然后,就看你在哪里的日子里,你可以在当前TimeOfDay与上面的值进行比较:

var currentTime = DateTime.Now.TimeOfDay; 

var IsGettingLight = currentTime >= firstLight && currentTime < fullLightStart; 
var IsFullLight = currentTime >= fullLightStart && currentTime < firstDark; 
var IsGettingDark = currentTime >= firstDark && currentTime < fullDarkStart; 
var IsFullDark = currentTime >= fullDarkStart || currentTime < firstLight; 

var IsLight = IsGettingLight || IsFullLight; 
var IsDark = IsGettingDark || IsFullDark; 
+0

谢谢。它完美的作品。 –

+0

太棒了!我刚刚注意到'IsFullDark'的一个问题,并在上​​面修正了它(它包括'firstLight')。 –

+0

我注意到我自己并修复了它。谢谢。 :) –