1/**
2 * Copyright (c) 2011, Novyon Events
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * - Redistributions of source code must retain the above copyright notice, this
10 * list of conditions and the following disclaimer.
11 *
12 * - Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * @author Anthyon
29 */
30package com.jme3.terrain.noise.basis;
31
32import com.jme3.terrain.noise.Basis;
33
34/**
35 * A simple aggregator basis. Takes two basis functions and a rate and return
36 * some mixed values
37 *
38 * @author Anthyon
39 *
40 */
41public class NoiseAggregator extends Noise {
42
43	private final float rate;
44	private final Basis a;
45	private final Basis b;
46
47	public NoiseAggregator(final Basis a, final Basis b, final float rate) {
48		this.a = a;
49		this.b = b;
50		this.rate = rate;
51	}
52
53	@Override
54	public void init() {
55		this.a.init();
56		this.b.init();
57	}
58
59	@Override
60	public float value(final float x, final float y, final float z) {
61		return this.a.value(x, y, z) * (1 - this.rate) + this.rate * this.b.value(x, y, z);
62	}
63
64}
65