private CONTROLOBJECT変数(数型 type, string itemName, string name, TargetObject target, bool isSelf) { _variableType = type; _itemName = itemName; _name = name; _target = target; _isSelf = isSelf; }
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)); }