예제 #1
0
        /// <summary>
        /// 子要素が削除されたときに呼ばれます。
        /// </summary>
        internal void ParentRemoved(EffectObject parent)
        {
            if (Parent == null)
            {
                throw new InvalidOperationException(
                          "EntityObjectに親が設定されていません。");
            }

            OnParentRemoved(parent);
            Parent = null;
        }
예제 #2
0
        /// <summary>
        /// 子要素が追加されたときに呼ばれます。
        /// </summary>
        internal void ParentAdded(EffectObject parent)
        {
            if (Parent != null)
            {
                throw new InvalidOperationException(
                          "EntityObjectにはすでに親が設定されています。");
            }

            Parent = parent;
            OnParentAdded(parent);
        }
예제 #3
0
        /// <summary>
        /// エレメントのアンロードを行います。
        /// </summary>
        protected override void OnTerminate()
        {
            if (this.prevBg != null)
            {
                this.prevBg.Terminate();
                this.prevBg = null;
            }

            if (this.nextBg != null)
            {
                this.nextBg.Terminate();
                this.nextBg = null;
            }

            base.OnTerminate();
        }
예제 #4
0
        /// <summary>
        /// 次に表示する背景エフェクトを設定します。
        /// </summary>
        public void AddBackgroundEffect(EffectObject effect, TimeSpan? duration = null)
        {
            // 同じエフェクトは表示しません。
            if ((this.prevBg == null && effect == null) ||
                (this.prevBg != null && effect != null &&
                 this.prevBg.Name == effect.Name))
            {
                return;
            }

            // 古い背景エフェクトの廃棄
            if (this.nextBg != null)
            {
                this.nextBg.Terminate();
                this.nextBg = null;
            }

            // 次の背景に設定
            this.nextBg = effect;

            StartTransition(duration);
        }
예제 #5
0
 protected virtual void OnParentRemoved(EffectObject parent)
 {
     // 何もしません。
 }
예제 #6
0
        protected override void OnParentRemoved(EffectObject parent)
        {
            base.OnParentRemoved(parent);

            GLContainer = null;
        }
예제 #7
0
        protected override void OnParentAdded(EffectObject parent)
        {
            base.OnParentAdded(parent);

            var glParent = parent as GLEvaluationElement;
            if (glParent != null && glParent.GLContainer != null)
            {
                InitializeOpenGL(glParent.GLContainer);
            }
        }
예제 #8
0
        /// <summary>
        /// 背景のトランジションを開始します。
        /// </summary>
        private void StartTransition(TimeSpan? duration)
        {
            var timeSpan = (duration != null ? duration.Value : DefaultFadeDuration);

            // animForeはnextBgに対応し、0⇒1でαが変わる。
            // animBackはprevBgに対応し、1⇒0でαが変わる。
            var animFore = new DoubleAnimationUsingKeyFrames
            {
                TargetProperty = "Opacity",
                FillBehavior = FillBehavior.HoldEnd,
            };
            animFore.KeyFrames.Add(new LinearDoubleKeyFrame(0.0, TimeSpan.Zero));
            animFore.KeyFrames.Add(new LinearDoubleKeyFrame(1.0, timeSpan));

            var animBack = new DoubleAnimationUsingKeyFrames
            {
                TargetProperty = "Opacity",
                FillBehavior = FillBehavior.HoldEnd,
            };
            animBack.KeyFrames.Add(new LinearDoubleKeyFrame(1.0, TimeSpan.Zero));
            animBack.KeyFrames.Add(new LinearDoubleKeyFrame(0.0, timeSpan));

            // アニメーション完了時は、nextBg(実際はprevBg)を廃棄します。
            animBack.Completed += (_, __) =>
                this.nextBg = null;

            // prevには古い背景が入っています。
            if (this.prevBg != null)
            {
                this.prevBg.Scenario.Children.Add(animBack);
            }
            if (this.nextBg != null)
            {
                this.nextBg.Scenario.Children.Add(animFore);
            }
            
            // アニメーション開始前にオブジェクトの内容を入れ替えます。
            Util.Swap(ref this.prevBg, ref this.nextBg);
        }
예제 #9
0
 protected virtual void OnParentRemoved(EffectObject parent)
 {
     // 何もしません。
 }
예제 #10
0
        /// <summary>
        /// 子要素が削除されたときに呼ばれます。
        /// </summary>
        internal void ParentRemoved(EffectObject parent)
        {
            if (Parent == null)
            {
                throw new InvalidOperationException(
                    "EntityObjectに親が設定されていません。");
            }

            OnParentRemoved(parent);
            Parent = null;
        }
예제 #11
0
        /// <summary>
        /// 子要素が追加されたときに呼ばれます。
        /// </summary>
        internal void ParentAdded(EffectObject parent)
        {
            if (Parent != null)
            {
                throw new InvalidOperationException(
                    "EntityObjectにはすでに親が設定されています。");
            }

            Parent = parent;
            OnParentAdded(parent);
        }
예제 #12
0
        /// <summary>
        /// エフェクトを削除します。
        /// </summary>
        public void RemoveEffect(EffectObject effect)
        {
            if (effect == null)
            {
                return;
            }

            Children.Remove(effect);
        }
예제 #13
0
        /// <summary>
        /// エフェクトを追加します。
        /// </summary>
        public void AddEffect(EffectObject effect)
        {
            if (effect == null)
            {
                return;
            }

            Children.Add(effect);
        }