public Time(int h, int m, int s, int p) { Hours = h; Minutes = m; Seconds = s; Part = (PartOfDay)p; }
public void Tick(DateTime dateTime, PartOfDay partOfDay, float percentageOfPODPassed) { UpdateWorldObjectPrecense(); if (m_IsDestroyed) { return; } if (m_AnimalSlots == null) { return; } //Check if we should be destroyed //if (dateTime >= m_EndTime) //{ // DestroyEvent(this); // return; //} //Tick all the animal slots foreach (AnimalSlot animalSlot in m_AnimalSlots) { animalSlot.Tick(dateTime, partOfDay, percentageOfPODPassed); } }
private void Refresh(DateTime date) { float percentage = 0.0f; PartOfDay partOfDay = SuntimeCalculator.GetPartOfDay(52.079208, 5.140324, date, ref percentage); Gradient currentGradient; //TODO: Lame, quickly just for demo. This system will eventually change drastically switch (partOfDay) { case PartOfDay.Dawn: currentGradient = m_DawnGradient; break; case PartOfDay.Day: currentGradient = m_DayGradient; break; case PartOfDay.Dusk: currentGradient = m_DuskGradient; break; case PartOfDay.Night: currentGradient = m_NightGradient; break; default: currentGradient = m_DayGradient; break; } m_SpriteRenderer.color = currentGradient.Evaluate(percentage); }
private void UpdateAnimalPrecense() { if (m_CurrentAnimal == null) { return; } DateTime dateTime = GameClock.Instance.GetDateTime(); //If the animal ran away if (dateTime >= m_EndTime) { Reset(); return; } //If the animal doesn't reveal itself at this time float percentageOfPODPassed = 0.0f; PartOfDay partOfDay = SuntimeCalculator.GetPartOfDay(52.079208, 5.140324, dateTime, ref percentageOfPODPassed); bool canSpawn = m_CurrentAnimal.CanSpawn(partOfDay, percentageOfPODPassed, false); if (canSpawn == false) { Reset(); return; } }
// Use this for initialization void Start() { Hour = 6; Minutes = 00; moonPhase.sprite = moonCycleSprites[0]; StartCoroutine(PassingTime()); Days = 0; DayPart = PartOfDay.morning; }
public EventData(string sign, DateTime dateFrom, DateTime dateTo, PartOfDay partOfDay, EventType eventType, string additionalInfo) { this.EventId = SaveLoad.events.Id; this.Sign = sign; this.DateFrom = new EventDate(dateFrom); this.DateTo = (dateTo == null) ? new EventDate(dateFrom) : new EventDate(dateTo); this.PartOfDay = partOfDay.ToString(); this.EventType = eventType; this.AdditionalInfo = additionalInfo; this.Status = eventType.NeedsApproval ? "Ansökan" : "Godkänd"; }
public Day( int temperature, PartOfDay partOfDay, Weather weather, TimeSpan timeStamp, IList <ICrow> crows) { Temperature = temperature; PartOfDay = partOfDay; Weather = weather; TimeStamp = timeStamp; Crows = crows; }
void Update() { float time = (GameManager.instance.day - Mathf.Floor(GameManager.instance.day)) * 24f; timeText.text = ((int)time).ToString(); if (time >= sunsetEndUnclamped && time < sunrise) { partOfDay = PartOfDay.Night; } if (time >= sunrise && time < sunriseEnd) { partOfDay = PartOfDay.Morning; } if (time >= sunriseEnd && time < sunset) { partOfDay = PartOfDay.Day; } if (time >= sunset && time < sunsetEnd || time >= sunset - 24 && time < sunsetEndUnclamped) { partOfDay = PartOfDay.Evening; } float intensity = 0; switch (partOfDay) { case PartOfDay.Morning: intensity = (time - sunrise) / sunriseTime; intensity = intensity * (maxSunlight - minSunlight) + minSunlight; break; case PartOfDay.Day: intensity = maxSunlight; break; case PartOfDay.Evening: if (sunsetEnd > 24 && time < sunset) { time += 24; } intensity = 1 - (time - sunset) / sunsetTime; intensity = intensity * (maxSunlight - minSunlight) + minSunlight; break; case PartOfDay.Night: intensity = minSunlight; break; } sun.intensity = intensity; }
private void Tick(DateTime dateTime) { float percentageOfPODPassed = 0.0f; PartOfDay partOfDay = SuntimeCalculator.GetPartOfDay(52.079208, 5.140324, dateTime, ref percentageOfPODPassed); //Loop backwards so removing is not an issue //foreach (WorldObject worldObject in m_WorldObjects) for (int i = m_WorldObjects.Count - 1; i >= 0; --i) { m_WorldObjects[i].Tick(dateTime, partOfDay, percentageOfPODPassed); } m_LastTickTime = dateTime; }
private void RefreshOneDayReport() { PartOfDay partOfDay = PartOfDay.Heldag; if (am_Absence1.Checked) { partOfDay = PartOfDay.Förmiddag; } else if (pm_Absence1.Checked) { partOfDay = PartOfDay.Eftermiddag; } ReportHelper.CreateOneDayReport(DateInput_Absence1.Value.Date, partOfDay, Panel_Absence1); }
private static bool IsWorkerWorkBeforeOrAfter(int day, int shift, int stationId, string workerID) { DayOfWeek d = (DayOfWeek)day; PartOfDay s = (PartOfDay)shift; int currentShiftIndex = Shift.GetShiftIndex(d, s); int prevShiftIndex = Shift.GetPreviousShiftIndex(d, s); int nextShiftIndex = Shift.GetNextShiftIndex(d, s); foreach (var station in workSchedule.Schedule.Shifts[currentShiftIndex].Stations) { if (station.Workers != null && station.Workers.Find(x => x.IdNumber.TrimStart('0') == workerID) != null) { return(true); } } if (day == 0 && shift == 0) { // check if not worked last week saturday night if (!string.IsNullOrEmpty(lastSaturdayNightWorkers.Find(x => x == workerID))) { return(true); } } else { foreach (var station in workSchedule.Schedule.Shifts[prevShiftIndex].Stations) { if (station.Workers != null && station.Workers.Find(x => x.IdNumber.TrimStart('0') == workerID) != null) { return(true); } } } foreach (var station in workSchedule.Schedule.Shifts[nextShiftIndex].Stations) { if (station.Workers != null && station.Workers.Find(x => x.IdNumber.TrimStart('0') == workerID) != null) { return(true); } } return(false); }
public static int GetPreviousShiftIndex(DayOfWeek day, PartOfDay part) { int p = (int)part; int d = (int)day; if (p == 0) { p = 2; d--; } else { p--; } return(p * 7 + d); }
public static int GetNextShiftIndex(DayOfWeek day, PartOfDay part) { int p = (int)part; int d = (int)day; if (p == 2) { p = 0; d++; } else { p++; } return(p * 7 + d); }
private void UpdateTime() { //Rough timer, not accurate, but fine tod.floatySeconds += Time.deltaTime * timeMultiplier; tod.Second = (int)tod.floatySeconds; if (tod.Second >= 60) { tod.floatySeconds = 0; tod.Second = 0; tod.Minute += 1; } if (tod.Minute >= 60) { tod.Minute = 0; tod.Hour += 1; } if (tod.Hour >= 24) { tod.Hour = 0; tod.Day += 1; } if (tod.Hour >= 6 && tod.Hour < 12) { pod = PartOfDay.Morning; } else if (tod.Hour >= 12 && tod.Hour < 18) { pod = PartOfDay.Day; } else if (tod.Hour >= 18 && tod.Hour < 22) { pod = PartOfDay.Evening; } else { pod = PartOfDay.Night; } }
private void UpdateStates() { // part of day previousPartOfDay = currentPartOfDay; currentPartOfDay = GetPartOfDay(); if (currentPartOfDay != previousPartOfDay) { changedPartOfDay = true; } --hoursLeftToRain; if (hoursLeftToRain == 0) { raining = !raining; ResetRain(); displayRainDescription = true; } }
public void Tick(DateTime dateTime, PartOfDay partOfDay, float percentageOfPODPassed) { //If we are still occupied, nothing happens UpdateAnimalPrecense(); if (HasAnimal()) { return; } //2 lists that run in sync List <AnimalDefinition> availableAnimals = new List <AnimalDefinition>(); List <float> stayTimes = new List <float>(); //Collect all the animals that are able to spawn foreach (AnimalDefinition animal in m_AnimalDefinitions) { float stayTime = 0.0f; animal.CanSpawn(partOfDay, percentageOfPODPassed, true, out stayTime); if (stayTime > 0.0f) { availableAnimals.Add(animal); stayTimes.Add(stayTime); } } //If none are found this slot remains unoccupied if (availableAnimals.Count == 0) { SetCurrentAnimal(null); return; } //Else we pick from the available list int randID = UnityEngine.Random.Range(0, availableAnimals.Count); SetCurrentAnimal(availableAnimals[randID]); m_EndTime = dateTime.AddMinutes(stayTimes[randID]); }
private void Refresh(DateTime date) { float percentage = 0.0f; PartOfDay partOfDay = SuntimeCalculator.GetPartOfDay(52.079208, 5.140324, date, ref percentage); //If it's day float degrees = 0.0f; //TODO: Lame, quickly just for demo. This system will eventually change drastically switch (partOfDay) { case PartOfDay.Dawn: degrees = (percentage * 10.0f * -1.0f) + 5.0f; break; case PartOfDay.Day: degrees = (percentage * 170.0f * -1.0f) - 5.0f; break; case PartOfDay.Dusk: degrees = (percentage * 10.0f * -1.0f) + 185.0f; break; case PartOfDay.Night: degrees = (percentage * 170.0f * -1.0f) + 175.0f; break; default: degrees = 0.0f; break; } transform.localRotation = Quaternion.Euler(0.0f, 0.0f, degrees); if (RefreshEvent != null) { RefreshEvent(); } }
/// <summary> /// Add button event /// Tries to create a new event from inputted data and writes it to the save file /// </summary> private void Add_AddEvent_Click(object sender, EventArgs e) { string sign = SignInput_AddEvent.Text.Split(',')[0]; DateTime dateFrom = DateFromInput_AddEvent.Value.Date; DateTime dateTo = MultipleDays_AddEvent.Checked ? DateToInput_AddEvent.Value.Date : DateFromInput_AddEvent.Value.Date; PartOfDay partOfDay = DayPart_amfm_AddEvent.Checked ? PartOfDay.Heldag : DayPart_am_AddEvent.Checked ? PartOfDay.Förmiddag : PartOfDay.Eftermiddag; int eventTypeIndex = EventTypeInput_AddEvent.SelectedIndex; string additionalInfo = InfoInput_AddEvent.Text; if (ValidateAddEvent(sign, dateFrom, dateTo, eventTypeIndex)) { EventType eventType = eventTypes[eventTypeIndex]; EventData eventData = new EventData(sign, dateFrom, dateTo, partOfDay, eventType, additionalInfo); SaveLoad.AppendData(eventData); UsersData users = SaveLoad.users; UserData user = users.FindUser(sign); if (user != null) { string[] mailAddresses = (user.Domain == "Bro") ? eventType.ConfirmEmails_Bro : (user.Domain == "Industri") ? eventType.ConfirmEmails_Industri : (user.Domain == "Koordination") ? eventType.ConfirmEmails_Koord : null; MessageBox.Show($"Händelse tillagd!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); #if false if (mailAddresses != null) { MailHelper.SendMail(mailAddresses, eventData); } #endif ClearFields(); } } calendarForm.RefreshCal(null); }
public async Task <List <Message> > SendScheduledMessageToAllUsersAsync(PartOfDay partOfDay, MessageRarity type, CancellationToken cancellationToken) { if (cancellationToken.IsCancellationRequested) { return(null); } var sentMessages = new List <Message>(); IEnumerable <UserDbo> users = null; using (var context = _dbContextFactory.Create()) { users = context.User .Include(x => x.UserSettings) .Include(x => x.RarityWeights) .Where(x => x.UserSettings.RecieveScheduled); } foreach (var user in users) { Message sentMessage = null; var rarity = _rarityRoller.RollRarityForUser(user); var message = await _messageTextProvider.GetMessage(Enum.Parse <MessageCategory>(partOfDay.Name.ToUpperInvariant()), MessageType.STANDARD, rarity, user.ChatId); // could already pass gender and so on if (message.ImageUrl == null) { sentMessage = await _botClient.SendTextMessageAsync(user.ChatId, message.Text); } else { sentMessage = await _botClient.SendPhotoAsync(user.ChatId, message.ImageUrl, caption : message.Text); } sentMessages.Add(sentMessage); } return(sentMessages); }
public bool CanSpawn(PartOfDay partOfDay, float percentageOfDay, bool includeLuck, out float stayTime) { stayTime = 0.0f; percentageOfDay *= 100.0f; foreach (AppearanceTime appearanceTime in m_AppearanceTimes) { if (appearanceTime.PartOfDay == partOfDay) { //Check if we are within range bool isWithinRange = appearanceTime.PercantageOfPODRange.IsWithinRange(percentageOfDay); if (isWithinRange == false) { return(false); } //Check if we get trough the luck factor if (includeLuck) { float rand = UnityEngine.Random.Range(0.0f, 10000.0f); rand /= 100.0f; if (rand > appearanceTime.PercentageLuck) { return(false); } } //If we do, how long does he stay? stayTime = appearanceTime.StayTime.GetRandomValue(); return(true); } } return(false); }
void ChangeTime() { Minutes = Minutes + 10; switch (Hour) { case 6: timeImage.sprite = timeOfDay[0]; DayPart = PartOfDay.morning; break; case 7: if (minutes == 30) { timeImage.sprite = timeOfDay[1]; } break; case 9: timeImage.sprite = timeOfDay[2]; break; case 10: if (minutes == 30) { timeImage.sprite = timeOfDay[3]; } break; case 12: timeImage.sprite = timeOfDay[4]; DayPart = PartOfDay.afternoon; break; case 13: if (minutes == 20) { timeImage.sprite = timeOfDay[5]; } break; case 14: if (minutes == 40) { timeImage.sprite = timeOfDay[6]; } break; case 16: timeImage.sprite = timeOfDay[7]; break; case 17: timeImage.sprite = timeOfDay[8]; DayPart = PartOfDay.evening; if (minutes == 40) { timeImage.sprite = timeOfDay[9]; } break; case 18: if (minutes == 20) { timeImage.sprite = timeOfDay[10]; } break; case 19: timeImage.sprite = timeOfDay[11]; break; case 20: timeImage.sprite = timeOfDay[12 + nightSprite]; DayPart = PartOfDay.night; nightSprite = (nightSprite + 1) % 4; break; default: break; } if (Hour == 23 && Minutes == 60) { currentMoonPhase = (currentMoonPhase + 1) % 6; moonPhase.sprite = moonCycleSprites[currentMoonPhase]; days++; GameObject.FindObjectOfType <NPCController>().SetQueue(days); } if (Minutes == 60) { Hour = (Hour + 1) % 24; Minutes = 00; } }
/// <summary> /// Creates multiple bar graphs representing the absence on date: <paramref name="date"/> /// </summary> public static void CreateOneDayReport(DateTime date, PartOfDay partOfDay, Panel panel) { List <UserData> users = SaveLoad.users.usersData; EventsData events = SaveLoad.events; string[] names = new string[8] { "På kontoret", "Semester", "Föräldraledig", "Tjänstledig", "Jobbar hemifrån", "Studiebesök/Platskontor", "Sjuk", "VAB", }; Color[] colors = new Color[8] { Color.Silver, Settings.tonedGreen, Settings.tonedGreen, Settings.tonedGreen, Settings.tonedBlue, Settings.tonedBlue, Settings.tonedYellow, Settings.tonedYellow, }; int[] absenceCount = new int[7] { 0, 0, 0, 0, 0, 0, 0, }; List <string> countedUsers = new List <string>(); foreach (EventData e in events.eventsData) { if (!countedUsers.Contains(e.Sign)) { if (e.DateFrom.ToDateTime() <= date && e.DateTo.ToDateTime() >= date && e.Status != "Nekad") { if (partOfDay == PartOfDay.Heldag || ((e.PartOfDay == "Förmiddag" || e.PartOfDay == "Heldag") && partOfDay == PartOfDay.Förmiddag) || ((e.PartOfDay == "Eftermiddag" || e.PartOfDay == "Heldag") && partOfDay == PartOfDay.Eftermiddag)) { for (int i = 1; i < names.Length; i++) { if (e.EventType.EventName == names[i]) { absenceCount[i - 1]++; countedUsers.Add(e.Sign); } } } } } } int totAbsence = 0; Array.ForEach(absenceCount, a => totAbsence += a); int xPos = 0; int yPos = -15; int spacingY_small = 15; int spacingY_large = 25; int maxVal = users.Count; int maxWidth = 200; panel.Controls.Clear(); Font font = new Font("Microsoft Sans Serif", 10); panel.Controls.Add(new Label() { Location = new Point(xPos, yPos += spacingY_large), Width = 210, Text = $"{names[0]}: {users.Count - totAbsence}", Font = font, TextAlign = ContentAlignment.BottomLeft }); panel.Controls.Add(new PictureBox() { Location = new Point(xPos, yPos += spacingY_small), Width = GetBarWidth(users.Count - totAbsence, maxVal, maxWidth), Height = 20, BackColor = colors[0] }); for (int i = 0; i < absenceCount.Length; i++) { panel.Controls.Add(new Label() { Location = new Point(xPos, yPos += spacingY_large), Width = 210, Text = $"{names[i + 1]}: {absenceCount[i]}", Font = font, TextAlign = ContentAlignment.BottomLeft }); panel.Controls.Add(new PictureBox() { Location = new Point(xPos, yPos += spacingY_small), Width = GetBarWidth(absenceCount[i], maxVal, maxWidth), Height = 20, BackColor = colors[i + 1] }); } }
public static int GetShiftIndex(DayOfWeek day, PartOfDay part) { return(((int)part) * 7 + (int)day); }
private static TimeSpan GetRandomTimeSpan(PartOfDay partOfDay, Random random) => partOfDay switch {
public SurchargePodModel(PartOfDay pod) { this.Pod = pod; }
//Returns how long the animal will spawn for public bool CanSpawn(PartOfDay partOfDay, float percentageOfDay, bool includeLuck) { float stayTime = 0.0f; return(CanSpawn(partOfDay, percentageOfDay, includeLuck, out stayTime)); }