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 |