コード例 #1
0
 public void OnTimePickerButtonClicked()
 {
     DialogManager.ShowTimePicker(Random.Range(0, 12), Random.Range(0, 60), Random.value > 0.5f, (int hour, int minute, bool isAM) =>
     {
         ToastManager.Show(hour + ":" + minute.ToString("00") + " " + (isAM ? "AM" : "PM"));
     }, MaterialColor.Random500());
 }
コード例 #2
0
        protected virtual void Color(MaterialColor color, MaterialToken token, StreamWriter writer)
        {
            writer.Write(token.ToString().ToLowerInvariant());

            if (color.IsSpectral)
            {
                writer.Write(" {0} {1}", MaterialColorToken.Spectral.ToString().ToLowerInvariant(), color.SpectralFileName);

                if (color.SpectralFactor != 1.0f)
                {
                    writer.Write(" {0}", color.SpectralFactor.ToString("F6", CultureInfo.InvariantCulture));
                }

                writer.WriteLine();
            }
            else
            {
                if (color.UseXYZColorSpace)
                {
                    writer.Write(" {0}", MaterialColorToken.XYZ.ToString().ToLowerInvariant());
                }

                writer.WriteLine(" {0} {1} {2}", color.Color.X.ToString("F6", CultureInfo.InvariantCulture), color.Color.Y.ToString("F6", CultureInfo.InvariantCulture), color.Color.Z.ToString("F6", CultureInfo.InvariantCulture));
            }
        }
コード例 #3
0
ファイル: Workspace.cs プロジェクト: willcraftia/Blocks
        // todo: Block にメソッドを作る?
        public int CreateMaterial(
            MaterialColor diffuseColor,
            MaterialColor emissiveColor,
            MaterialColor specularColor, float specularPower)
        {
            var materials = Block.Materials;

            for (int i = 0; i < materials.Count; i++)
            {
                var m = materials[i];
                if (m.DiffuseColor == diffuseColor &&
                    m.EmissiveColor == emissiveColor &&
                    m.SpecularColor == specularColor && m.SpecularPower == specularPower)
                {
                    return i;
                }
            }

            var material = new Material
            {
                DiffuseColor = diffuseColor,
                EmissiveColor = emissiveColor,
                SpecularColor = specularColor,
                SpecularPower = specularPower
            };
            materials.Add(material);

            return materials.Count - 1;
        }
コード例 #4
0
 public void OnDatePickerButtonClicked()
 {
     DialogManager.ShowDatePicker(Random.Range(1980, 2050), Random.Range(1, 12), Random.Range(1, 30), (System.DateTime date) =>
     {
         ToastManager.Show(date.ToString("dd MMM, yyyy"));
     }, MaterialColor.Random500());
 }
コード例 #5
0
        /// <summary>
        /// Sets the color of the target graphic. This is the recommended way to change the graphic's color (if any sort of highlighting is used) to reliably set the color without messing up the highlighting values.
        /// </summary>
        /// <param name="color">The color to set.</param>
        /// <param name="animate">Should the graphic fade to the new color? Otherwise the new color is applied instantly.</param>
        public void SetGraphicColor(Color color, bool animate = true)
        {
            if (animate)
            {
                m_NormalColor = color;

                if (m_AutoHighlightColor)
                {
                    m_HighlightColor = MaterialColor.HighlightColor(m_NormalColor, rippleData.Color, m_AutoHighlightBlendAmount);
                }

                m_CurrentColor  = highlightGraphic.color;
                m_AnimStartTime = Time.realtimeSinceStartup;

                if (m_AnimState == 0)
                {
                    m_AnimState = 2;
                }
            }
            else
            {
                m_NormalColor = color;

                if (m_AutoHighlightColor)
                {
                    m_HighlightColor = MaterialColor.HighlightColor(m_NormalColor, rippleData.Color, m_AutoHighlightBlendAmount);
                }

                highlightGraphic.color = m_AnimState == 1 ? m_HighlightColor : m_NormalColor;
                m_AnimState            = 0;
            }
        }
