package effects import ( "fmt" "git.aiterp.net/lucifer3/server/device" "time" ) type VRange struct { States []device.State `json:"states"` Variable string `json:"variable"` Min float64 `json:"min"` Max float64 `json:"max"` Interpolate bool `json:"interpolate"` } func (e VRange) VariableName() string { return e.Variable } func (e VRange) VariableState(_, _ int, value float64) device.State { if value <= e.Min { return e.States[0] } else if value >= e.Max { return e.States[len(e.States)-1] } return gradientStateFactor(e.States, e.Interpolate, (value-e.Min)/(e.Max-e.Min)) } func (e VRange) State(_, _, _ int) device.State { if len(e.States) == 0 { return device.State{} } return e.States[0] } func (e VRange) Frequency() time.Duration { return 0 } func (e VRange) EffectDescription() string { return fmt.Sprintf( "VRange(states:%s, name:%s, range:%.1f..%.1f)", statesDescription(e.States), e.Variable, e.Min, e.Max, ) }