github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgTime/TimeRecoverInt.go (about) 1 package kmgTime 2 3 import ( 4 "math" 5 "time" 6 ) 7 8 //类似于体力一样的,每隔一定时间就会恢复一点(加一点)的值, 9 //没有负值,不会超过最大值 10 //如果执行时间向前退,不会报错 11 type TimeRecoverInt struct { 12 Num int 13 Max int 14 LastRecoverTime time.Time 15 AddDuration time.Duration 16 } 17 18 func (t *TimeRecoverInt) Sync(now time.Time) { 19 timeDuring := now.Sub(t.LastRecoverTime) 20 staminaTimes := float64(timeDuring) / float64(t.AddDuration) 21 addStamina := int(math.Floor(staminaTimes)) 22 //添加体力后,体力满了 23 if (addStamina + t.Num) >= t.Max { 24 t.LastRecoverTime = now 25 t.Num = t.Max 26 return 27 } 28 //可能是数据错误,重置 29 if addStamina < 0 { 30 t.LastRecoverTime = now 31 return 32 } 33 //没有添加体力 34 if addStamina == 0 { 35 return 36 } 37 t.Num = addStamina + t.Num 38 t.LastRecoverTime = t.LastRecoverTime.Add(t.AddDuration * time.Duration(addStamina)) 39 return 40 } 41 42 func (t *TimeRecoverInt) Full(now time.Time) { 43 t.Num = t.Max 44 t.LastRecoverTime = now 45 }