コード例 #6
0
        // todo: Block にメソッドを作る?
        public int CreateMaterial(
            MaterialColor diffuseColor,
            MaterialColor emissiveColor,
            MaterialColor specularColor, float specularPower)
        {
            var materials = Block.Materials;

            for (int i = 0; i < materials.Count; i++)
            {
                var m = materials[i];
                if (m.DiffuseColor == diffuseColor &&
                    m.EmissiveColor == emissiveColor &&
                    m.SpecularColor == specularColor && m.SpecularPower == specularPower)
                {
                    return(i);
                }
            }

            var material = new Material
            {
                DiffuseColor  = diffuseColor,
                EmissiveColor = emissiveColor,
                SpecularColor = specularColor,
                SpecularPower = specularPower
            };

            materials.Add(material);

            return(materials.Count - 1);
        }
コード例 #7
0
        //纹理测试
        static private void createMaterial(Database db, Transaction myT)
        {
            DBDictionary dic =
                (DBDictionary)myT.GetObject(db.MaterialDictionaryId, OpenMode.ForWrite, false);

            ImageFileTexture imfttr = new ImageFileTexture();

            imfttr.SourceFileName = @"D:\Geological Project\Geological Source\dbFiles\aaaaa.jpg";

            double uScale  = 1.0;
            double vScale  = 1.0;
            double uOffset = 0;
            double vOffset = 0;

            double[] p = new double[] {
                uScale, 0, 0, uScale *uOffset,
                0, vScale, 0, vScale *vOffset,
                0, 0, 1, 0,
                0, 0, 0, 1
            };

            Matrix3d mx = new Matrix3d(p);

            Mapper mapper = new Mapper(Projection.Planar, Tiling.Crop, Tiling.Crop,
                                       AutoTransform.TransformObject, mx);

            MaterialMap map = new MaterialMap(Source.File, imfttr, 1, mapper);


            EntityColor              eclr = new EntityColor(150, 150, 150);
            MaterialColor            mc   = new MaterialColor(Method.Override, 1, eclr);
            MaterialDiffuseComponent mdc  = new MaterialDiffuseComponent(mc, map);

            MaterialSpecularComponent   mck  = new MaterialSpecularComponent(mc, map, 0.5);
            MaterialOpacityComponent    moc  = new MaterialOpacityComponent(1, map);
            MaterialRefractionComponent mrfr = new MaterialRefractionComponent(2, map);

            Material Mat = new Material();

            Mat.Name             = "My Material";
            Mat.Description      = "New Material";
            Mat.Diffuse          = mdc;
            Mat.Specular         = mck;
            Mat.Refraction       = mrfr;
            Mat.Reflectivity     = 1;
            Mat.Reflection       = map;
            Mat.Opacity          = moc;
            Mat.Ambient          = mc;
            Mat.Bump             = map;
            Mat.SelfIllumination = 1;


            // MaterialDiffuseComponent diffuseColor = new MaterialDiffuseComponent(color, map);
            // material.Diffuse = diffuseColor;

            // material.Mode = Mode.Realistic;

            dic.SetAt(Mat.Name, Mat);
        }
コード例 #8
0
 public void applyMaterialColor(Material material, MaterialColor materialColor)
 {
     if (material != null)
     {
         material.SetColor(materialColor.property_2_Name, materialColor.property_2_Value);
         material.SetColor(materialColor.property_3_Name, materialColor.property_3_Value);
     }
 }
コード例 #9
0
    public void ChangeBarColor(int i)
    {
        Color barColor = i < m_BarColors.Length ? m_BarColors[i] : m_MaterialAppBar.panelGraphic.color.WithAlpha(0f);

        m_MaterialAppBar.SetPanelColor(barColor, true);
        m_MaterialAppBar.SetButtonsGraphicColors(MaterialColor.LightOrDarkElements(barColor) ? MaterialColor.iconLight : MaterialColor.iconDark, MaterialAppBar.ButtonElement.Icon, true);
        m_MaterialAppBar.SetTitleTextColor(MaterialColor.LightOrDarkElements(barColor) ? MaterialColor.textLight : MaterialColor.textDark, true);
    }
