public void CreateUiForCustomEntities(IEnumerable <SavedEntity> savedEntities, Action onEnterCreateMode) { selectObjectsBtn = new List <TabButton>(); createModeBtn.onClick.AddListener(() => { onEnterCreateMode?.Invoke(); OnLeaveTestMode(); }); foreach (var savedEntity in savedEntities) { var newSelectBtn = Instantiate(behaviourButtonUi, behaviourTab); newSelectBtn.onClick.AddListener(() => { foreach (var button in selectObjectsBtn) { button.ToggleHighlight(newSelectBtn == button); } selectedEntity = savedEntity; }); newSelectBtn.ChangeName(savedEntity.inGameObject.SubObjectName); selectObjectsBtn.Add(newSelectBtn); } ToggleVisible(true); }
public SavedEntityItemViewModel(SavedEntity savedEntity, ManageEntitiesViewModel manageEntitiesViewModel) { SavedEntity = savedEntity; _manageEntitiesViewModel = manageEntitiesViewModel; UpdateClickedCommand = CommandHelper.CreateCommand(UpdateClicked); SettingsClickedCommand = CommandHelper.CreateCommand(SettingsClicked); }
public TimetablePage() { InitializeComponent(); AppSettings settings = SettingsRepository.GetSettings(); lastTimeLeftVisible = TimeLeft.IsVisible; Timetable.VerticalOptions = LayoutOptions.FillAndExpand; Timetable.VisibleDatesChangedEvent += Timetable_VisibleDatesChangedEvent; string activeCultureCode = Cultures.SupportedCultures[0].TwoLetterISOLanguageName; if (Cultures.SupportedCultures.Any(c => c.TwoLetterISOLanguageName == CultureInfo.CurrentCulture.TwoLetterISOLanguageName)) { activeCultureCode = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; } Timetable.Locale = activeCultureCode; switch (settings.TimetableViewMode) { case TimetableViewMode.Day: Timetable.ScheduleView = ScheduleView.DayView; break; case TimetableViewMode.Week: Timetable.ScheduleView = ScheduleView.WeekView; break; case TimetableViewMode.Month: Timetable.ScheduleView = ScheduleView.MonthView; break; } MessagingCenter.Subscribe <Application, SavedEntity>(this, MessageTypes.SelectedEntityChanged, (sender, newSelectedEntity) => { UpdateEvents(newSelectedEntity); }); MessagingCenter.Subscribe <Application, SavedEntity>(this, MessageTypes.TimetableUpdated, (sender, entity) => { SavedEntity selectedEntity = UniversityEntitiesRepository.GetSelected(); if (selectedEntity == null || selectedEntity != entity) { return; } UpdateEvents(selectedEntity); }); MessagingCenter.Subscribe <Application, SavedEntity>(this, MessageTypes.LessonSettingsChanged, (sender, entity) => { SavedEntity selectedEntity = UniversityEntitiesRepository.GetSelected(); if (selectedEntity == null || selectedEntity != entity) { return; } UpdateEvents(selectedEntity); }); }
public async void SpawnEntityAsync(SavedEntity savedEntity, Vector3 spawnPoint) { var go = await savedEntity.inGameObject.InstantiateAsync(floor.transform).Task; go.transform.position = spawnPoint; foreach (var savedBehaviour in savedEntity.savedBehaviours) { var behaviour = go.AddComponent(savedBehaviour.behaviourType); JsonUtility.FromJsonOverwrite(savedBehaviour.behaviourData, behaviour); } }
public void OnLeaveTestMode() { if (selectObjectsBtn != null) { foreach (var button in selectObjectsBtn) { Destroy(button.gameObject); } } createModeBtn.onClick.RemoveAllListeners(); ToggleVisible(false); selectedEntity = null; }
public static async Task <IReadOnlyList <Entity> > CheckCistTimetableUpdateRights(params Entity[] entitiesToUpdate) { List <Entity> allowedEntities = new(); entitiesToUpdate ??= Array.Empty <Entity>(); List <SavedEntity> savedEntities = await UniversityEntitiesRepository.GetSaved(); foreach (var entity in entitiesToUpdate) { SavedEntity savedEntity = savedEntities.SingleOrDefault(e => e == entity); if (savedEntity == null) { // Cannot update timetable for entity that is not saved continue; } DateTime nowInUkraine = TimeZoneInfo.ConvertTime(DateTime.Now, Config.UkraineTimezone); if (savedEntity.LastUpdated == null || (nowInUkraine.TimeOfDay >= Config.CistDailyTimetableUpdateStartTime && nowInUkraine.TimeOfDay < Config.CistDailyTimetableUpdateEndTime)) { // Update allowed if never updated before // Unlimited updates between 5 and 6 AM allowedEntities.Add(savedEntity); continue; } // Update is allowd once per day (day begins at 6 AM) DateTime lastUpdatedInUkraine = TimeZoneInfo.ConvertTime(savedEntity.LastUpdated.Value, Config.UkraineTimezone); TimeSpan timeBeforeAnotherUpdate; if (lastUpdatedInUkraine.TimeOfDay < Config.CistDailyTimetableUpdateEndTime) { timeBeforeAnotherUpdate = Config.CistDailyTimetableUpdateEndTime - lastUpdatedInUkraine.TimeOfDay; } else { timeBeforeAnotherUpdate = TimeSpan.FromDays(1) - lastUpdatedInUkraine.TimeOfDay + Config.CistDailyTimetableUpdateEndTime; } if (nowInUkraine - lastUpdatedInUkraine > timeBeforeAnotherUpdate) { allowedEntities.Add(savedEntity); continue; } #if UNLIMITED_UPDATES allowedEntities.Add(savedEntity); #endif } return(allowedEntities); }
public static List <SavedEntity> CheckCistTimetableUpdateRights(params SavedEntity[] entitiesToUpdate) { var allowedEntities = new List <SavedEntity>(); if (entitiesToUpdate == null) { return(allowedEntities); } List <SavedEntity> savedEntities = UniversityEntitiesRepository.GetSaved(); foreach (SavedEntity entity in entitiesToUpdate) { SavedEntity savedEntity = savedEntities.FirstOrDefault(g => g.ID == entity.ID); if (savedEntity == null) { // Cannot update timetable for entity that is not saved continue; } if (savedEntity.LastUpdated == null || (DateTime.Now.TimeOfDay.Hours >= 5 && DateTime.Now.TimeOfDay.Hours < 7)) { // Update allowed if never updated before // Unlimited updates between 5 and 7 AM allowedEntities.Add(savedEntity); continue; } TimeSpan timeBeforeAnotherUpdate; if (savedEntity.LastUpdated.Value.TimeOfDay < Config.CistDailyTimetableUpdateTime) { timeBeforeAnotherUpdate = Config.CistDailyTimetableUpdateTime - savedEntity.LastUpdated.Value.TimeOfDay; } else { timeBeforeAnotherUpdate = TimeSpan.FromDays(1) - savedEntity.LastUpdated.Value.TimeOfDay + Config.CistDailyTimetableUpdateTime; } if (DateTime.Now - savedEntity.LastUpdated.Value > timeBeforeAnotherUpdate) { allowedEntities.Add(savedEntity); continue; } #if DEBUG allowedEntities.Add(savedEntity); #endif } return(allowedEntities); }
public void SaveCustomizedEntity() { if (chosenInGameObject == null) { Debug.LogError("can't save due to no in game object chosen"); return; } var savedEntityData = new SavedEntity { inGameObject = chosenInGameObject, savedBehaviours = new List <SavedBehaviour>() }; foreach (var addedBehaviour in userCustomDataByBehaviours.Keys) { var jsonData = userCustomDataByBehaviours[addedBehaviour]; if (jsonData.attachToEntity) { savedEntityData.savedBehaviours.Add(new SavedBehaviour { behaviourType = addedBehaviour, behaviourData = jsonData.jObject.ToString() }); } } var serializedEntity = JsonUtility.ToJson(savedEntityData); if (deserializedData != null && deserializedData.Contains(serializedEntity)) { Debug.LogError("an identical entity has been saved before. abort"); return; } savedEntities.savedEntitiesList.Add(savedEntityData); var serializedData = JsonUtility.ToJson(savedEntities); File.WriteAllText(saveEntitiesPath, serializedData); deserializedData = serializedData; Debug.Log("Entity Saved"); }
public ManageLessonsPage(SavedEntity savedEntity) { InitializeComponent(); Title += $": {savedEntity.Name}"; timetable = EventsRepository.GetTimetableLocal(savedEntity); if (timetable == null) { return; } List <LessonInfo> lessonInfo = timetable.LessonsInfo; lessons = new ObservableCollection <LessonInfo> ( timetable.Lessons() .Select(lesson => lessonInfo.FirstOrDefault(li => li.Lesson == lesson) ?? new LessonInfo { Lesson = lesson }) .OrderBy(lesson => !timetable.Events.Where(e => e.Start >= DateTime.Now).Any(e => e.Lesson == lesson.Lesson)) .ThenBy(lesson => lesson.Lesson.ShortName) ); LessonsList.ItemsSource = lessons; if (lessons.Count == 0) { NoSourceLayout.IsVisible = true; } MessagingCenter.Subscribe <LessonSettingsPage, LessonInfo>(this, "OneLessonSettingsChanged", (sender, newLessonSettings) => { for (int i = 0; i < lessons.Count; i++) { if (lessons[i].Lesson == newLessonSettings.Lesson) { lessons[i] = newLessonSettings; lessons[i].Settings.NotifyChanged(); break; } } }); }
private void UpdateEvents(SavedEntity selectedEntity) { if (selectedEntity == null) { Device.BeginInvokeOnMainThread(() => { Title = LN.AppName; }); TimetableLayout.IsVisible = false; NoSourceLayout.IsVisible = true; return; } else { Device.BeginInvokeOnMainThread(() => { Title = selectedEntity.Name; }); NoSourceLayout.IsVisible = false; TimetableLayout.IsVisible = true; } lock (enumeratingEvents) { timetableInfo = EventsRepository.GetEvents(selectedEntity) ?? new TimetableInfo(); if (ApplyHiddingSettings) { timetableInfo.ApplyLessonSettings(); } } Device.BeginInvokeOnMainThread(() => { if (timetableInfo.Count == 0) { Timetable.DataSource = null; } else { int retriesLeft = 25; Exception exception = null; do { try { lock (enumeratingEvents) { Timetable.MinDisplayDate = timetableInfo.StartDate(); Timetable.MaxDisplayDate = timetableInfo.EndDate(); Timetable.WeekViewSettings.StartHour = 0; Timetable.WeekViewSettings.EndHour = 24; Timetable.WeekViewSettings.StartHour = timetableInfo.StartTime().TotalHours; Timetable.WeekViewSettings.EndHour = timetableInfo.EndTime().TotalHours + (Timetable.TimeInterval / 60 / 2); Timetable.DayViewSettings.StartHour = 0; Timetable.DayViewSettings.EndHour = 24; Timetable.DayViewSettings.StartHour = timetableInfo.StartTime().TotalHours; Timetable.DayViewSettings.EndHour = timetableInfo.EndTime().TotalHours + (Timetable.TimeInterval / 60 / 2); } UpdateTimetableHeight(); // Fix for bug when view header isn`t updating on first swipe try { Timetable.VisibleDatesChangedEvent -= Timetable_VisibleDatesChangedEvent; DateTime currebtDate = visibleDates.Count > 0 ? visibleDates[0] : DateTime.Now; Timetable.NavigateTo(currebtDate.AddDays(7)); Timetable.NavigateTo(currebtDate); } catch { } finally { Timetable.VisibleDatesChangedEvent += Timetable_VisibleDatesChangedEvent; } Timetable.DataSource = timetableInfo.Events.Select(ev => new EventViewModel(ev)).ToList(); UpdateTimeLeft(); break; } catch (Exception ex) { // Potential error with the SfSchedule control. Needs investigation! exception = ex; } retriesLeft--; } while (retriesLeft > 0); if (retriesLeft == 0 && exception != null) { MessagingCenter.Send(Application.Current, MessageTypes.ExceptionOccurred, exception); DisplayAlert(LN.TimetableDisplay, LN.TimetableDisplayError, LN.Ok); return; } } }); }
protected virtual void OnSavedEntity(TEntity entity) { SavedEntity?.Invoke(this, new ComponentEventArgs <TEntity>(entity)); }
public static void OnSavedEntity(SavedEntityEventArgs args) { SavedEntity?.Invoke(null, args); }
public static Entity Instantiate(SavedEntity e) => new Entity { Pos = e.Pos, Age = e.Age, Type = Definitions.EntityTypes.First(t => t.Name == e.Type) };