ExperimentalGear/scripts/titlescreen/fields/service/inputknobfield.lua

61 lines
1.7 KiB
Lua

require("common.class")
local dim = require("common.dimensions")
local ServiceField = require("titlescreen.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