Пример #1
0
        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);
        }
Пример #2
0
        /// <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;
            }));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
            }));
        }