/// <summary>
        ///     自身のインスタンスを作成して返す。
        /// </summary>
        /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param>
        /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param>
        /// <param name="runtime"></param>
        /// <param name="effect">ファンクションが属しているエフェクト。</param>
        /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param>
        /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param>
        /// <returns></returns>
        public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass)
        {
            var func = new ClearSetColor関数();

            func._sourceVariable = effect.D3DEffect.GetVariableByName(value);

            if (func._sourceVariable == null)
            {
                throw new InvalidMMEEffectShader例外($"ClearSetColor={value};が指定されましたが、変数\"{value}\"は見つかりませんでした。");
            }

            if (!func._sourceVariable.TypeInfo.Description.TypeName.ToLower().Equals("float4"))
            {
                throw new InvalidMMEEffectShader例外($"ClearSetColor={value};が指定されましたが、変数\"{value}\"はfloat4型ではありません。");
            }

            return(func);
        }
예제 #2
0
        public override void 次のファンクションへ遷移する(ScriptRuntime runtime)
        {
            int loopCount = runtime.LoopEndCount.Pop();
            int count     = runtime.LoopCounts.Pop();
            int begin     = runtime.LoopBegins.Pop();

            if (count < loopCount)
            {
                // 継続
                runtime.現在実行中のファンクションのインデックス = begin + 1;    // 最初の部分+1しておく
                runtime.LoopCounts.Push(count + 1);
                runtime.LoopEndCount.Push(loopCount);
                runtime.LoopBegins.Push(begin);
            }
            else
            {
                //終了
                runtime.現在実行中のファンクションのインデックス++;
            }
        }
예제 #3
0
        /// <summary>
        ///     自身のインスタンスを作成して返す。
        /// </summary>
        /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param>
        /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param>
        /// <param name="runtime"></param>
        /// <param name="effect">ファンクションが属しているエフェクト。</param>
        /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param>
        /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param>
        /// <returns></returns>
        public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass)
        {
            var func = new Pass関数();

            if (technique == null)
            {
                throw new InvalidMMEEffectShader例外("スクリプト内でPassを利用できるのはテクニックに適用されたスクリプトのみです。パスのスクリプトでは実行できません。");
            }

            // このメソッドの引数のパスは使わない。

            if (!technique.パスリスト.ContainsKey(value))
            {
                throw new InvalidMMEEffectShader例外($"スクリプトで指定されたテクニック中では指定されたパス\"{value}\"は見つかりませんでした。(スペルミス?)");
            }

            func._実行対象のパス = technique.パスリスト[value];

            return(func);
        }
예제 #4
0
        /// <summary>
        ///     自身のインスタンスを作成して返す。
        /// </summary>
        /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param>
        /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param>
        /// <param name="runtime"></param>
        /// <param name="effect">ファンクションが属しているエフェクト。</param>
        /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param>
        /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param>
        /// <returns></returns>
        public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass)
        {
            var func = new Clear関数();

            switch (value)
            {
            case "Color":
                func._対象 = 対象.Color;
                break;

            case "Depth":
                func._対象 = 対象.Depth;
                break;

            default:
                throw new InvalidMMEEffectShader例外($"Clear={value}が指定されましたが、\"{value}\"は指定可能ではありません。\"Clear\"もしくは\"Depth\"が指定可能です。");
            }

            func._index = index;

            return(func);
        }
예제 #5
0
 public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass)
 {
     return(new ScriptExternal関数());  // TODO: 未実装
 }
예제 #6
0
        /// <summary>
        ///     自身のインスタンスを作成して返す。
        /// </summary>
        /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param>
        /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param>
        /// <param name="runtime"></param>
        /// <param name="effect">ファンクションが属しているエフェクト。</param>
        /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param>
        /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param>
        /// <returns></returns>
        public override 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass)
        {
            var func = new LoopEnd関数();

            return(func);
        }
예제 #7
0
 public virtual void 次のファンクションへ遷移する(ScriptRuntime runtime)
 {
     runtime.現在実行中のファンクションのインデックス++;
 }
예제 #8
0
 /// <summary>
 ///     自身のインスタンスを作成して返す。
 /// </summary>
 /// <param name="index">連番。ファンクション名の末尾に付与される1桁の数値(0~9)。省略時は 0 。</param>
 /// <param name="value">値。ファンクション名と '=' を挟んだ右辺に記された文字列。</param>
 /// <param name="runtime"></param>
 /// <param name="effect">ファンクションが属しているエフェクト。</param>
 /// <param name="technique">ファンクションが属しているテクニック。パスに属している場合には null を指定。</param>
 /// <param name="pass">ファンクションが属しているパス。テクニックに属している場合には null を指定。</param>
 /// <returns></returns>
 public abstract 関数 ファンクションインスタンスを作成する(int index, string value, ScriptRuntime runtime, エフェクト effect, テクニック technique, パス pass);