Ejemplo n.º 1
0
 public Time(int h, int m, int s, int p)
 {
     Hours   = h;
     Minutes = m;
     Seconds = s;
     Part    = (PartOfDay)p;
 }
Ejemplo n.º 2
0
    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);
        }
    }
Ejemplo n.º 3
0
    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);
    }
Ejemplo n.º 4
0
    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;
        }
    }
Ejemplo n.º 5
0
 // Use this for initialization
 void Start()
 {
     Hour             = 6;
     Minutes          = 00;
     moonPhase.sprite = moonCycleSprites[0];
     StartCoroutine(PassingTime());
     Days    = 0;
     DayPart = PartOfDay.morning;
 }
Ejemplo n.º 6
0
 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";
 }
Ejemplo n.º 7
0
 public Day(
     int temperature,
     PartOfDay partOfDay,
     Weather weather,
     TimeSpan timeStamp,
     IList <ICrow> crows)
 {
     Temperature = temperature;
     PartOfDay   = partOfDay;
     Weather     = weather;
     TimeStamp   = timeStamp;
     Crows       = crows;
 }
Ejemplo n.º 8
0
    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;
    }
Ejemplo n.º 9
0
    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;
    }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
        }
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
    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;
        }
    }
Ejemplo n.º 15
0
    private void UpdateStates()
    {
        // part of day
        previousPartOfDay = currentPartOfDay;
        currentPartOfDay  = GetPartOfDay();

        if (currentPartOfDay != previousPartOfDay)
        {
            changedPartOfDay = true;
        }

        --hoursLeftToRain;

        if (hoursLeftToRain == 0)
        {
            raining = !raining;

            ResetRain();
            displayRainDescription = true;
        }
    }
Ejemplo n.º 16
0
    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]);
    }
Ejemplo n.º 17
0
    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();
        }
    }
Ejemplo n.º 18
0
        /// <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);
        }
Ejemplo n.º 20
0
    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);
    }
Ejemplo n.º 21
0
    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;
        }
    }
Ejemplo n.º 22
0
        /// <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]
                });
            }
        }
Ejemplo n.º 23
0
 public static int GetShiftIndex(DayOfWeek day, PartOfDay part)
 {
     return(((int)part) * 7 + (int)day);
 }
Ejemplo n.º 24
0
 private static TimeSpan GetRandomTimeSpan(PartOfDay partOfDay, Random random) => partOfDay switch
 {
Ejemplo n.º 25
0
 public SurchargePodModel(PartOfDay pod)
 {
     this.Pod = pod;
 }
Ejemplo n.º 26
0
    //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));
    }