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