コード例 #10
0
ファイル: Material.cs プロジェクト: willcraftia/Blocks
 /// <summary>
 /// インスタンスを生成します。
 /// </summary>
 public Material()
 {
     // デフォルト値は BasicEffect のデフォルト値に合わせています。
     DiffuseColor = new MaterialColor(255, 255, 255);
     EmissiveColor = new MaterialColor(0, 0, 0);
     SpecularColor = new MaterialColor(255, 255, 255);
     SpecularPower = 16;
 }
コード例 #11
0
 public static Color GetMaterialColor(MaterialColor color)
 {
     if ((int)color >= VisualColors.Length)
     {
         return(UnityEngine.Color.white);
     }
     return(VisualColors[(int)color]);
 }
コード例 #12
0
ファイル: colors_demo.cs プロジェクト: JC-ut0/CubeGame
 public Palette(string name = null, MaterialColor primary = null, MaterialAccentColor accent = null,
     int threshold = 900)
 {
     this.name = name;
     this.primary = primary;
     this.accent = accent;
     this.threshold = threshold;
 }
コード例 #13
0
        public static void LoadTheme(MaterialColor theme = null)
        {
            MaterialColor.SetOnCurrentResourceThemeColor(theme);


            var service = DependencyService.Get <IStatusBar>();

            service?.SetStatusBarColor(ThemeColors.PrimaryDark);
        }
コード例 #14
0
 public _Page(
     string label,
     MaterialColor colors = null,
     IconData icon        = null
     )
 {
     this.label  = label;
     this.colors = colors;
     this.icon   = icon;
 }
コード例 #15
0
        private static void ApplyRandomColor(ref EntityCommandBuffer.Concurrent commandBuffer,
                                             ref Random randomGenerator, int entityInQueryIndex, Entity spawnedEntity)
        {
            Color         color         = Color.HSVToRGB(randomGenerator.NextFloat(), 0.6f, 0.6f);
            float4        colorValue    = new float4(color.r, color.g, color.b, color.a);
            MaterialColor materialColor = new MaterialColor {
                Value = colorValue
            };

            commandBuffer.AddComponent(entityInQueryIndex, spawnedEntity, materialColor);
        }
コード例 #16
0
 public void OnDatePickerButtonClicked()
 {
     DialogManager.ShowDatePicker(Random.Range(1980, 2050), Random.Range(1, 12), Random.Range(1, 30), (System.DateTime date) =>
     {
         ToastManager.Show(date.ToString("dd MMM, yyyy"));
         date1 = date.ToString("dd MMM, yyyy");
         print(date.ToString("dd MMM, yyyy"));
         //Selected_Date.text = date1;
         mydate = date1;
         PlayerPrefs.SetString("ndate", mydate);
     }, MaterialColor.Random500());
 }
コード例 #17
0
    private static ObjectId AddMaterial(string nameWood)
    {
        //
        Database           db    = Application.DocumentManager.MdiActiveDocument.Database;
        TransactionManager tm    = db.TransactionManager;
        Transaction        trans = tm.StartTransaction();
        Editor             ed    = Application.DocumentManager.MdiActiveDocument.Editor;

        ObjectId materialId = ObjectId.Null;

        try
        {
            DBDictionary materialDict;

            ObjectId materialDictId = db.MaterialDictionaryId;

            materialDict = trans.GetObject(materialDictId, OpenMode.ForWrite) as DBDictionary;

            Material material = new Material();
            material.Name = nameWood;

            WoodTexture   woodTexture = new WoodTexture();
            MaterialColor matColor, woodColor1, woodColor2;

            EntityColor entColor = new EntityColor(128, 0, 128);
            matColor = new MaterialColor(Method.Override, 1.0, entColor);
            EntityColor entColor2 = new EntityColor(128, 128, 0);
            woodColor1 = new MaterialColor(Method.Override, 1.0, entColor2);
            EntityColor entColor3 = new EntityColor(0, 128, 128);
            woodColor2 = new MaterialColor(Method.Override, 1.0, entColor3);

            woodTexture.Color1 = woodColor1;
            woodTexture.Color2 = woodColor2;
            MaterialMap materialMap = new MaterialMap(Source.Procedural, woodTexture, 0, null);

            material.Diffuse = new MaterialDiffuseComponent(matColor, materialMap);

            MaterialColor inheritColor = new MaterialColor(Method.Inherit, 1.0, entColor);
            material.Ambient  = matColor;
            material.Specular = new MaterialSpecularComponent(matColor, new MaterialMap(), 0.5);
            material.Mode     = Mode.Realistic;

            materialDict.SetAt(nameWood, material);
            materialId = material.ObjectId;
            trans.Commit();
        }
        catch (System.Exception e)
        {
            ed.WriteMessage(e.Message);
            trans.Abort();
        }
        return(materialId);
    }
コード例 #18
0
        private void AssertMaterialColor(MaterialColor m)
        {
            Assert.IsNotNull(m);

            Assert.IsTrue(m.Brightness >= -128 && m.Brightness <= 128); // [-128, 128]
            Assert.IsTrue(m.Contrast >= 0 && m.Contrast <= 2);          // [0, 2]
            Assert.IsTrue(m.Hue >= 0 && m.Hue < 360);                   // [0, 360)
            Assert.IsTrue(m.Saturation >= 0 && m.Saturation <= 2);      // [0, 2]
            Assert.IsTrue(m.Lightness >= 0 && m.Lightness <= 2);        // [0, 2]

            AssertRgbArray(m.Rgb);
        }
コード例 #19
0
    private void Start()
    {
        currentColor = MaterialColor.normal;
        var count = transform.childCount;

        list = new List <MeshRenderer>();
        for (int i = 0; i < count; i++)
        {
            list.Add(transform.GetChild(i).GetComponent <MeshRenderer>());
        }
        coroutine = RandomButton();
        StartCoroutine(coroutine);
    }
コード例 #20
0
        private static Color GetColorImpl(MaterialColor color, ColorDepth depth)
        {
            if (!_table.ContainsKey(color))
            {
                return(Default);
            }

            var colorRange = _table[color];

            return(colorRange.ContainsKey(depth)
                       ? colorRange[depth]
                       : colorRange[ColorDepth.Default]);
        }
コード例 #21
0
 internal static MaterialColorDto MapToDto(this MaterialColor materialColor)
 {
     return(new MaterialColorDto
     {
         Id = materialColor.Id,
         A = materialColor.A,
         B = materialColor.B,
         L = materialColor.L,
         Image = materialColor.Image,
         Name = materialColor.Name,
         Recipe = materialColor.Recipe,
         Material = materialColor.Material.MapToDto(),
         Reports = materialColor.Reports.Select(r => r.MapToDto()).ToList()
     });
 }
コード例 #22
0
        //public static MaterialColor Style { get; private set; }

        public static void LoadTheme(MaterialColor theme = null)
        {
            var themeOrRandom = theme ?? MaterialColor.GetRandom();

            //App.Style = themeOrRandom;

            MaterialColor.SetOnCurrentResourceThemeColor(themeOrRandom);

            var service = DependencyService.Get <IStatusBar>();

            service?.SetStatusBarColor(themeOrRandom.Primary);

            //var service = DependencyService.Get<IStatusBar>();
            //service?.SetStatusBarColor(ThemeColors.BackgroundPage);
        }
コード例 #23
0
        public override int GetHashCode()
        {
            unchecked
            {
                int hash = 17;

                hash = (hash * 23) + TintColor.GetHashCode();
                hash = (hash * 23) + TintOpacity.GetHashCode();
                hash = (hash * 23) + BackgroundSource.GetHashCode();
                hash = (hash * 23) + FallbackColor.GetHashCode();
                hash = (hash * 23) + MaterialColor.GetHashCode();

                return(hash);
            }
        }
コード例 #24
0
    public void OnTimePickerButtonClicked()
    {
        DialogManager.ShowTimePicker(DateTime.MinValue.AddHours(Random.Range(0, 24)).AddMinutes(Random.Range(0, 60)), time =>
        {
            ToastManager.Show(time.ToShortTimeString());
            time1 = time.ToShortTimeString();
            print(time.ToShortTimeString());
            print(time1);
            //PlayerPrefs.SetString("currentTime", time1);
            // Selected_time.text  = (string)time1 ;
            mytime = time1;
            PlayerPrefs.SetString("ApTime", mytime);
        }, MaterialColor.Random500());



        //showtime();
    }
コード例 #25
0
 private IEnumerator RandomButton()
 {
     while (true)
     {
         rnd         = Random.Range(0, list.Count);
         probability = Random.Range(0.0f, 1.0f);
         if (probability < 0.7)
         {
             list[rnd].material.color = Color.green;
             currentColor             = MaterialColor.green;
         }
         else
         {
             list[rnd].material.color = Color.red;
             currentColor             = MaterialColor.red;
         }
         yield return(new WaitForSeconds(waitTime));
     }
 }
コード例 #26
0
        public Node <INode> GetNode(string nodeName, IConstellationFileParser constellationFileParser)
        {
            switch (nodeName)
            {
            case Color.NAME:
                INode nodeColor = new Color() as INode;
                return(new Node <INode>(nodeColor));

            case MaterialColor.NAME:
                INode materialColor = new MaterialColor() as INode;
                return(new Node <INode>(materialColor));

            case ParticlesEmission.NAME:
                INode particleEmission = new ParticlesEmission() as INode;
                return(new Node <INode>(particleEmission));

            default:
                return(null);
            }
        }
コード例 #27
0
        /// <summary>
        /// Calculates the (absolute) highlight color based on the graphic color and ripple color.
        /// </summary>
        public void RefreshAutoHighlightColor()
        {
            if (!highlightGraphic)
            {
                return;
            }

            m_NormalColor = highlightGraphic.color;

            if (autoHighlightColor)
            {
                if (highlightWhen != HighlightActive.Never)
                {
                    highlightColor = MaterialColor.HighlightColor(m_NormalColor, rippleData.Color, m_AutoHighlightBlendAmount);

                    if (m_ImageIsTransparent)
                    {
                        m_NormalColor          = new Color(highlightColor.r, highlightColor.g, highlightColor.b, 0f);
                        highlightGraphic.color = m_NormalColor;
                    }
                }
            }
        }
コード例 #28
0
 public void ButtonUp(GameObject pressedObject)
 {
     pressedObject.GetComponent <MeshRenderer>().material.color = Color.blue;
     currentColor = MaterialColor.normal;
 }
コード例 #29
0
 public void OnTimePickerButtonClicked()
 {
     DialogManager.ShowTimePicker(DateTime.MinValue.AddHours(Random.Range(0, 24)).AddMinutes(Random.Range(0, 60)), time => ToastManager.Show(time.ToString("hh:mm tt")), MaterialColor.Random500());
 }
コード例 #30
0
        public Node <INode> GetNode(string nodeName)
        {
            switch (nodeName)
            {
            case DeltaTime.NAME:
                INode nodeDeltaTime = new DeltaTime() as INode;
                return(new Node <INode> (nodeDeltaTime));

            case KeyDown.NAME:
                INode nodeKeyDown = new KeyDown() as INode;
                return(new Node <INode> (nodeKeyDown));

            case Transform.NAME:
                INode nodeTransform = new Transform() as INode;
                return(new Node <INode> (nodeTransform));

            case Vec3.NAME:
                INode nodeVec3 = new Vec3() as INode;
                return(new Node <INode> (nodeVec3));

            case Key.NAME:
                INode nodeKey = new Key() as INode;
                return(new Node <INode> (nodeKey));

            case FindByName.NAME:
                INode nodeFindByName = new FindByName() as INode;
                return(new Node <INode> (nodeFindByName));

            case ObjectAttribute.NAME:
                INode nodeObjectAttribute = new ObjectAttribute() as INode;
                return(new Node <INode> (nodeObjectAttribute));

            case SplitVec3.NAME:
                INode nodeSplitVec3 = new SplitVec3() as INode;
                return(new Node <INode> (nodeSplitVec3));

            case Update.NAME:
                INode nodeUpdate = new Update() as INode;
                return(new Node <INode> (nodeUpdate));

            case LateUpdate.NAME:
                INode nodeLateUpdate = new LateUpdate() as INode;
                return(new Node <INode> (nodeLateUpdate));

            case MouseButtonDown.NAME:
                INode nodeMouseButtonDown = new MouseButtonDown() as INode;
                return(new Node <INode> (nodeMouseButtonDown));

            case PlayerPreferences.NAME:
                INode nodePlayerPref = new PlayerPreferences() as INode;
                return(new Node <INode> (nodePlayerPref));

            case SetActive.NAME:
                INode nodeSetActive = new SetActive() as INode;
                return(new Node <INode> (nodeSetActive));

            case LoadScene.NAME:
                INode nodeLoadScene = new LoadScene() as INode;
                return(new Node <INode> (nodeLoadScene));

            case MousePosition.NAME:
                INode nodeMousePosition = new MousePosition() as INode;
                return(new Node <INode> (nodeMousePosition));

            case ScreenToWorld.NAME:
                INode nodeScreenToWorld = new ScreenToWorld() as INode;
                return(new Node <INode> (nodeScreenToWorld));

            case LookAtPosition.NAME:
                INode nodeLookAt = new LookAtPosition() as INode;
                return(new Node <INode> (nodeLookAt));

            case GetComponent.NAME:
                INode nodeGetComponent = new GetComponent() as INode;
                return(new Node <INode> (nodeGetComponent));

            case Color.NAME:
                INode nodeColor = new Color() as INode;
                return(new Node <INode> (nodeColor));

            case Instantiate.NAME:
                INode instantiate = new Instantiate() as INode;
                return(new Node <INode> (instantiate));

            case MaterialColor.NAME:
                INode materialColor = new MaterialColor()  as INode;
                return(new Node <INode> (materialColor));

            case Quit.NAME:
                INode quit = new Quit() as INode;
                return(new Node <INode> (quit));

            case LoadTextFileAtPath.NAME:
                INode loadTextFileAtPath = new LoadTextFileAtPath() as INode;
                return(new Node <INode>(loadTextFileAtPath));

            case StreamingAssetsPath.NAME:
                INode streamingAssetsPath = new StreamingAssetsPath() as INode;
                return(new Node <INode>(streamingAssetsPath));

            case AddConstellationBehaviourFromJSON.NAME:
                INode addConstellationBehaviourFromJSON = new AddConstellationBehaviourFromJSON() as INode;
                return(new Node <INode>(addConstellationBehaviourFromJSON));

            default:
                return(null);
            }
        }
コード例 #31
0
        public override void Save(SaveContext saveContext)
        {
            base.Save(saveContext);

            var utility = saveContext.Utility;

            utility.Write(MaterialFlags);

            utility.Write((uint)TextureCoordinatesConfig);
            utility.Write((uint)TranslucencyKind);

            // NOTE: These are inline, not pointered to
            MaterialColor.Save(saveContext);
            Rasterization.Save(saveContext);
            FragmentOperation.Save(saveContext);

            // Texture coordinates
            utility.Write(UsedTextureCoordinates);

            for (var i = 0; i < TextureCoords.Length; i++)
            {
                var tc = TextureCoords[i];

                utility.Write(tc.SourceCoordIndex);
                utility.Write((uint)tc.MappingType);
                utility.Write(tc.ReferenceCameraIndex);
                utility.Write((uint)tc.TransformType);
                tc.Scale.Write(utility);
                utility.Write(tc.Rotation);
                tc.Translation.Write(utility);
                utility.Write(tc.Flags);
                tc.Transform.Write(utility);
            }

            // Texture mappers
            for (var i = 0; i < TextureMappers.Length; i++)
            {
                saveContext.WritePointerPlaceholder(TextureMappers[i]);
            }

            saveContext.WritePointerPlaceholder(ShaderReference);

            saveContext.WritePointerPlaceholder(FragmentShader);

            utility.Write(ShaderProgramDescIndex);

            // NOT SUPPORTED
            utility.Write(ShaderParametersCount);
            utility.Write(ShaderParametersPointerTableOffset);
            if (ShaderParametersCount != 0 || ShaderParametersPointerTableOffset != 0)
            {
                throw new NotImplementedException($"ModelMaterial Save: Shader Parameters UNSUPPORTED");
            }


            utility.Write(LightSetIndex); // Reference??
            utility.Write(FogIndex);      // Reference??

            // NOTE -- See SPICA GfxMaterial.cs for computations involving these hash functions.
            // I ASSUME if I never change any values in the material these never need recomputed.
            // Let's try to get by without needing this support right now...
            utility.Write(MaterialFlagsHash);
            utility.Write(ShaderParamsHash);
            utility.Write(TextureCoordsHash);
            utility.Write(TextureSamplersHash);
            utility.Write(TextureMappersHash);
            utility.Write(MaterialColorsHash);
            utility.Write(RasterizationHash);
            utility.Write(FragLightHash);
            utility.Write(FragLightLUTHash);
            utility.Write(FragLightLUTSampHash);
            utility.Write(TextureEnvironmentHash);
            utility.Write(AlphaTestHash);
            utility.Write(FragOpHash);
            utility.Write(UniqueId);

            /////////////////////////////
            // Begin saving dependent data

            TextureMappers.SaveList(saveContext);
            saveContext.SaveAndMarkReference(ShaderReference);
            saveContext.SaveAndMarkReference(FragmentShader);
        }
