require("common.class") local Dim = require("common.dimensions") local ServiceField = require("titlescreen.fields.service.servicefield") ---@class InputKnobField: ServiceField ---@field knob integer local InputKnobField = {} function InputKnobField:new(o) o = Inherit(self, ServiceField, o) o.knob = o.knob or nil return o end function InputKnobField:activate() end function InputKnobField:focus() end function InputKnobField:deactivate() end function InputKnobField:drawValue(deltaTime) local knobAngle = game.GetKnob(self.knob) local valuePosX = Dim.design.width / 2 local sliderPosX = valuePosX + 64 local sliderWidth = 256 local sliderHeight = ServiceField.SERVICE_DEFAULT_FONT_SIZE local sliderBgColor = {255, 0, 0, 255} local sliderFrameColor = ServiceField.SERVICE_DEFAULT_FONT_COLOR local sliderFrameWidth = 1 local maxValue = 1024 self.value = math.floor(knobAngle * maxValue / (2 * math.pi)) % maxValue --self.value = knobAngle --draw value gfx.BeginPath() gfx.Text(self.value, valuePosX, 0) --draw slider gfx.BeginPath() gfx.Rect(sliderPosX, 0, sliderWidth, sliderHeight) gfx.FillColor(table.unpack(sliderBgColor)) gfx.StrokeColor(table.unpack(sliderFrameColor)) gfx.StrokeWidth(sliderFrameWidth) gfx.Fill() gfx.Stroke() local sliderIndicatorX = sliderPosX + self.value * sliderWidth / maxValue local sliderIndicatorWidth = 4 local sliderIndicatorColor = {0, 255, 0, 255} --draw indicator gfx.BeginPath() gfx.Rect(sliderIndicatorX, sliderFrameWidth, sliderIndicatorWidth, sliderHeight - 2 * sliderFrameWidth) gfx.FillColor(table.unpack(sliderIndicatorColor)) gfx.Fill() end return InputKnobField