public RootMotionInfo GetAnimationRootMotionInfo(Animation animation, float currentTime) { RootMotionInfo rootMotion = new RootMotionInfo(); float duration = animation.Duration; float mid = duration * 0.5f; rootMotion.timeIsPastMid = currentTime > mid; TranslateTimeline timeline = animation.FindTranslateTimelineForBone(rootMotionBoneIndex); if (timeline != null) { rootMotion.start = timeline.Evaluate(0); rootMotion.current = timeline.Evaluate(currentTime); rootMotion.mid = timeline.Evaluate(mid); rootMotion.end = timeline.Evaluate(duration); return(rootMotion); } TranslateXTimeline xTimeline = animation.FindTimelineForBone <TranslateXTimeline>(rootMotionBoneIndex); TranslateYTimeline yTimeline = animation.FindTimelineForBone <TranslateYTimeline>(rootMotionBoneIndex); if (xTimeline != null || yTimeline != null) { rootMotion.start = TimelineExtensions.Evaluate(xTimeline, yTimeline, 0); rootMotion.current = TimelineExtensions.Evaluate(xTimeline, yTimeline, currentTime); rootMotion.mid = TimelineExtensions.Evaluate(xTimeline, yTimeline, mid); rootMotion.end = TimelineExtensions.Evaluate(xTimeline, yTimeline, duration); return(rootMotion); } return(rootMotion); }
/// <summary> /// Documented under IChronozoomSVC /// </summary> public IEnumerable <Tile> GetRecentlyUpdatedExhibits(int quantity = 6) { string defaultSuperCollection = (ConfigurationManager.AppSettings["DefaultSuperCollection"]).ToLower(); return(ApiOperation(delegate(User user, Storage storage) { List <Tile> tiles = new List <Tile>(); List <Exhibit> exhibits; exhibits = storage.Exhibits .Where (e => e.Collection.PubliclySearchable && e.ContentItems.Any (i => i.Order == 0 && i.MediaType == "image" ) ) .Include("Collection.SuperCollection") // } de facto includes .Include("Collection.User") // } collection entity .Include("ContentItems") .OrderByDescending(e => e.UpdatedTime) .Take(quantity) .ToList(); exhibits = exhibits.OrderBy(e => e.Title).ToList(); foreach (Exhibit exhibit in exhibits) { Timeline exhibitsTimeline = storage.Timelines.Where(t => t.Exhibits.Any(e => e.Id == exhibit.Id)).First(); List <Guid> ancestorTimelines = TimelineExtensions.Ancestors(exhibitsTimeline); ancestorTimelines.Reverse(); tiles.Add(new Tile { CollectionName = exhibit.Collection.Title, CuratorName = exhibit.Collection.User.DisplayName, Link = GetURLPath(exhibit.Collection, defaultSuperCollection) + "#" + "/t" + string.Join("/t", ancestorTimelines.ToArray()) + "/e" + exhibit.Id, Type = "e", Title = exhibit.Title, Year = exhibit.Year, CustomBackground = exhibit.ContentItems.Where(i => i.Order == 0).First().Uri, IsCosmosCollection = (exhibit.Collection.SuperCollection.Title.ToLower() == "chronozoom" && exhibit.Collection.Path == "cosmos"), IsCurrentCollection = false // we want to load the URL every link click }); } return tiles; })); }
Vector2 GetTimelineMovementDelta(float startTime, float endTime, TranslateXTimeline xTimeline, TranslateYTimeline yTimeline, Animation animation) { Vector2 currentDelta; if (startTime > endTime) // Looped { currentDelta = (TimelineExtensions.Evaluate(xTimeline, yTimeline, animation.Duration) - TimelineExtensions.Evaluate(xTimeline, yTimeline, startTime)) + (TimelineExtensions.Evaluate(xTimeline, yTimeline, endTime) - TimelineExtensions.Evaluate(xTimeline, yTimeline, 0)); } else if (startTime != endTime) // Non-looped { currentDelta = TimelineExtensions.Evaluate(xTimeline, yTimeline, endTime) - TimelineExtensions.Evaluate(xTimeline, yTimeline, startTime); } else { currentDelta = Vector2.zero; } return(currentDelta); }
public IEnumerable <Tile> GetUserFavorites(string currentSuperCollection = "", string currentCollection = "") { currentCollection = currentCollection == null ? "" : currentCollection.ToLower(); currentSuperCollection = currentSuperCollection == null ? "" : currentSuperCollection.ToLower(); string defaultSuperCollection = (ConfigurationManager.AppSettings["DefaultSuperCollection"]).ToLower(); List <Tile> tiles = new List <Tile>(); return(ApiOperation(delegate(User user, Storage storage) { // TODO: Ensure following line is commented out prior to check-in. Overrides user so can test other people's favorites. // user = storage.Users.Where(u => u.DisplayName == "putnamehere").FirstOrDefault(); #if RELEASE if (user == null) { return tiles; } #endif Guid userId = (user == null || user.Id == null) ? Guid.Empty : user.Id; var cacheKey = string.Format(CultureInfo.InvariantCulture, "UserFavorites - {0}", userId); if (Cache.Contains(cacheKey)) { return (List <Tile>)Cache.Get(cacheKey); } var triple = storage.GetTriplet(String.Format("czusr:{0}", user != null ? user.Id : Guid.Empty), "czpred:favorite").FirstOrDefault(); if (triple == null) { return tiles; } foreach (var t in triple.Objects) { var objName = TripleName.Parse(t.Object); if (objName.Prefix == "cztimeline") { Timeline timeline = storage.Timelines .Where(item => item.Id == new Guid(objName.Name)) .Include("Collection.User") .Include("Collection.SuperCollection") .FirstOrDefault(); if (timeline != null) { List <Guid> ancestorTimelines = TimelineExtensions.Ancestors(timeline); ancestorTimelines.Reverse(); tiles.Add(new Tile { CollectionName = timeline.Collection.Title, CuratorName = timeline.Collection.User.DisplayName, Link = GetURLPath(timeline.Collection, defaultSuperCollection) + "#" + "/t" + string.Join("/t", ancestorTimelines.ToArray()), Type = "t", Title = timeline.Title, CustomBackground = GetTileBackgroundImage(timeline.Collection.Theme), IsCosmosCollection = (timeline.Collection.SuperCollection.Title.ToLower() == "chronozoom" && timeline.Collection.Path == "cosmos"), IsCurrentCollection = ( ( timeline.Collection.SuperCollection.Title == currentSuperCollection || ((currentSuperCollection == "") && (timeline.Collection.SuperCollection.Title == defaultSuperCollection)) ) && ( timeline.Collection.Path == currentCollection || ((currentCollection == "") && timeline.Collection.Default) ) ) }); } } } tiles = tiles.OrderBy(t => t.CollectionName).ThenBy(t => t.Title).ToList(); Cache.Add(cacheKey, tiles); return tiles; })); }