コード例 #32
0
        protected virtual MaterialColor Color(IMaterialReaderState state, MaterialToken token, string[] values)
        {
            if (values.Length < 2)
            {
                throw new InvalidDataException(string.Format("The <{0}> statement must specify a color. Line: {1}.", token, state.LineNumber));
            }

            var color = new MaterialColor();

            int index = 1;

            if (!Enum.TryParse <MaterialColorToken>(values[1], true, out var tokenType))
            {
                tokenType = MaterialColorToken.RGB;
            }

            switch (tokenType)
            {
            case MaterialColorToken.Spectral:
            {
                index++;

                if (values.Length - index < 1)
                {
                    throw new InvalidDataException(string.Format("The <{0}> spectral statement must specify a file name. Line: {1}.", token, state.LineNumber));
                }

                if (!Path.HasExtension(values[index]))
                {
                    throw new InvalidDataException(string.Format("A filename must have an extension. Value: <{0}>. Line: {1}.", values[index], state.LineNumber));
                }

                color.SpectralFileName = values[index];
                index++;

                if (values.Length > index)
                {
                    color.SpectralFactor = float.Parse(values[index], CultureInfo.InvariantCulture);
                    index++;
                }

                break;
            }

            case MaterialColorToken.XYZ:
            {
                index++;

                if (values.Length - index < 1)
                {
                    throw new InvalidDataException(string.Format("The <{0}> xyz statement must specify a color. Line: {1}.", token, state.LineNumber));
                }

                color.UseXYZColorSpace = true;

                var xyz = new XYZ()
                {
                    X = float.Parse(values[index], CultureInfo.InvariantCulture)
                };

                index++;

                if (values.Length > index)
                {
                    if (values.Length - index < 2)
                    {
                        throw new InvalidDataException(string.Format("The <{0}> xyz statement must specify a XYZ color. Line: {1}.", token, state.LineNumber));
                    }

                    xyz.Y  = float.Parse(values[index], CultureInfo.InvariantCulture);
                    xyz.Z  = float.Parse(values[index + 1], CultureInfo.InvariantCulture);
                    index += 2;
                }
                else
                {
                    xyz.Y = xyz.X;
                    xyz.Z = xyz.X;
                }

                color.Color = xyz;
                break;
            }

            default:
            {
                var rgb = new XYZ()
                {
                    X = float.Parse(values[index], CultureInfo.InvariantCulture)
                };

                index++;

                if (values.Length > index)
                {
                    if (values.Length - index < 2)
                    {
                        throw new InvalidDataException(string.Format("The <{0}> statement must specify a RGB color. Line: {1}.", token, state.LineNumber));
                    }

                    rgb.Y  = float.Parse(values[index], CultureInfo.InvariantCulture);
                    rgb.Z  = float.Parse(values[index + 1], CultureInfo.InvariantCulture);
                    index += 2;
                }
                else
                {
                    rgb.Y = rgb.X;
                    rgb.Z = rgb.X;
                }

                color.Color = rgb;
                break;
            }
            }

            if (index != values.Length)
            {
                throw new InvalidDataException(string.Format("The <{0}> statement has too many values. Line: {1}.", token, state.LineNumber));
            }

            return(color);
        }