Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "base/internal/ui/reflexcore"
- mat_clock =
- {
- userData = {};
- };
- registerWidget("mat_clock");
- function mat_clock:initialize()
- self.userData = loadUserData();
- CheckSetDefaultValue(self, "userData", "table", {});
- CheckSetDefaultValue(self.userData, "showSpawnTime", "boolean", true);
- CheckSetDefaultValue(self.userData, "countUp", "boolean", true);
- CheckSetDefaultValue(self.userData, "warmupClock", "boolean", true);
- CheckSetDefaultValue(self.userData, "alpha1", "number", 255);
- CheckSetDefaultValue(self.userData, "alpha2", "number", 255);
- end
- function mat_clock:drawOptions(x, y)
- local u = self.userData;
- u.showSpawnTime = uiCheckBox(u.showSpawnTime, "Show respawn times", x, y);
- y = y + 40;
- u.countUp = uiCheckBox(u.countUp, "Count up", x, y);
- y = y + 40;
- u.warmupClock = uiCheckBox(u.warmupClock, "Clock during warmup", x, y);
- y = y + 40;
- 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
- local PickupVis = {};
- PickupVis[PICKUP_TYPE_ARMOR50] = {};
- PickupVis[PICKUP_TYPE_ARMOR50].svg = "internal/ui/icons/armor";
- PickupVis[PICKUP_TYPE_ARMOR50].color = Color(0,255,0);
- PickupVis[PICKUP_TYPE_ARMOR50].time = 0;
- PickupVis[PICKUP_TYPE_ARMOR50].spawn = 25;
- PickupVis[PICKUP_TYPE_ARMOR50].delta = 25;
- PickupVis[PICKUP_TYPE_ARMOR100] = {};
- PickupVis[PICKUP_TYPE_ARMOR100].svg = "internal/ui/icons/armor";
- PickupVis[PICKUP_TYPE_ARMOR100].color = Color(255,255,0);
- PickupVis[PICKUP_TYPE_ARMOR100].time = 0;
- PickupVis[PICKUP_TYPE_ARMOR100].spawn = 25;
- PickupVis[PICKUP_TYPE_ARMOR100].delta = 25;
- PickupVis[PICKUP_TYPE_ARMOR150] = {};
- PickupVis[PICKUP_TYPE_ARMOR150].svg = "internal/ui/icons/armor";
- PickupVis[PICKUP_TYPE_ARMOR150].color = Color(255,0,0);
- PickupVis[PICKUP_TYPE_ARMOR150].time = 5;
- PickupVis[PICKUP_TYPE_ARMOR150].spawn = 25;
- PickupVis[PICKUP_TYPE_ARMOR150].delta = 25;
- PickupVis[PICKUP_TYPE_HEALTH100] = {};
- PickupVis[PICKUP_TYPE_HEALTH100].svg = "internal/ui/icons/health";
- PickupVis[PICKUP_TYPE_HEALTH100].color = Color(60,80,255);
- PickupVis[PICKUP_TYPE_HEALTH100].time = 0;
- PickupVis[PICKUP_TYPE_HEALTH100].spawn = 30;
- PickupVis[PICKUP_TYPE_HEALTH100].delta = 30;
- PickupVis[PICKUP_TYPE_POWERUPCARNAGE] = {};
- PickupVis[PICKUP_TYPE_POWERUPCARNAGE].svg = "internal/ui/icons/carnage";
- PickupVis[PICKUP_TYPE_POWERUPCARNAGE].color = Color(255,120,128);
- PickupVis[PICKUP_TYPE_POWERUPCARNAGE].time = 0;
- PickupVis[PICKUP_TYPE_POWERUPCARNAGE].spawn = 90;
- PickupVis[PICKUP_TYPE_POWERUPCARNAGE].delta = 90;
- PickupVis[PICKUP_TYPE_POWERUPRESIST] = {};
- PickupVis[PICKUP_TYPE_POWERUPRESIST].svg = "internal/ui/icons/resist";
- PickupVis[PICKUP_TYPE_POWERUPRESIST].color = Color(255,120,128);
- PickupVis[PICKUP_TYPE_POWERUPRESIST].time = 0;
- PickupVis[PICKUP_TYPE_POWERUPRESIST].spawn = 90;
- PickupVis[PICKUP_TYPE_POWERUPRESIST].delta = 90;
- local artificialTime = 0; -- clock in warmup
- function mat_clock:draw()
- if not shouldShowHUD() then return end;
- local showSpawnTime = self.userData.showSpawnTime;
- local warmupClock = self.userData.warmupClock;
- local countUp = self.userData.countUp;
- local alpha1 = self.userData.alpha1;
- local alpha2 = self.userData.alpha2;
- -- clock
- local timeRemaining = world.gameTimeLimit - world.gameTime;
- if timeRemaining < 0 then
- timeRemaining = 0;
- end
- local t = FormatTime(timeRemaining);
- if countUp then
- t = FormatTime(world.gameTime);
- end
- local minutes = t.minutes;
- local seconds = t.seconds;
- if world.gameState == GAME_STATE_WARMUP and warmupClock then
- local fps = consoleGetVariable("com_maxfps");
- local sgn = countUp and 1 or -1;
- artificialTime = artificialTime + 1 / fps * sgn;
- minutes = math.floor(artificialTime / 60);
- seconds = math.floor(artificialTime % 60);
- else
- artificialTime = 0;
- end
- local textTime = string.format("%d:%02d", minutes, seconds);
- local width_Clock = 160;
- local height_Clock = 80;
- local fontSize = 88;
- local frameColor = Color(255,255,255,alpha1);
- local textColor = Color(0,0,0,255);
- local x = -width_Clock / 2;
- local y = -height_Clock / 2;
- nvgBeginPath();
- nvgRect(x, y, width_Clock, height_Clock);
- nvgFillColor(frameColor);
- nvgFill();
- nvgFontSize(fontSize);
- nvgTextAlign(NVG_ALIGN_CENTER, NVG_ALIGN_MIDDLE);
- nvgFontBlur(0);
- nvgFillColor(textColor);
- nvgText(0, 0, textTime);
- -- respawn timer
- if not showSpawnTime then
- return;
- end
- for k, v in pairs(pickupTimers) do
- if PickupVis[v.type] ~= nil then
- local itemTime = FormatTime(v.timeUntilRespawn);
- local diff_counter = math.abs(PickupVis[v.type].delta - itemTime.seconds);
- local diff_seconds = math.abs(PickupVis[v.type].time - seconds);
- if diff_counter <= 2 then
- if diff_counter == 0 and diff_seconds > 1 then
- local spawnTime = seconds - PickupVis[v.type].delta;
- if spawnTime < 0 then
- spawnTime = spawnTime + 60;
- end
- if countUp then
- spawnTime = seconds + PickupVis[v.type].delta;
- if spawnTime >= 60 then
- spawnTime = spawnTime - 60;
- end
- end
- PickupVis[v.type].spawn = spawnTime;
- PickupVis[v.type].time = seconds;
- end
- local textTime = string.format(":%02d", PickupVis[v.type].spawn);
- local itemX = x;
- local itemY = y + height_Clock;
- local width_ItemIcon = 80;
- local width_ItemTime = 80;
- local width_Item = width_ItemIcon + width_ItemTime;
- local height_Item = height_Clock;
- local color_ItemBox = Color(0,0,0,alpha2);
- local fontColor_Item = Color(255,255,255,255);
- local iconRadius = width_ItemIcon * 0.4;
- local iconX = -width_ItemIcon / 2;
- local iconY = height_Clock;
- local iconColor = PickupVis[v.type].color;
- local iconSvg = PickupVis[v.type].svg;
- -- box
- nvgBeginPath();
- nvgRect(itemX, itemY, width_Item, height_Item);
- nvgFillColor(color_ItemBox);
- nvgFill();
- -- icon
- nvgFillColor(iconColor);
- nvgSvg(iconSvg, iconX, iconY, iconRadius);
- -- time
- nvgFontSize(fontSize);
- nvgTextAlign(NVG_ALIGN_CENTER, NVG_ALIGN_MIDDLE);
- nvgFontBlur(0);
- nvgFillColor(fontColor_Item);
- nvgText(width_ItemIcon / 2, height_Clock, textTime);
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement