CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
Octaves.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10namespace CeresEngine::inline Math {
11
12 template<typename NoiseFunction, typename T = double> class Octaves {
13 private:
14 NoiseFunction noise;
15 size_t octaves;
16
17 public:
18 template<typename... Args> explicit Octaves(const size_t octaves, Args... args) : noise(std::forward<Args>(args)...), octaves(octaves) {}
19
20 public:
21 template<typename TT> static void multiply(TT& a, TT b) { a *= b; }
22
23 template<typename TT, typename... Ts> static void multiply(TT& a, Ts&... as, TT b) {
24 a *= b;
25 multiply(as..., b);
26 }
27
28 template<typename... Ts> T operator()(Ts... vs) const {
29 double result = 0.0;
30 double amp = 1.0;
31
32 for(size_t i = 0; i < octaves; ++i) {
33 result += noise(vs...) * amp;
34 multiply<Ts...>(vs..., 2.0);
35 amp *= 0.5;
36 }
37
38 return result;
39 }
40 };
41
42} // namespace CeresEngine::inline Math
Definition Octaves.hpp:12
T operator()(Ts... vs) const
Definition Octaves.hpp:28
Octaves(const size_t octaves, Args... args)
Definition Octaves.hpp:18
static void multiply(TT &a, Ts &... as, TT b)
Definition Octaves.hpp:23
NoiseFunction noise
Definition Octaves.hpp:14
size_t octaves
Definition Octaves.hpp:15
static void multiply(TT &a, TT b)
Definition Octaves.hpp:21
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Angle.hpp:20
Definition Span.hpp:668