/
clamp.go
51 lines (40 loc) · 1.1 KB
/
clamp.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package noiselib
const DefaultClampLowerBound = -1.0
const DefaultClampUpperBound = 1.0
type Clamp struct {
SourceModule []Module
LowerBound, UpperBound float64
}
func (c Clamp) GetSourceModule(index int) Module {
return c.SourceModule[index]
}
func (c Clamp) SetSourceModule(index int, sourceModule Module) {
c.SourceModule[index] = sourceModule
}
func (c Clamp) GetValue(x, y, z float64) float64 {
if c.SourceModule[0] == nil {
panic("Clamp must have one source")
}
value := c.SourceModule[0].GetValue(x, y, z)
if value < c.LowerBound {
return c.LowerBound
} else if value > c.UpperBound {
return c.UpperBound
} else {
return value
}
}
func (c *Clamp) SetBounds(lowerBound, upperBound float64) {
if lowerBound > upperBound {
panic("Clamps LowerBound must be <= UpperBound")
}
c.LowerBound = lowerBound
c.UpperBound = upperBound
}
func DefaultClamp(module Module) *Clamp {
clamp := Clamp{SourceModule: make([]Module, ClampModuleCount),
UpperBound:DefaultClampUpperBound,
LowerBound: DefaultClampLowerBound}
clamp.SourceModule[0] = module
return &clamp
}