57 | function RoundStatusBar:delete() |
58 | if self.overlayFront ~= nil then |
59 | self.overlayFront:delete() |
60 | end |
61 | if self.overlayBackground1 ~= nil then |
62 | self.overlayBackground1:delete() |
63 | end |
64 | if self.overlayBackground2 ~= nil then |
65 | self.overlayBackground2:delete() |
66 | end |
67 | if self.overlayValue1 ~= nil then |
68 | self.overlayValue1:delete() |
69 | end |
70 | if self.overlayValue2 ~= nil then |
71 | self.overlayValue2:delete() |
72 | end |
73 | if self.overlayMarker ~= nil then |
74 | self.overlayMarker:delete() |
75 | end |
76 | end |
15 | function RoundStatusBar.new(frontFilename, valueFilename, markerFilename, color, valueColor, bgColor, radius, markerSize, x, y, width, height, valueWidth, valueHeight, custom_mt) |
16 | if custom_mt == nil then |
17 | custom_mt = RoundStatusBar_mt |
18 | end |
19 | local self = setmetatable({}, custom_mt) |
20 | |
21 | self.value = 0 |
22 | self.width = width |
23 | self.height = height |
24 | self.radius = radius |
25 | |
26 | self.offsetX = (width-valueWidth)/2 |
27 | self.offsetY = (height-valueHeight)/2 |
28 | |
29 | self.x = x |
30 | self.y = y |
31 | if frontFilename ~= nil then |
32 | self.overlayFront = Overlay.new(frontFilename, x, y, width, height) |
33 | self.overlayFront:setColor(unpack(color)) |
34 | end |
35 | self.overlayBackground1 = Overlay.new(valueFilename, x+self.offsetX, y+self.offsetY, valueWidth, valueHeight) |
36 | self.overlayBackground2 = Overlay.new(valueFilename, x+self.offsetX, y+self.offsetY, valueWidth, valueHeight) |
37 | self.overlayValue1 = Overlay.new(valueFilename, x+self.offsetX, y+self.offsetY, valueWidth, valueHeight) |
38 | self.overlayValue2 = Overlay.new(valueFilename, x+self.offsetX, y+self.offsetY, valueWidth, valueHeight) |
39 | self.overlayBackground1:setColor(unpack(bgColor)) |
40 | self.overlayBackground2:setColor(unpack(bgColor)) |
41 | self.overlayValue1:setColor(unpack(valueColor)) |
42 | self.overlayValue2:setColor(unpack(valueColor)) |
43 | |
44 | if markerFilename ~= nil then |
45 | self.overlayMarker = Overlay.new(markerFilename, x, y, markerSize[1], markerSize[2]) |
46 | self.overlayMarker:setColor(unpack(valueColor)) |
47 | end |
48 | |
49 | self.overlayValue2:setRotation(math.rad(180), self.overlayValue2.width*0.5, self.overlayValue2.height*0.5) |
50 | self:setValue(0) |
51 | |
52 | return self |
53 | end |
109 | function RoundStatusBar:render() |
110 | if self.value > 0.5 then |
111 | self.overlayBackground2:render() |
112 | end |
113 | self.overlayValue1:render() |
114 | |
115 | if self.value > 0.5 then |
116 | self.overlayValue2:render() |
117 | else |
118 | self.overlayBackground2:render() |
119 | self.overlayBackground1:render() |
120 | end |
121 | if self.overlayFront ~= nil then |
122 | self.overlayFront:render() |
123 | end |
124 | if self.overlayMarker ~= nil then |
125 | self.overlayMarker:render() |
126 | end |
127 | end |
80 | function RoundStatusBar:setPosition(x, y) |
81 | self.x = Utils.getNoNil(x, self.x) |
82 | self.y = Utils.getNoNil(y, self.y) |
83 | |
84 | self.overlayValue1:setPosition(self.x+self.offsetX, self.y+self.offsetY) |
85 | self.overlayValue2:setPosition(self.x+self.offsetX, self.y+self.offsetY) |
86 | self.overlayBackground1:setPosition(self.x+self.offsetX, self.y+self.offsetY) |
87 | self.overlayBackground2:setPosition(self.x+self.offsetX, self.y+self.offsetY) |
88 | if self.overlayFront ~= nil then |
89 | self.overlayFront:setPosition(self.x, self.y) |
90 | end |
91 | end |
95 | function RoundStatusBar:setValue(newValue) |
96 | self.value = MathUtil.clamp(newValue, 0, 1) |
97 | self.overlayValue1:setRotation(math.rad(((1-self.value) * 360)), self.overlayValue1.width*0.5, self.overlayValue1.height*0.5) |
98 | self.overlayBackground1:setRotation(math.rad(180 + (-self.value * 360)), self.overlayBackground1.width*0.5, self.overlayBackground1.height*0.5) |
99 | |
100 | if self.overlayMarker ~= nil then |
101 | local markerPosX = math.cos(math.rad(((1-self.value) * 360) + 90)) * self.radius[1] |
102 | local markerPosY = math.sin(math.rad(((1-self.value) * 360) + 90)) * self.radius[2] |
103 | self.overlayMarker:setPosition(self.x + self.width/2 - self.overlayMarker.width/2 + markerPosX, self.y + self.height/2 - self.overlayMarker.height/2 + markerPosY) |
104 | end |
105 | end |