Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
EffectParameterRangeValueGenerator.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.ComponentModel;
6 
7 using SiliconStudio.Core;
8 using SiliconStudio.Paradox.Effects;
9 
10 namespace SiliconStudio.Paradox.Assets.Effect.ValueGenerators
11 {
12  /// <summary>
13  /// An value range generator.
14  /// </summary>
15  [DataContract("!fxparam.range")]
17  {
18  /// <summary>
19  /// Initializes a new instance of the <see cref="EffectParameterRangeValueGenerator"/> class.
20  /// </summary>
22  {
23  Step = 1;
24  }
25 
26  /// <summary>
27  /// Gets or sets 'from' value.
28  /// </summary>
29  /// <value>From.</value>
30  [DataMember(10)]
31  public double From { get; set; }
32 
33  /// <summary>
34  /// Gets or sets 'to' value.
35  /// </summary>
36  /// <value>The automatic.</value>
37  [DataMember(20)]
38  public double To { get; set; }
39 
40  /// <summary>
41  /// Gets or sets the step.
42  /// </summary>
43  /// <value>The step.</value>
44  [DataMember(30)]
45  [DefaultValue(1)]
46  public double Step { get; set; }
47 
48  IEnumerable<object> IEffectParameterValueGenerator.GenerateValues(ParameterKey key)
49  {
50  if (!((From < To && Step <= 0) || (From > To && Step >= 0))) // condition to have a finite set of value within the range
51  {
52  //var converType = key.PropertyType;
53  // TODO: code is not safe if step is zero or (from-to)/step is very high
54  if (From == To)
55  {
56  yield return key.ConvertValue(From);//Convert.ChangeType(From, converType));
57  }
58  else if (From < To)
59  {
60  for (var value = From; value - To < 0.000001; value += Step)
61  yield return key.ConvertValue(value);//Convert.ChangeType(value, converType);
62  }
63  else if (From > To)
64  {
65  for (var value = From; To - value < 0.000001; value += Step)
66  yield return key.ConvertValue(value);//Convert.ChangeType(value, converType);
67  }
68  }
69  }
70 
71  void IEffectParameterValueGenerator.AddValue(ParameterKey key, object value)
72  {
73  // do nothing
74  }
75  }
76 }
Key of an effect parameter.
Definition: ParameterKey.cs:15
EffectParameterRangeValueGenerator()
Initializes a new instance of the EffectParameterRangeValueGenerator class.