Advertisement
Yirktos

yk_fightArmor.lua

May 30th, 2015
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.46 KB | None | 0 0
  1. require "base/internal/ui/reflexcore";
  2.  
  3. yk_fightArmor =
  4. {
  5.     armorTimer = 0;
  6.     flashTimer = 0;
  7. };
  8. registerWidget("yk_fightArmor");
  9.  
  10. ---------------
  11. -- CONSTANTS --
  12. ---------------
  13. local armorAlarm = 1.2;
  14. local flashLength = 0.15;
  15.  
  16. local barArmorWidth = 480;
  17. local barArmorHeight = 40;
  18. local barArmorOffsetX = 0;
  19. local barArmorOffsetY = 0;
  20. local barArmorBorder = 5;
  21.  
  22. local colorGA = Color(160, 255, 0);
  23. local colorYA = Color(210, 176, 0);
  24. local colorRA = Color(255, 96, 0);
  25.  
  26.  
  27. local colorArmorPickup = Color(255, 255, 255);
  28.  
  29. local colorDamageGA = Color(0, 128, 0);
  30. local colorDamageYA = Color(255, 192, 0);
  31. local colorDamageRA = Color(255, 32, 0);
  32.  
  33. local colorArmorFrame = Color(0, 2, 4, 160);
  34. local colorTrim = Color(255, 255, 255);
  35.  
  36. local drainRate =225;
  37. ---------------
  38. -- VARIABLES --
  39. ---------------
  40. local oldArmor = 0;
  41. local armorDamage = 0;
  42. local armorPickup = 0;
  43. local lostArmorDamage = 0;
  44. local lostArmorPickup = 0;
  45.  
  46. local drainArmorDamage = false;
  47. local drainArmorPickup = false;
  48.  
  49. local oldArmorTier = 0.5;
  50. local oldestArmorTier = 0.5;
  51. local newArmorTier = 0.5;
  52. local tierDifference = 0;
  53.  
  54. local oldArmorPickup = 0;
  55.  
  56. local colorArmor = Color(0, 0, 0, 0);
  57.  
  58. ---------------
  59. function yk_fightArmor:draw()
  60.     -- PLAYER, FIRST OUT
  61.     local player = getPlayer();
  62.    
  63.     if player == nil or
  64.         player.state == PLAYER_STATE_EDITOR or
  65.         player.state == PLAYER_STATE_SPECTATOR or
  66.         world.gameState == GAME_STATE_GAMEOVER or
  67.         isInMenu()
  68.     then return false end;
  69.    
  70.     if not player.connected then return end;
  71.    
  72.     -- IF YOU DIE, CLEAR EVERYTHING
  73.     if player.health <= 0 then
  74.         self.armorTimer = 0;
  75.         oldArmor = 0;
  76.         oldArmorTier = player.armorProtection / 2;
  77.         oldestArmorTier = player.armorProtection / 2;
  78.         newArmorTier = player.armorProtection / 2;
  79.         tierDifference = 0;
  80.         armorDamage = 0;
  81.         armorPickup = 0;
  82.         lostArmorDamage = 0;
  83.         lostArmorPickup = 0;
  84.         drainArmorDamage = 0;
  85.         drainArmorPickup = 0;
  86.     end
  87.    
  88.     -- SECOND OUT
  89.     if not shouldShowHUD() then return end;
  90.    
  91.     -- FLASH TIMER
  92.     if self.flashTimer >= flashLength then
  93.         flashDirection = -1;
  94.     elseif self.flashTimer <= 0 then
  95.         flashDirection = 1;
  96.     end
  97.     self.flashTimer = self.flashTimer + (flashDirection * deltaTime);
  98.    
  99.     -- CALCULATE DAMAGE COLOR
  100.     local colorArmorDamage = Color(255, 255, 255, 255);
  101.     if player.armorProtection == 0 then
  102.     --  colorArmor = Color(colorGA.r, colorGA.g, colorGA.b, colorGA.a);
  103.         colorArmorDamage = Color(colorDamageGA.r, colorDamageGA.g, colorDamageGA.b, colorDamageGA.a);
  104.     elseif player.armorProtection == 1 then
  105.     --  colorArmor = Color(colorYA.r, colorYA.g, colorYA.b, colorYA.a);
  106.         colorArmorDamage = Color(colorDamageYA.r, colorDamageYA.g, colorDamageYA.b, colorDamageYA.a);
  107.     elseif player.armorProtection == 2 then
  108.     --  colorArmor = Color(colorRA.r, colorRA.g, colorRA.b, colorRA.a);
  109.         colorArmorDamage = Color(colorDamageRA.r, colorDamageRA.g, colorDamageRA.b, colorDamageRA.a);
  110.     end
  111.    
  112.     local colorArmorDamageFinal = Color(colorArmorDamage.r, colorArmorDamage.g, colorArmorDamage.b,
  113.         lerp(colorArmorDamage.a, colorArmorDamage.a / 3, self.flashTimer/flashLength)
  114.     );
  115.    
  116.     -- ARMOR REMAINED CONSTANT WHILE DAMAGE OR PICKUP WAS BUFFERED, INCREMENT TIMER
  117.     if (player.armor == oldArmor) and ((armorPickup > 0) or (armorDamage > 0)) then
  118.         self.armorTimer = math.min(armorAlarm, self.armorTimer + deltaTime);
  119.     else
  120.         self.armorTimer = 0;
  121.     end
  122.    
  123.     -- ARMOR DAMAGE, RESET TIMER, ADJUST BUFFERS
  124.     if player.armor < oldArmor then
  125.         local d = (oldArmor - player.armor);
  126.         armorDamage = armorDamage + d;
  127.        
  128.         drainArmorDamage = false;
  129.         drainArmorPickup = false;
  130.         self.armorTimer = 0;
  131.            
  132.         -- IF PICKUP BUFFERED, DECREASE PICKUP FIRST, TRACK PICKUP LOST THIS WAY
  133.         if armorPickup > 0 then
  134.             if armorPickup >= d then
  135.                 lostArmorPickup = lostArmorPickup + d;
  136.                 armorPickup = armorPickup - d;
  137.             elseif armorPickup < d then
  138.                 lostArmorPickup = lostArmorPickup + armorPickup;
  139.                 armorPickup = 0;
  140.             end
  141.         end
  142.        
  143.         oldArmor = player.armor;
  144.        
  145.     -- ARMOR PICKUP, RESET TIMER, ADJUST BUFFERS   
  146.     elseif player.armor > oldArmor then
  147.         local p = (player.armor - oldArmor);
  148.         armorPickup = armorPickup + p;
  149.        
  150.         drainArmorDamage = false;
  151.         drainArmorPickup = false;
  152.         self.armorTimer = 0;
  153.        
  154.         newArmorTier = player.armorProtection / 2;
  155.        
  156.         -- IF DAMAGE BUFFERED, DECREASE DAMAGE FIRST, TRACK DAMAGE LOST THIS WAY
  157.         if armorDamage > 0 then
  158.             if armorDamage >= p then
  159.                 lostArmorDamage = lostArmorDamage + p;
  160.                 armorDamage = armorDamage - p;
  161.             elseif armorDamage < p then
  162.                 lostArmorDamage = lostArmorDamage + armorDamage;
  163.                 armorDamage = 0;
  164.             end
  165.         end
  166.        
  167.         oldArmor = player.armor;
  168.     end
  169.    
  170.     -- AT SET TIME, RESET TIMER, BEGIN DRAINING BUFFERS
  171.     if self.armorTimer >= armorAlarm then
  172.         self.armorTimer = 0;
  173.         if not drainArmorPickup then
  174.             oldArmorPickup = math.max(1, armorPickup);
  175.             tierDifference = newArmorTier - oldArmorTier;
  176.         end
  177.         drainArmorDamage = true;
  178.         drainArmorPickup = true;
  179.     end
  180.    
  181.     -- DRAIN DAMAGE BUFFERS
  182.     if drainArmorDamage then
  183.         if (armorDamage > 0) or (lostArmorDamage > 0) then
  184.             armorDamage = math.max(0, armorDamage - (drainRate * deltaTime));
  185.             lostArmorDamage = math.max(0, lostArmorDamage - (drainRate * deltaTime));
  186.            
  187.         else
  188.             drainArmorDamage = false;
  189.         end
  190.     end
  191.    
  192.     -- DRAIN PICKUP BUFFERS
  193.     if drainArmorPickup then
  194.         if (armorPickup > 0) or (lostArmorPickup > 0) then
  195.             armorPickup = math.max(0, armorPickup - (drainRate * deltaTime));
  196.             lostArmorPickup = math.max(0, lostArmorPickup - (drainRate * deltaTime));
  197.             oldestArmorTier = lerp(newArmorTier, oldArmorTier, armorPickup / oldArmorPickup);  
  198.         else
  199.             drainArmorPickup = false;
  200.             oldArmorTier = player.armorProtection / 2;
  201.             newArmorTier = player.armorProtection / 2;
  202.             oldestArmorTier = player.armorProtection / 2;
  203.         end
  204.  
  205.     end
  206.    
  207.     -- PREPARE TO DRAW
  208.     local xPos = barArmorOffsetX;
  209.     local yPos = barArmorOffsetY;
  210.    
  211.     local barArmorDamage = armorDamage * barArmorWidth / 200;
  212.     local barArmorPickup = armorPickup * barArmorWidth / 200;
  213.     local barArmorFull = math.max(1, player.armor) * barArmorWidth / 200;
  214. --  local barArmorEmpty = barWidth - barArmorFull - barArmorDamage;
  215.  
  216.     colorArmor = Color(
  217.         lerp(colorGA.r, colorRA.r, oldestArmorTier),
  218.         lerp(colorGA.g, colorRA.g, oldestArmorTier),
  219.         lerp(colorGA.b, colorRA.b, oldestArmorTier),
  220.         lerp(colorGA.a, colorRA.a, oldestArmorTier)
  221.     );
  222.    
  223.     -- DRAW FRAME
  224.     nvgBeginPath();
  225.     nvgRect(xPos, yPos, barArmorWidth + (2 * barArmorBorder), barArmorHeight + (2 * barArmorBorder));
  226.     nvgClosePath();
  227.     nvgFillColor(colorArmorFrame);
  228.     nvgFill();
  229.    
  230.     xPos = xPos + barArmorBorder;
  231.     yPos = yPos + barArmorBorder;
  232.    
  233.     -- DRAW ARMOR
  234.     nvgBeginPath();
  235.     nvgRect(xPos, yPos, barArmorFull, barArmorHeight);
  236.     nvgClosePath();
  237.     nvgFillColor(colorArmor);
  238.     nvgFill();
  239.    
  240.     xPos = xPos + barArmorFull;
  241.  
  242.     -- DRAW PICKUP
  243.     xPos = xPos - barArmorPickup;
  244.     if armorPickup > 0 then
  245.         nvgBeginPath();
  246.         nvgRect(xPos, yPos, barArmorPickup, barArmorHeight);
  247.         nvgClosePath();
  248.         nvgFillColor(colorArmorPickup);
  249.         nvgFill();
  250.     end
  251.     xPos = xPos + barArmorPickup;
  252.    
  253.     -- DRAW DAMAGE
  254.     if armorDamage > 0 then
  255.         yPos = yPos + (barArmorHeight / 16);
  256.         nvgBeginPath();
  257.         nvgRect(xPos, yPos, barArmorDamage, barArmorHeight - (barArmorHeight / 8));
  258.         nvgClosePath();
  259.         nvgFillLinearGradient(xPos, yPos, xPos + barArmorDamage, yPos, colorArmorDamageFinal, Color(0, 0, 0, 0));
  260.         nvgFill();
  261.         yPos = yPos - (barArmorHeight / 16);
  262.     end
  263.    
  264.     -- DRAW DELTA-MARK
  265.     if (armorDamage > 0) or (armorPickup > 0) then
  266.         nvgBeginPath();
  267.         nvgRect(xPos - (barArmorWidth/150), yPos - (barArmorHeight/20), barArmorWidth/75, barArmorHeight + (barArmorHeight/10));
  268.         nvgClosePath();
  269.         nvgFillColor(colorTrim);
  270.         nvgFill();
  271.     end
  272.  
  273.     xPos = barArmorOffsetX;
  274.     yPos = barArmorOffsetY;
  275.    
  276.     nvgFillColor(colorTrim);
  277.     nvgFontFace(FONT_HUD);
  278.     nvgFontSize(36);
  279.     nvgTextAlign(NVG_ALIGN_RIGHT, NVG_ALIGN_MIDDLE);
  280.     xPos = xPos - 6;
  281.     yPos = yPos + (2 * barArmorHeight / 3);
  282.     nvgText(xPos, yPos, player.armor);
  283.     --[[
  284.     yPos = yPos + 80;
  285.     nvgText(xPos, yPos, "tier difference: "..tierDifference);
  286.     yPos = yPos + 20;
  287.     nvgText(xPos, yPos, "old tier: "..oldArmorTier);
  288.     yPos = yPos + 20;
  289.     nvgText(xPos, yPos, "new tier: "..newArmorTier);
  290.     yPos = yPos + 20;
  291.     nvgText(xPos, yPos, "timer: "..self.armorTimer);
  292.     yPos = yPos + 20;
  293.     nvgText(xPos, yPos, "old pickup: "..oldArmorPickup);
  294.     yPos = yPos + 20;
  295.     nvgText(xPos, yPos, "PICKUP/OLD PICKUP: "..armorPickup.."/"..oldArmorPickup);
  296.     yPos = yPos + 20;
  297.     nvgText(xPos, yPos, armorPickup/oldArmorPickup);
  298.     --]]
  299. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement