using System.Diagnostics; namespace LibNoise.Operator { /// /// Provides a noise module that uses three source modules to displace each /// coordinate of the input value before returning the output value from /// a source module. [OPERATOR] /// public class Displace : ModuleBase { #region Constructors /// /// Initializes a new instance of Displace. /// public Displace() : base(4) { } /// /// Initializes a new instance of Displace. /// /// The input module. /// The displacement module of the x-axis. /// The displacement module of the y-axis. /// The displacement module of the z-axis. public Displace(ModuleBase input, ModuleBase x, ModuleBase y, ModuleBase z) : base(4) { Modules[0] = input; Modules[1] = x; Modules[2] = y; Modules[3] = z; } #endregion #region Properties /// /// Gets or sets the controlling module on the x-axis. /// public ModuleBase X { get { return Modules[1]; } set { Debug.Assert(value != null); Modules[1] = value; } } /// /// Gets or sets the controlling module on the z-axis. /// public ModuleBase Y { get { return Modules[2]; } set { Debug.Assert(value != null); Modules[2] = value; } } /// /// Gets or sets the controlling module on the z-axis. /// public ModuleBase Z { get { return Modules[3]; } set { Debug.Assert(value != null); Modules[3] = value; } } #endregion #region ModuleBase Members /// /// Returns the output value for the given input coordinates. /// /// The input coordinate on the x-axis. /// The input coordinate on the y-axis. /// The input coordinate on the z-axis. /// The resulting output value. public override double GetValue(double x, double y, double z) { Debug.Assert(Modules[0] != null); Debug.Assert(Modules[1] != null); Debug.Assert(Modules[2] != null); Debug.Assert(Modules[3] != null); var dx = x + Modules[1].GetValue(x, y, z); var dy = y + Modules[2].GetValue(x, y, z); var dz = z + Modules[3].GetValue(x, y, z); return Modules[0].GetValue(dx, dy, dz); } #endregion } }