-
Notifications
You must be signed in to change notification settings - Fork 0
/
regenerator.go
48 lines (40 loc) · 1.1 KB
/
regenerator.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
package main
import (
"math"
"time"
)
var NoRegeneration = &Regenerator{}
type Regenerator struct {
Regeneration float64
RegeneratorAccumulator float64
}
func (receiver *Regenerator) Update(timeLeft time.Duration) error {
if receiver.Regeneration > 0 {
receiver.RegeneratorAccumulator += float64(timeLeft) * (receiver.Regeneration / float64(time.Second))
logger.Println(float64(timeLeft) * (receiver.Regeneration / float64(time.Second)))
}
return nil
}
func (receiver *Regenerator) GetAccumulatedRaw() float64 {
var r float64
r, receiver.RegeneratorAccumulator = receiver.RegeneratorAccumulator, 0
return r
}
func (receiver *Regenerator) GetAccumulated() int {
var r float64
if receiver.RegeneratorAccumulator >= 1.0 {
r = math.Ceil(receiver.RegeneratorAccumulator)
receiver.RegeneratorAccumulator -= r
return int(r)
}
return 0
}
func (receiver *Regenerator) Reset() {
receiver.RegeneratorAccumulator = 0.0
}
func NewRegenerator(regenPerSecond float64) (*Regenerator, error) {
return &Regenerator{
Regeneration: regenPerSecond,
RegeneratorAccumulator: 0,
}, nil
}