64 lines
1.8 KiB
Lua
64 lines
1.8 KiB
Lua
require("common.class")
|
|
local Dim = require("common.dimensions")
|
|
local ServiceField = require("titlescreen.fields.service.servicefield")
|
|
|
|
---@class InputKnobField: ServiceField
|
|
---@field knob integer
|
|
local InputKnobField = {
|
|
__tostring = function () return "InputKnobField" end,
|
|
}
|
|
|
|
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
|