Esempio n. 1
0
 private CONTROLOBJECT変数(数型 type, string itemName, string name, TargetObject target, bool isSelf)
 {
     _variableType = type;
     _itemName     = itemName;
     _name         = name;
     _target       = target;
     _isSelf       = isSelf;
 }
Esempio n. 2
0
        public override 数管理  数登録インスタンスを生成して返す(EffectVariable variable, エフェクト effect, int semanticIndex)
        {
            数型           type     = 0;
            TargetObject target   = TargetObject.UnUsed;
            string       itemName = null;
            string       typeName = variable.TypeInfo.Description.TypeName.ToLower();

            switch (typeName)
            {
            case "bool":
                type = 数型.Bool;
                break;

            case "float":
                type = 数型.Float;
                break;

            case "float3":
                type = 数型.Float3;
                break;

            case "float4":
                type = 数型.Float4;
                break;

            case "float4x4":
                type = 数型.Float4x4;
                break;

            default:
                break;
            }

            EffectVariable nameVariable = EffectParseHelper.アノテーションを取得する(variable, "name", "string");

            if (nameVariable == null)
            {
                throw new InvalidMMEEffectShader例外($"定義済みセマンティクス「CONTROLOBJECT」の適用されている変数「{typeName} {variable.Description.Name}:CONTROLOBJECT」に対してはアノテーション「string name」は必須ですが、指定されませんでした。");
            }

            string name = nameVariable.AsString().GetString();

            // Selfの場合はターゲットは自分自身となる

            if (name.ToLower().Equals("(self)"))
            {
                _isSelf = true;
            }
            else
            {
                // TODO: (OffscreenOwner)がnameに指定されたときの対応
            }


            EffectVariable itemVariable = EffectParseHelper.アノテーションを取得する(variable, "item", "string");

            if (itemVariable != null)
            {
                itemName = itemVariable.AsString().GetString();

                switch (itemName.ToLower())
                {
                case "x":
                    target = TargetObject.X;
                    break;

                case "y":
                    target = TargetObject.Y;
                    break;

                case "z":
                    target = TargetObject.Z;
                    break;

                case "xyz":
                    target = TargetObject.XYZ;
                    break;

                case "rx":
                    target = TargetObject.Rx;
                    break;

                case "ry":
                    target = TargetObject.Ry;
                    break;

                case "rz":
                    target = TargetObject.Rz;
                    break;

                case "rxyz":
                    target = TargetObject.Rxyz;
                    break;

                case "si":
                    target = TargetObject.Si;
                    break;

                case "tr":
                    target = TargetObject.Tr;
                    break;

                default:
                    target = type == 数型.Float ? TargetObject.FaceName : TargetObject.BoneName;
                    break;
                }

                if (NeedFloat.Contains(target) && type != 数型.Float)
                {
                    throw new InvalidMMEEffectShader例外($"定義済みセマンティクス「CONTROLOBJECT」の適用されている変数「{typeName} {variable.Description.Name}:CONTROLOBJECT」にはアノテーション「string item=\"{itemName}\"」が適用されていますが、「{itemName}」の場合は「float {variable.Description.Name}:CONTROLOBJECT」である必要があります。");
                }

                if (NeedFloat3.Contains(target) && type != 数型.Float3)
                {
                    throw new InvalidMMEEffectShader例外($"定義済みセマンティクス「CONTROLOBJECT」の適用されている変数「{typeName} {variable.Description.Name}:CONTROLOBJECT」にはアノテーション「string item=\"{itemName}\"」が適用されていますが、「{itemName}」の場合は「float3 {variable.Description.Name}:CONTROLOBJECT」である必要があります。");
                }
            }

            return(new CONTROLOBJECT変数(type, itemName, name, target, _isSelf));
        }