Advertisement
nucular

Magical Merge Master 3000

May 1st, 2014
591
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.20 KB | None | 0 0
  1. -- nuculars Magical Merge Master 3000
  2. -------------------------------------------
  3. -- Press M to open the interface window.
  4. -- The merged element is named "MRGD" and under the "Special" category.
  5. ----
  6. -- Code is under the MIT License, have fun!
  7.  
  8.  
  9. local factor = 0.5
  10. local window = Window:new(100, 100, 300, 98)
  11. local elem1 = "NONE"
  12. local elem2 = "NONE"
  13. local merged = nil
  14.  
  15. -- These are blocked from being merged
  16. local blockedprops = {
  17.     Identifier = 1, MenuVisible = 1, MenuSection = 1, Enabled = 1
  18. }
  19. -- These aren't merged, a weighted random value from both elements is used instead
  20. local randprops = {
  21.     State = 1, Properties = 1,
  22.     LowPressureTransition = 1, HighPressureTransition = 1,
  23.     LowTemperatureTransition = 1, HighTemperatureTransition = 1
  24. }
  25.  
  26.  
  27. local factorview = Label:new(10, 10, 280, 16, "0.5")
  28. window:addComponent(factorview)
  29.  
  30. local function checker(sender)
  31.     local t = sender:text()
  32.     t = string.sub(string.upper(t), 0, 4)
  33.     sender:text(t)
  34. end
  35.  
  36. local elem1text = Textbox:new(10, 10, 35, 16, "", "NONE")
  37. elem1text:onTextChanged(checker)
  38. window:addComponent(elem1text)
  39.  
  40. local elem2text = Textbox:new(255, 10, 35, 16, "", "NONE")
  41. elem2text:onTextChanged(checker)
  42. window:addComponent(elem2text)
  43.  
  44. local factorslider = Slider:new(10, 36, 280, 16, 100)
  45. factorslider:value(50)
  46. factorslider:onValueChanged(function(sender, value)
  47.     factor = value / 100
  48.     factorview:text(factor)
  49. end)
  50. window:addComponent(factorslider)
  51.  
  52. local mergebutton = Button:new(10, 72, 280, 16, "MERGE!")
  53. mergebutton:action(function(sender)
  54.     local name1 = elem1text:text()
  55.     local name2 = elem2text:text()
  56.  
  57.     if name1 == "" or name2 == "" then
  58.         tpt.message_box("Come on", "You have to enter an element in\nboth textboxes.")
  59.         return
  60.     end
  61.  
  62.     if name1 == name2 then
  63.         tpt.message_box("Nah", "You should really select two different\nelements.")
  64.         return
  65.     end
  66.  
  67.     if tpt.el[string.lower(name1)] == nil then
  68.         tpt.message_box("Well", "I have no idea what element you mean\nwith '" .. name1 .. "' as the first element...")
  69.         return
  70.     end
  71.  
  72.     if tpt.el[string.lower(name2)] == nil then
  73.         tpt.message_box("Well", "I have no idea what element you mean\nwith '" .. name2 .. "' as the second element...")
  74.         return
  75.     end
  76.  
  77.  
  78.     if merged == nil then
  79.         merged = elements.allocate("NUCULAR", "MRGD")
  80.         elements.property(merged, "Name", "MRGD")
  81.         elements.property(merged, "MenuSection", elements.SC_SPECIAL)
  82.         elements.property(merged, "MenuVisible", 1)
  83.     end
  84.  
  85.     local percent1 = 100 - (factor * 100)
  86.     local percent2 = factor * 100
  87.  
  88.    
  89.     elements.property(merged, "Description", string.format("Some weird merged stuff, about %s%% of %s and circa %s%% of %s...",
  90.         percent1, name1, percent2, name2))
  91.    
  92.     local id1 = tpt.element(name1)
  93.     local id2 = tpt.element(name2)
  94.  
  95.     local elem1 = elements.element(id1)
  96.     local elem2 = elements.element(id2)
  97.  
  98.     for k, v in pairs(elem1) do
  99.         if type(v) == "number" and blockedprops[k] == nil then
  100.             local nv
  101.  
  102.             if randprops[k] ~= nil then
  103.                 if math.random() >= factor then
  104.                     nv = v
  105.                 else
  106.                     nv = elem2[k]
  107.                 end
  108.             else
  109.                 nv = (v * percent1 + elem2[k] * percent2) / 100
  110.             end
  111.             elements.property(merged, k, nv)
  112.         end
  113.     end
  114.  
  115.     tpt.active_menu(elements.SC_SPECIAL)
  116.     ui.closeWindow(window)
  117. end)
  118. window:addComponent(mergebutton)
  119.  
  120.  
  121. window:onTryExit(
  122.     function()
  123.         ui.closeWindow(window)
  124.     end
  125. )
  126.  
  127.  
  128. local function keypressed(key, keynum, mod, evt)
  129.     if evt == 2 and key == "m" then
  130.         if elem1text:text() == "" then
  131.             local l = tpt.element(loadstring("return elements." .. tpt.selectedl)())
  132.             if l ~= "NONE" then elem1text:text(l) end
  133.         end
  134.         if elem2text:text() == "" then
  135.             local r = tpt.element(loadstring("return elements." .. tpt.selectedr)())
  136.             if r ~= "NONE" then elem2text:text(r) end
  137.         end
  138.        
  139.         ui.showWindow(window)
  140.     end
  141. end
  142.  
  143. tpt.register_keypress(keypressed)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement