Esempio n. 1
0
    internal void HourHasChanged(int newHour)
    {
        ScheduledSituation ss = GameState.Schedule.GetSituationForHour(newHour);

        GameState.ActualSituation = ss != null?new ScheduledSituation((int)GameState.HourOfDay, 1, ss.Situation, false):null;
        PanelSituation.HourHasChanged(newHour, ss != null?ss.Situation:null, GameState);
    }
    private bool AreOverlapping(ScheduledSituation ssTmp, ScheduledSituation ss)
    {
        ScheduledSituation smaller = ssTmp.From < ss.From ? ssTmp : ss;
        ScheduledSituation bigger  = smaller == ssTmp ? ss : ssTmp;
        float finish = smaller.From + smaller.Duration;

        if (finish >= 24)
        {
            finish -= 24;
        }
        return(finish > bigger.From);
    }
Esempio n. 3
0
 public GameState(List <Parameter> parameters, List <Situation> situations, Schedule schedule, Model model, Plot plot, string gameHash, int pointsEvery)
 {
     PointsEvery     = pointsEvery;
     Situations      = situations;
     ActualGameSpeed = model.TimeChanges.NormalSpeed;
     Model           = model;
     Schedule        = schedule;
     ActualSituation = schedule.GetSituationForHour(0);
     Parameters      = parameters;
     Plot            = plot;
     SetPlotElement(plot.Elements[0]);
     GameHash = gameHash;
 }
    private void HighlightActive(int hourOfDay)
    {
        ScheduledSituation ss = Game.Me.GameState.Schedule.GetSituationForHour(hourOfDay);
        Transform          situationsTrans = gameObject.FindByName <Transform>("Situations");
        int  index       = 0;
        bool isRightType = ss == null || ss.Situation.DayNightType == Game.Me.GameState.Schedule.GetActualDayNightType((int)Game.Me.GameState.HourOfDay);

        foreach (Transform childT in situationsTrans)
        {
            childT.gameObject.FindByName <UICornerCut>("Highlight").color = index == hourOfDay ? Color.white : Color.gray;
            index++;
        }
    }
    internal void Init(Schedule schedule)
    {
        schedule.AddScheduleUpdateSituation(this);
        Transform situationsTrans = gameObject.FindByName <Transform>("Situations");
        int       index           = 0;

        foreach (Transform childT in situationsTrans)
        {
            ScheduledSituation ss = schedule.GetSituationForHour(index);
            float angle           = -index / 24f * 360 + 81.57f;   //81.57 is the offset. this should be the first elements angle
            childT.localRotation = Quaternion.AngleAxis(angle, new Vector3(0, 0, 1));
            index++;
        }
        Refresh(schedule);
        HighlightActive(0);
    }
    private void Refresh(Schedule schedule)
    {
        Transform situationsTrans = gameObject.FindByName <Transform>("Situations");
        int       index           = 0;

        //setup the situations
        foreach (Transform childT in situationsTrans)
        {
            ScheduledSituation ss = schedule.GetSituationForHour(index);
            Situation          s  = null;
            bool isPermament      = false;
            bool isRightType      = true;
            if (ss != null)
            {
                s           = ss.Situation;
                isPermament = ss.Permament;
                isRightType = ss.Situation.DayNightType == schedule.GetActualDayNightType((int)Game.Me.GameState.HourOfDay);
                childT.gameObject.FindByName <Image>("RightWrongType").color = ss.Situation.DayNightType.Color;
            }
            childT.gameObject.GetComponent <ButtonSchedule>().Init(s, isPermament, index);
            index++;
        }

        //set the night arc
        Transform nightArc   = gameObject.FindByName <Transform>("ImageNight");
        float     startAngle = -schedule.NightTimeFrom.Value / 24f * 360;

        nightArc.localRotation = Quaternion.AngleAxis(startAngle, new Vector3(0, 0, 1));
        float fillAmount = schedule.NightTimeDuration.Value / 24f;

        nightArc.gameObject.GetComponent <Image>().fillAmount = fillAmount;

        //set the day arc
        Transform dayArc        = gameObject.FindByName <Transform>("ImageDay");
        float     dayStartAngle = -(schedule.NightTimeFrom.Value / 24f + fillAmount) * 360;

        dayArc.localRotation = Quaternion.AngleAxis(dayStartAngle, new Vector3(0, 0, 1));
        float dayFillAmount = 1 - fillAmount;

        dayArc.gameObject.GetComponent <Image>().fillAmount = dayFillAmount;
    }
    internal void ReplaceSituation(int from, int duration, Situation situation, bool permament)
    {
        //if duration bigger than 1 then cut it to pieces;
        if (duration < 1)
        {
            throw new Exception("You can not add situation with duration 0");
        }
        if (duration > 1)
        {
            for (int i = 0; i < duration; i++)
            {
                int hour = from + i;
                if (hour > 23)
                {
                    hour -= 24;
                }
                ReplaceSituation(hour, 1, situation, permament);
            }
            return;
        }

        ScheduledSituation ss = new ScheduledSituation(from, duration, situation, permament);

        ScheduledSituation[] s = Situations.ToArray();
        foreach (ScheduledSituation ssTmp in s)
        {
            if (AreOverlapping(ssTmp, ss))
            {
                Situations.Remove(ssTmp);
                break;
            }
        }
        Situations.Add(ss);
        Situations.Sort((t, y) => t.From.CompareTo(y.From));
        ScheduleUpdated();
    }