Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "base/internal/ui/reflexcore";
- yk_fightArmor =
- {
- armorTimer = 0;
- flashTimer = 0;
- };
- registerWidget("yk_fightArmor");
- ---------------
- -- CONSTANTS --
- ---------------
- local armorAlarm = 1.2;
- local flashLength = 0.15;
- local barArmorWidth = 480;
- local barArmorHeight = 40;
- local barArmorOffsetX = 0;
- local barArmorOffsetY = 0;
- local barArmorBorder = 5;
- local colorGA = Color(160, 255, 0);
- local colorYA = Color(210, 176, 0);
- local colorRA = Color(255, 96, 0);
- local colorArmorPickup = Color(255, 255, 255);
- local colorDamageGA = Color(0, 128, 0);
- local colorDamageYA = Color(255, 192, 0);
- local colorDamageRA = Color(255, 32, 0);
- local colorArmorFrame = Color(0, 2, 4, 160);
- local colorTrim = Color(255, 255, 255);
- local drainRate =225;
- ---------------
- -- VARIABLES --
- ---------------
- local oldArmor = 0;
- local armorDamage = 0;
- local armorPickup = 0;
- local lostArmorDamage = 0;
- local lostArmorPickup = 0;
- local drainArmorDamage = false;
- local drainArmorPickup = false;
- local oldArmorTier = 0.5;
- local oldestArmorTier = 0.5;
- local newArmorTier = 0.5;
- local tierDifference = 0;
- local oldArmorPickup = 0;
- local colorArmor = Color(0, 0, 0, 0);
- ---------------
- function yk_fightArmor:draw()
- -- PLAYER, FIRST OUT
- local player = getPlayer();
- if player == nil or
- player.state == PLAYER_STATE_EDITOR or
- player.state == PLAYER_STATE_SPECTATOR or
- world.gameState == GAME_STATE_GAMEOVER or
- isInMenu()
- then return false end;
- if not player.connected then return end;
- -- IF YOU DIE, CLEAR EVERYTHING
- if player.health <= 0 then
- self.armorTimer = 0;
- oldArmor = 0;
- oldArmorTier = player.armorProtection / 2;
- oldestArmorTier = player.armorProtection / 2;
- newArmorTier = player.armorProtection / 2;
- tierDifference = 0;
- armorDamage = 0;
- armorPickup = 0;
- lostArmorDamage = 0;
- lostArmorPickup = 0;
- drainArmorDamage = 0;
- drainArmorPickup = 0;
- end
- -- SECOND OUT
- if not shouldShowHUD() then return end;
- -- FLASH TIMER
- if self.flashTimer >= flashLength then
- flashDirection = -1;
- elseif self.flashTimer <= 0 then
- flashDirection = 1;
- end
- self.flashTimer = self.flashTimer + (flashDirection * deltaTime);
- -- CALCULATE DAMAGE COLOR
- local colorArmorDamage = Color(255, 255, 255, 255);
- if player.armorProtection == 0 then
- -- colorArmor = Color(colorGA.r, colorGA.g, colorGA.b, colorGA.a);
- colorArmorDamage = Color(colorDamageGA.r, colorDamageGA.g, colorDamageGA.b, colorDamageGA.a);
- elseif player.armorProtection == 1 then
- -- colorArmor = Color(colorYA.r, colorYA.g, colorYA.b, colorYA.a);
- colorArmorDamage = Color(colorDamageYA.r, colorDamageYA.g, colorDamageYA.b, colorDamageYA.a);
- elseif player.armorProtection == 2 then
- -- colorArmor = Color(colorRA.r, colorRA.g, colorRA.b, colorRA.a);
- colorArmorDamage = Color(colorDamageRA.r, colorDamageRA.g, colorDamageRA.b, colorDamageRA.a);
- end
- local colorArmorDamageFinal = Color(colorArmorDamage.r, colorArmorDamage.g, colorArmorDamage.b,
- lerp(colorArmorDamage.a, colorArmorDamage.a / 3, self.flashTimer/flashLength)
- );
- -- ARMOR REMAINED CONSTANT WHILE DAMAGE OR PICKUP WAS BUFFERED, INCREMENT TIMER
- if (player.armor == oldArmor) and ((armorPickup > 0) or (armorDamage > 0)) then
- self.armorTimer = math.min(armorAlarm, self.armorTimer + deltaTime);
- else
- self.armorTimer = 0;
- end
- -- ARMOR DAMAGE, RESET TIMER, ADJUST BUFFERS
- if player.armor < oldArmor then
- local d = (oldArmor - player.armor);
- armorDamage = armorDamage + d;
- drainArmorDamage = false;
- drainArmorPickup = false;
- self.armorTimer = 0;
- -- IF PICKUP BUFFERED, DECREASE PICKUP FIRST, TRACK PICKUP LOST THIS WAY
- if armorPickup > 0 then
- if armorPickup >= d then
- lostArmorPickup = lostArmorPickup + d;
- armorPickup = armorPickup - d;
- elseif armorPickup < d then
- lostArmorPickup = lostArmorPickup + armorPickup;
- armorPickup = 0;
- end
- end
- oldArmor = player.armor;
- -- ARMOR PICKUP, RESET TIMER, ADJUST BUFFERS
- elseif player.armor > oldArmor then
- local p = (player.armor - oldArmor);
- armorPickup = armorPickup + p;
- drainArmorDamage = false;
- drainArmorPickup = false;
- self.armorTimer = 0;
- newArmorTier = player.armorProtection / 2;
- -- IF DAMAGE BUFFERED, DECREASE DAMAGE FIRST, TRACK DAMAGE LOST THIS WAY
- if armorDamage > 0 then
- if armorDamage >= p then
- lostArmorDamage = lostArmorDamage + p;
- armorDamage = armorDamage - p;
- elseif armorDamage < p then
- lostArmorDamage = lostArmorDamage + armorDamage;
- armorDamage = 0;
- end
- end
- oldArmor = player.armor;
- end
- -- AT SET TIME, RESET TIMER, BEGIN DRAINING BUFFERS
- if self.armorTimer >= armorAlarm then
- self.armorTimer = 0;
- if not drainArmorPickup then
- oldArmorPickup = math.max(1, armorPickup);
- tierDifference = newArmorTier - oldArmorTier;
- end
- drainArmorDamage = true;
- drainArmorPickup = true;
- end
- -- DRAIN DAMAGE BUFFERS
- if drainArmorDamage then
- if (armorDamage > 0) or (lostArmorDamage > 0) then
- armorDamage = math.max(0, armorDamage - (drainRate * deltaTime));
- lostArmorDamage = math.max(0, lostArmorDamage - (drainRate * deltaTime));
- else
- drainArmorDamage = false;
- end
- end
- -- DRAIN PICKUP BUFFERS
- if drainArmorPickup then
- if (armorPickup > 0) or (lostArmorPickup > 0) then
- armorPickup = math.max(0, armorPickup - (drainRate * deltaTime));
- lostArmorPickup = math.max(0, lostArmorPickup - (drainRate * deltaTime));
- oldestArmorTier = lerp(newArmorTier, oldArmorTier, armorPickup / oldArmorPickup);
- else
- drainArmorPickup = false;
- oldArmorTier = player.armorProtection / 2;
- newArmorTier = player.armorProtection / 2;
- oldestArmorTier = player.armorProtection / 2;
- end
- end
- -- PREPARE TO DRAW
- local xPos = barArmorOffsetX;
- local yPos = barArmorOffsetY;
- local barArmorDamage = armorDamage * barArmorWidth / 200;
- local barArmorPickup = armorPickup * barArmorWidth / 200;
- local barArmorFull = math.max(1, player.armor) * barArmorWidth / 200;
- -- local barArmorEmpty = barWidth - barArmorFull - barArmorDamage;
- colorArmor = Color(
- lerp(colorGA.r, colorRA.r, oldestArmorTier),
- lerp(colorGA.g, colorRA.g, oldestArmorTier),
- lerp(colorGA.b, colorRA.b, oldestArmorTier),
- lerp(colorGA.a, colorRA.a, oldestArmorTier)
- );
- -- DRAW FRAME
- nvgBeginPath();
- nvgRect(xPos, yPos, barArmorWidth + (2 * barArmorBorder), barArmorHeight + (2 * barArmorBorder));
- nvgClosePath();
- nvgFillColor(colorArmorFrame);
- nvgFill();
- xPos = xPos + barArmorBorder;
- yPos = yPos + barArmorBorder;
- -- DRAW ARMOR
- nvgBeginPath();
- nvgRect(xPos, yPos, barArmorFull, barArmorHeight);
- nvgClosePath();
- nvgFillColor(colorArmor);
- nvgFill();
- xPos = xPos + barArmorFull;
- -- DRAW PICKUP
- xPos = xPos - barArmorPickup;
- if armorPickup > 0 then
- nvgBeginPath();
- nvgRect(xPos, yPos, barArmorPickup, barArmorHeight);
- nvgClosePath();
- nvgFillColor(colorArmorPickup);
- nvgFill();
- end
- xPos = xPos + barArmorPickup;
- -- DRAW DAMAGE
- if armorDamage > 0 then
- yPos = yPos + (barArmorHeight / 16);
- nvgBeginPath();
- nvgRect(xPos, yPos, barArmorDamage, barArmorHeight - (barArmorHeight / 8));
- nvgClosePath();
- nvgFillLinearGradient(xPos, yPos, xPos + barArmorDamage, yPos, colorArmorDamageFinal, Color(0, 0, 0, 0));
- nvgFill();
- yPos = yPos - (barArmorHeight / 16);
- end
- -- DRAW DELTA-MARK
- if (armorDamage > 0) or (armorPickup > 0) then
- nvgBeginPath();
- nvgRect(xPos - (barArmorWidth/150), yPos - (barArmorHeight/20), barArmorWidth/75, barArmorHeight + (barArmorHeight/10));
- nvgClosePath();
- nvgFillColor(colorTrim);
- nvgFill();
- end
- xPos = barArmorOffsetX;
- yPos = barArmorOffsetY;
- nvgFillColor(colorTrim);
- nvgFontFace(FONT_HUD);
- nvgFontSize(36);
- nvgTextAlign(NVG_ALIGN_RIGHT, NVG_ALIGN_MIDDLE);
- xPos = xPos - 6;
- yPos = yPos + (2 * barArmorHeight / 3);
- nvgText(xPos, yPos, player.armor);
- --[[
- yPos = yPos + 80;
- nvgText(xPos, yPos, "tier difference: "..tierDifference);
- yPos = yPos + 20;
- nvgText(xPos, yPos, "old tier: "..oldArmorTier);
- yPos = yPos + 20;
- nvgText(xPos, yPos, "new tier: "..newArmorTier);
- yPos = yPos + 20;
- nvgText(xPos, yPos, "timer: "..self.armorTimer);
- yPos = yPos + 20;
- nvgText(xPos, yPos, "old pickup: "..oldArmorPickup);
- yPos = yPos + 20;
- nvgText(xPos, yPos, "PICKUP/OLD PICKUP: "..armorPickup.."/"..oldArmorPickup);
- yPos = yPos + 20;
- nvgText(xPos, yPos, armorPickup/oldArmorPickup);
- --]]
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement