Exemple #1
0
        private bool Reorder(IEnumerable <BSPImage> items)
        {
            var changed = false;

            if (physics != null)
            {
                changed |= physics.Apply(items.Cast <IPhysicsItem>(), camera);
            }

            var index = 0;

            foreach (var item in items)
            {
                if (physics == null && (!item.Transform.IsIdentity || item.Angle2D != 0))
                {
                    item.LinearVelocity    = new Vector3D();
                    item.AngularVelocity2D = 0;
                    item.AtRest            = false;

                    var m = RewindMatrix(item.Transform, 0.8);

                    item.Transform = (Math.Abs(m.OffsetX) + Math.Abs(m.OffsetY) + Math.Abs(m.OffsetZ)) > 0.1
                                                ? m
                                                : Matrix3D.Identity;

                    item.Angle2D = (Math.Abs(item.Angle2D) > 0.01)
                                                ? item.Angle2D * 0.8
                                                : 0;

                    changed = true;
                }

                if (!item.Rendered)
                {
                    photoCanvas.Children.Add(item.Visual);
                    item.Rendered = true;
                    changed       = true;
                }

                if (!item.Visual.GetValue(Canvas.ZIndexProperty).Equals(index))
                {
                    item.Visual.SetValue(Canvas.ZIndexProperty, index);
                    changed = true;
                }

                ++index;
            }

            return(changed);
        }