2017-04-18 3 views
1

Ich habe ein Tag- und Nacht-System für mein Spiel programmiert, aber ich habe ein Problem mit einer der Methoden. Bis auf eine Methode habe ich es bisher gut codiert. Hier ist der vollständige Code:Tag und Nacht System, prüfen, ob Licht auch wenn kein Licht wird?

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

Die Methode, die ich Fragen habe mit ist IsGettingLight(), ich habe es codiert zu überprüfen, ob die Zeit zwischen den ersten und den letzten Licht Zeiten ist, aber was ist, wenn sein nach dem letzten Es fängt an, hell zu werden, und bevor es das erste Mal dunkel wird, wie kann ich überprüfen, ob es dunkel wird oder dunkel wird? Ich weiß, dass es etwas damit zu tun hat, etwas Zeit von der ersten dunklen Zeit zu entfernen, aber was genau entferne ich und wie?

+0

Wouldn‘ t zwischen '_lightTimes.Last()' und '_darkTimes.First()'? Ich bin mir nicht sicher, ob ich die Frage verstehe oder warum Sie keine ähnliche Frage zu den Zeiten zwischen '_darkTimes.Last()' und '_lightTimes.First()' –

+0

stellen. Auch nicht sicher, dass 'TimeSpan' das richtige Objekt ist ... Es soll eine Zeitspanne darstellen, keine bestimmte Zeit. Für eine bestimmte Zeit sollten Sie das 'DateTime' -Objekt verwenden und die Stunden, Minuten und Sekunden davon mit' DateTime.Now.TimeOfDay' vergleichen. –

+0

@RufusL Ich kann TimeOfDay nicht verwenden, da sich die beiden Zeiten nach Mitternacht überschneiden können ein anderer Tag. Was ich gesagt habe (zwischen _lightTimes.Last() und _darkTimes.First()) Ich meine, es wäre Licht für die ganze Zeit, wenn es nicht dunkel wird oder auch Licht wird? Ich versuche, jede Minute des Tages zu bekommen, wo es Licht wird. –

Antwort

0

Hier ist eine Möglichkeit, es zu tun:

// 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); 

Dann zu sehen, wo man sich am Tag ist, können Sie die aktuellen TimeOfDay mit den Werten oberhalb vergleichen:

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

Danke. Es funktioniert perfekt. –

+0

Großartig! Ich habe gerade ein Problem mit 'IsFullDark' bemerkt und es oben behoben (es beinhaltete' firstLight'). –

+0

Das habe ich selbst bemerkt und behoben. Vielen Dank. :) –