Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "base/internal/ui/reflexcore"
- mat_stack =
- {
- userData = {};
- };
- registerWidget("mat_stack");
- function mat_stack:initialize()
- self.userData = loadUserData();
- CheckSetDefaultValue(self, "userData", "table", {});
- CheckSetDefaultValue(self.userData, "alpha1", "number", 255);
- CheckSetDefaultValue(self.userData, "alpha2", "number", 255);
- end
- function mat_stack:drawOptions(x, y)
- local u = self.userData;
- uiLabel("Transparency (white boxes)", x, y);
- u.alpha1 = uiEditBox(u.alpha1, x+230, y, 80);
- y = y + 40;
- uiLabel("Transparency (black boxes)", x, y);
- u.alpha2 = uiEditBox(u.alpha2, x+230, y, 80);
- y = y + 40;
- saveUserData(u);
- end
- function draw_box(x, y, w, h, r, color, stroke, strokeColor)
- nvgBeginPath();
- nvgRoundedRect(x, y, w, h, r);
- nvgFillColor(color);
- nvgFill();
- if stroke then
- nvgStrokeWidth(2);
- nvgStrokeColor(strokeColor);
- nvgStroke();
- end
- end
- function mat_stack:draw()
- if not shouldShowHUD() then return end;
- local player = getPlayer();
- local alpha1 = self.userData.alpha1;
- local alpha2 = self.userData.alpha2;
- -- colors
- local colorTop = Color(255,255,255,alpha1);
- local colorMid = Color(255,176,14,alpha1);
- local colorLow = Color(236,0,0,alpha1);
- local iconColor;
- if player.armorProtection == 0 then iconColor = Color(2,167,46,255) end
- if player.armorProtection == 1 then iconColor = Color(245,215,50,255) end
- if player.armorProtection == 2 then iconColor = Color(236,0,0,255) end
- local healthColor = Color(255,255,255,alpha1);
- local armorColor = Color(255,255,255,alpha1);
- -- thresholds
- local top = 100;
- local mid = 65;
- local low = 30;
- -- health
- if player.health >= top then
- healthColor = colorTop;
- end
- if player.health < top then
- local x = (player.health - mid) / (top - mid);
- healthColor.r = x * colorTop.r + (1-x) * colorMid.r;
- healthColor.g = x * colorTop.g + (1-x) * colorMid.g;
- healthColor.b = x * colorTop.b + (1-x) * colorMid.b;
- end
- if player.health <= mid then
- local x = (player.health - low) / (mid - low);
- healthColor.r = x * colorMid.r + (1-x) * colorLow.r;
- healthColor.g = x * colorMid.g + (1-x) * colorLow.g;
- healthColor.b = x * colorMid.b + (1-x) * colorLow.b;
- end
- -- armor
- if player.armor >= top then
- armorColor = colorTop;
- end
- if player.armor < top then
- local x = (player.armor - mid) / (top - mid);
- armorColor.r = x * colorTop.r + (1-x) * colorMid.r;
- armorColor.g = x * colorTop.g + (1-x) * colorMid.g;
- armorColor.b = x * colorTop.b + (1-x) * colorMid.b;
- end
- if player.armor <= mid then
- local x = (player.armor - low) / (mid - low);
- armorColor.r = x * colorMid.r + (1-x) * colorLow.r;
- armorColor.g = x * colorMid.g + (1-x) * colorLow.g;
- armorColor.b = x * colorMid.b + (1-x) * colorLow.b;
- end
- -- style
- local color_IconBox = Color(0,0,0,alpha2);
- local color_HealthBox = healthColor;
- local color_ArmorBox = armorColor;
- local boxStroke = false;
- local boxStrokeColor = boxColor;
- local roundness = 0;
- local space = 0;
- -- boxes
- local size_Boxes = 80;
- local width_IconBox = size_Boxes;
- local height_IconBox = size_Boxes;
- local width_HealthBox = 105;
- local height_HealthBox = size_Boxes;
- local width_ArmorBox = width_HealthBox;
- local height_ArmorBox = size_Boxes;
- local x_IconBox = -width_IconBox / 2;
- local y_IconBox = -width_IconBox / 2;
- local x_HealthBox = x_IconBox - space - width_HealthBox;
- local y_HealthBox = y_IconBox;
- local x_ArmorBox = width_IconBox / 2 + space;
- local y_ArmorBox = y_IconBox;
- -- draw
- draw_box(x_IconBox, y_IconBox, width_IconBox, height_IconBox, roundness, color_IconBox);
- draw_box(x_HealthBox, y_HealthBox, width_HealthBox, height_HealthBox, roundness, color_HealthBox);
- draw_box(x_ArmorBox, y_ArmorBox, width_ArmorBox, height_ArmorBox, roundness, color_ArmorBox);
- -- content
- local pad = 10;
- local size_Icon = size_Boxes / 2 - pad;
- local x_Icon = x_IconBox + width_IconBox / 2;
- local y_Icon = y_IconBox + height_IconBox / 2;
- local size_Health = size_Boxes * 1.1;
- local x_Health = x_HealthBox + width_HealthBox / 2;
- local y_Health = y_HealthBox + height_HealthBox / 2;
- local size_Armor = size_Health;
- local x_Armor = x_ArmorBox + width_ArmorBox / 2;
- local y_Armor = y_ArmorBox + height_ArmorBox / 2;
- -- draw
- nvgFillColor(iconColor);
- nvgSvg("internal/ui/icons/armor", x_Icon, y_Icon, size_Icon);
- nvgFontSize(size_Health);
- --nvgFontFace("TitilliumWeb-Bold");
- nvgTextAlign(NVG_ALIGN_CENTER, NVG_ALIGN_MIDDLE);
- nvgFontBlur(0);
- nvgFillColor(Color(0,0,0,255));
- nvgText(x_Health, y_Health, player.health);
- nvgFillColor(Color(0,0,0,255));
- nvgText(x_Armor, y_Armor, player.armor);
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement