-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathdamage_report_lua.json
More file actions
1 lines (1 loc) · 27.4 KB
/
Copy pathdamage_report_lua.json
File metadata and controls
1 lines (1 loc) · 27.4 KB
1
{"slots":{"0":{"name":"slot1","type":{"events":[],"methods":[]}},"1":{"name":"slot2","type":{"events":[],"methods":[]}},"2":{"name":"slot3","type":{"events":[],"methods":[]}},"3":{"name":"slot4","type":{"events":[],"methods":[]}},"4":{"name":"slot5","type":{"events":[],"methods":[]}},"5":{"name":"slot6","type":{"events":[],"methods":[]}},"6":{"name":"slot7","type":{"events":[],"methods":[]}},"7":{"name":"slot8","type":{"events":[],"methods":[]}},"8":{"name":"slot9","type":{"events":[],"methods":[]}},"9":{"name":"slot10","type":{"events":[],"methods":[]}},"-1":{"name":"unit","type":{"events":[],"methods":[]}},"-2":{"name":"system","type":{"events":[],"methods":[]}},"-3":{"name":"library","type":{"events":[],"methods":[]}}},"handlers":[{"code":"dmgrep = DamageModule.new()\n-- Switch on all screens\nif #screen_list > 0 then\n activateScreens(screen_list)\nend","filter":{"args":[],"signature":"start()","slotKey":"-1"},"key":"0"},{"code":"-- minimalistic hud\nif core == nil and #screen_list>=1 then\n screen_list[1].setHTML([[<div class=\"bootstrap\" style=\"font-size:6.045804vw; \">Core not found, please link the board to your core and restart</div>]])\nelse\n damage_html=dmgrep:renderHTML()\n i = dmgrep:getActiveView()\n if #screen_list == 1 then\n -- If only one screen show top damage and allow view switch \n screen_list[1].setHTML(damage_html[i])\n elseif #screen_list == 2 then\n -- Show top and listing, still allow view switch\n screen_list[1].setHTML(damage_html[i])\n screen_list[2].setHTML(damage_html[4])\n elseif #screen_list == 3 then \n -- Show top , front and listing, no more view switch\n screen_list[1].setHTML(damage_html[1])\n screen_list[2].setHTML(damage_html[2])\n screen_list[3].setHTML(damage_html[4])\n elseif #screen_list == 4 then\n -- Show top , front, side and listing, no more view switch\n screen_list[1].setHTML(damage_html[1])\n screen_list[2].setHTML(damage_html[2])\n screen_list[3].setHTML(damage_html[3])\n screen_list[4].setHTML(damage_html[4])\n end\nend","filter":{"args":[],"signature":"update()","slotKey":"-2"},"key":"1"},{"code":"if DMGREPORT_disable_shortcuts == false then\n\tdmgrep:nextFilter()\nend","filter":{"args":[{"value":"option1"}],"signature":"actionStart(action)","slotKey":"-2"},"key":"2"},{"code":"if DMGREPORT_disable_shortcuts == false then\n if #screen_list < 3 then\n dmgrep:nextView()\n end \nend ","filter":{"args":[{"value":"option2"}],"signature":"actionStart(action)","slotKey":"-2"},"key":"3"},{"code":"if DMGREPORT_disable_shortcuts == false then\n unit.exit()\nend ","filter":{"args":[{"value":"option3"}],"signature":"actionStart(action)","slotKey":"-2"},"key":"4"},{"code":"-------------------\n-- DAMAGE REPORT MODULE\n-------------------\n-- LUA Parameters\nDMGREPORT_defaultFilter = 1 --export: 1 for all,2 for avionics and weapons,3 for avionics only, 4 for weapons only\nDMGREPORT_defaultView = 1 --export: 1 for top,2 for side and 3 for front\nDMGREPORT_dmg_priority = 2 --export: Show damaged components (3) Below 100%, (2) Below 75%, (1) Below 50%\nDMGREPORT_label_position = 0 --export: move the view label left or right (useful for centering)\nDMGREPORT_dmg_refresh_rate = 2 --export: Damage report refresh rate every x seconds\nDMGREPORT_size = 1000 --export: Display size\nDMGREPORT_point_size = 10 --export: Points size\nDMGREPORT_disable_shortcuts = false --export: Disable option1 and option2 if you need those for other things\n\ncore = nil\nscreen_list = {}\n\n-------------------\n-- General Functions\n-------------------\nfunction round(num, numDecimalPlaces)\n return tonumber(string.format(\"%.\" .. (numDecimalPlaces or 0) .. \"f\", num))\nend\n\nfunction sortSlot(slot)\n if slot ~= nil then\n if string.match(slot.getElementClass(), \"CoreUnit\") then \n core = slot\n elseif string.match(slot.getElementClass(), \"ScreenUnit\") then \n table.insert(screen_list, slot) \t\n end \n end\n\nend\n\nfunction activateScreens(screen_list)\n for _,screen in ipairs(screen_list) do\n if screen.getState() == 0 then\t\n screen.activate()\n end\n end \nend\n\nfunction getElemCategory(elemtype)\n elem_category=\"COMMON\"\n if elemtype ~= nil then\n local critical_part_list = {\"DYNAMIC CORE\",\"RESURRECTION NODE\",\"RADAR\",\"GUNNER MODULE\",\"COMMAND SEAT CONTROLLER\",\"COCKPIT\"} \n local avionics_part_list = {\"ENGINE\",\"FUEL-TANK\",\"ADJUSTOR\",\"VERTICAL BOOSTER\",\"RETRO-ROCKET BRAKE\",\"WING\",\"ATMOSPHERIC AIRBRAKE\"}\n local weapon_part_list = {\"LASER\",\"CANNON\",\"MISSILE\",\"RAILGUN\"} \n -- CRITICALS\n for _,reftype in ipairs(critical_part_list) do\n if string.match(elemtype, reftype) then\n elem_category=\"CRITICALS\"\n break\n end \n end\n if elem_category == \"COMMON\" then\n -- AVIONICS \n for _,reftype in ipairs(avionics_part_list) do\n if string.match(elemtype, reftype) then\n elem_category=\"AVIONICS\"\n break\n end\n end\n if elem_category == \"COMMON\" then\n -- WEAPONS\n for _,reftype in ipairs(weapon_part_list) do\n -- Avoid mistaking laser emitter for a weapon...\n if elemtype == \"LASER\" then\n elem_category=\"WEAPON\"\n break \n elseif string.match(elemtype, reftype) then\n elem_category=\"WEAPON\"\n break\n end \n end \n end\n end \n end\n return elem_category\nend\n\n\n-------------------\n-- Element Class\n-------------------\nElement = {}\nElement.__index = Element\n\nfunction Element.new(elem_id,elem_type,elem_category, elem_name, elem_pos_x, elem_pos_y, elem_pos_z)\n local self = setmetatable({}, Element)\n self.elem_id = elem_id\n self.elem_type = elem_type\n self.elem_category = elem_category\n self.elem_name = elem_name\n self.elem_pos_x = elem_pos_x\n self.elem_pos_y = elem_pos_y\n self.elem_pos_z = elem_pos_z\n\n return self\nend\n\n-------------------\n-- DamageModule Class\n-------------------\nDamageModule = {}\nDamageModule.__index = DamageModule\n\nfunction DamageModule.new()\n local self = setmetatable({}, DamageModule)\n self.elem_list = {}\n -- Init slots\n sortSlot(slot1)\n sortSlot(slot2)\n sortSlot(slot3)\n sortSlot(slot4)\n sortSlot(slot5)\n sortSlot(slot6)\n sortSlot(slot7)\n sortSlot(slot8)\n sortSlot(slot9)\n sortSlot(slot10)\n\n self.elem_filter = DMGREPORT_defaultFilter -- 4 for all,3 for avionics and weapons,2 for avionics only, 1 for weapons\n self.active_view = DMGREPORT_defaultView -- 1 for top,2 for side and 3 for front\n self.last_time_updated = 0\n\n if core ~= nil then \n -- Getting the core offset\n -- XS CORE\n local core_offset = 0\n self.core_offset=core_offset \n self.max_x= -999999999\n self.min_x= 999999999\n self.max_y= -999999999\n self.min_y = 999999999\n self.max_z= -999999999\n self.min_z = 999999999\n\n -- STORING SHIP ELEMENTS\n for i,idelem in ipairs(core.getElementIdList()) do\n local elem_type = core.getElementTypeById(idelem):upper()\n local elem_categ = getElemCategory(elem_type)\n local elem_name = core.getElementNameById(idelem)\n local x,y,z = table.unpack(core.getElementPositionById(idelem))\n x=(x+core_offset)\n y=(y+core_offset)\n z=(z+core_offset)\n if self.min_x > x then\n self.min_x = x\n end \n if self.min_y > y then\n self.min_y = y\n end\n if self.min_z > z then\n self.min_z = z\n end \n if self.max_x < x then\n self.max_x = x\n end \n if self.max_y < y then\n self.max_y = y\n end\n if self.max_z < z then\n self.max_z = z\n end\n self:add(Element.new(idelem,elem_type, elem_categ, elem_name, x, y, z))\n end\n\n\n -- Computing ship size\n self.ship_width = 0\n if self.min_x < 0 then\n self.ship_width = self.ship_width + (self.min_x)*-1\n else\n self.ship_width = self.ship_width + self.min_x\n end \n if self.max_x < 0 then\n self.ship_width = self.ship_width + (self.max_x)*-1\n else\n self.ship_width = self.ship_width + self.max_x\n end\n self.ship_height = 0\n if self.min_y < 0 then\n self.ship_height = self.ship_height + (self.min_y)*-1\n else\n self.ship_height = self.ship_height + self.min_y\n end \n if self.max_y < 0 then\n self.ship_height = self.ship_height + (self.max_y)*-1\n else\n self.ship_height = self.ship_height + self.max_y\n end\n self.ship_z = 0\n if self.min_z < 0 then\n self.ship_z = self.ship_z + (self.min_z)*-1\n else\n self.ship_z = self.ship_z + self.min_z\n end \n if self.max_z < 0 then\n self.ship_z = self.ship_z + (self.max_z)*-1\n else\n self.ship_z = self.ship_z + self.max_z\n end\n if self.ship_width >= self.ship_height then\n self.xyscaleFactor=DMGREPORT_size/self.ship_width \n else\n self.xyscaleFactor=DMGREPORT_size/self.ship_height \n end\n if self.ship_width >= self.ship_z then\n self.xzscaleFactor=DMGREPORT_size/self.ship_width \n else\n self.xzscaleFactor=DMGREPORT_size/self.ship_z \n end\n if self.ship_height >= self.ship_z then\n self.yzscaleFactor=DMGREPORT_size/self.ship_height \n else\n self.yzscaleFactor=DMGREPORT_size/self.ship_z \n end\n end\n return self\nend\n\nfunction DamageModule.add(self,element)\n table.insert(self.elem_list, element)\nend\n\nfunction DamageModule.nextFilter(self)\n if self.elem_filter < 4 then\n self.elem_filter = self.elem_filter + 1\n else \n self.elem_filter = 1 \t \n end \nend\n\nfunction DamageModule.nextView(self)\n if self.active_view < 3 then\n self.active_view = self.active_view + 1\n else \n self.active_view = 1 \t \n end \nend\n\nfunction DamageModule.getActiveView(self)\n return self.active_view\nend\n\nfunction DamageModule.renderHTML(self)\n local front_view_html = \"\"\n local side_view_html = \"\"\n local top_view_html = \"\"\n local table_view_html = \"\"\n if system.getTime() > self.last_time_updated + DMGREPORT_dmg_refresh_rate then\n --Data gathering\n local dead_elem_list=\"\"\n local high_damage_list=\"\"\n local medium_damage_list=\"\"\n local light_damage_list=\"\"\n local maxtoptv = -99999999999\n local maxtopfv = -99999999999\n local maxtopsv = -99999999999\n\n local top_pristine_dot_list=\"\"\n local top_light_dot_list=\"\"\n local top_medium_dot_list=\"\"\n local top_high_dot_list=\"\"\n local top_dead_dot_list=\"\"\n\n local front_pristine_dot_list=\"\"\n local front_light_dot_list=\"\"\n local front_medium_dot_list=\"\"\n local front_high_dot_list=\"\"\n local front_dead_dot_list=\"\"\n\n local side_pristine_dot_list=\"\"\n local side_light_dot_list=\"\"\n local side_medium_dot_list=\"\"\n local side_high_dot_list=\"\"\n local side_dead_dot_list=\"\"\n\n for _,elem in ipairs(self.elem_list) do\n local element_excluded = false\n if self.elem_filter == 2 and elem.elem_category ~= \"AVIONICS\" and elem.elem_category ~= \"WEAPON\" and elem.elem_category ~= \"CRITICAL\" then\n element_excluded = true\n elseif self.elem_filter == 3 and elem.elem_category ~= \"AVIONICS\" and elem.elem_category ~= \"CRITICAL\" then\n element_excluded = true\n elseif self.elem_filter == 4 and elem.elem_category ~= \"WEAPON\" and elem.elem_category ~= \"CRITICAL\" then\n element_excluded = true \n end \n if element_excluded == false then\n local elem_hp = core.getElementHitPointsById(elem.elem_id)\n local elemmax_hp = core.getElementMaxHitPointsById(elem.elem_id)\n local elem_hp_percentage = (elem_hp*100)/elemmax_hp\n local color=\"\"\n local opacity=1\n\n -- COMPUTE DAMAGE\n elem_hp_percentage = round(elem_hp_percentage)\n if elem_hp_percentage >= 100 then\n color=\"#9BFFAC\"\n elseif elem_hp_percentage >= 75 then\n opacity=1\n color=\"#FFDD8E\"\n if DMGREPORT_dmg_priority > 2 then\n light_damage_list=light_damage_list..[[<tr class=\"ldmg\"><td>]]..elem.elem_category..[[</td><td>]]..elem.elem_name..[[</td><td class=\"r\">]]..elem_hp_percentage..[[%</td></tr>]]\n end\n elseif elem_hp_percentage >= 50 then\n color=\"#FF9E66\"\n opacity=1\n if DMGREPORT_dmg_priority > 1 then\n medium_damage_list=medium_damage_list..[[<tr class=\"mdmg\"><td>]]..elem.elem_category..[[</td><td>]]..elem.elem_name..[[</td><td class=\"r\">]]..elem_hp_percentage..[[%</td></tr>]]\n end\n elseif elem_hp_percentage > 0 then\n color=\"#FF2819\"\n opacity=1\n high_damage_list=high_damage_list..[[<tr class=\"hdmg\"><td>]]..elem.elem_category..[[</td><td>]]..elem.elem_name..[[</td><td class=\"r\">]]..elem_hp_percentage..[[%</td></tr>]]\n elseif elem_hp_percentage == 0 then\n color=\"#7F120C\"\n opacity=1\n dead_elem_list=dead_elem_list..[[<tr class=\"dead\"><td>]]..elem.elem_category..[[</td><td>]]..elem.elem_name..[[</td><td class=\"r\">0%</td></tr>]]\n end\n\n local left = 0\n local top = 0\n -- We are using quadrants to place points correctly\n -- 1 2\n -- 3 4\n if (elem.elem_pos_x>=self.min_x and elem.elem_pos_x<=0) and (elem.elem_pos_y>=0 and elem.elem_pos_y<=self.max_y) then \n -- 1\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_y - elem.elem_pos_y\n elseif (elem.elem_pos_x>0 and elem.elem_pos_x<=self.max_x) and (elem.elem_pos_y>=0 and elem.elem_pos_y<=self.max_y) then \n -- 2\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_y - elem.elem_pos_y\n elseif (elem.elem_pos_x>=self.min_x and elem.elem_pos_x<=0) and (elem.elem_pos_y>=self.min_y and elem.elem_pos_y<0) then \n -- 3\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_y + (elem.elem_pos_y*-1)\n elseif (elem.elem_pos_x>0 and elem.elem_pos_x<=self.max_x) and (elem.elem_pos_y>=self.min_y and elem.elem_pos_y<0) then \n -- 4\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_y + (elem.elem_pos_y*-1)\n end \n -- SCALING\n left = left * self.xyscaleFactor \n top = top * self.xyscaleFactor\n maxtoptv = maxtoptv * self.xyscaleFactor\n maxtopsv = maxtopsv * self.xyscaleFactor\n -- CENTERING\n xcentering_offset = 1920-DMGREPORT_size\n xcentering_offset = xcentering_offset/2\n left = left + xcentering_offset\n ycentering_offset = 1080-DMGREPORT_size\n ycentering_offset = ycentering_offset/2\n top = top + ycentering_offset + 50\n -- Top view x,y\n if maxtoptv < top then\n maxtoptv = top\n end\n -- Creating dot \n if elem_hp_percentage >= 100 then\n top_pristine_dot_list = top_pristine_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage >= 75 then\n top_light_dot_list = top_light_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage >= 50 then\n top_medium_dot_list = top_medium_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage > 0 then\n top_high_dot_list = top_high_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n else \n top_dead_dot_list = top_dead_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n end \n\n --top_view_html = top_view_html..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n -- Front view x,z\n if (elem.elem_pos_x>=self.min_x and elem.elem_pos_x<=0) and (elem.elem_pos_z>=0 and elem.elem_pos_z<=self.max_z) then \n -- 1\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_z - elem.elem_pos_z\n elseif (elem.elem_pos_x>0 and elem.elem_pos_x<=self.max_x) and (elem.elem_pos_z>=0 and elem.elem_pos_z<=self.max_z) then \n -- 2\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_z - elem.elem_pos_z\n elseif (elem.elem_pos_x>=self.min_x and elem.elem_pos_x<=0) and (elem.elem_pos_z>=self.min_z and elem.elem_pos_z<0) then \n -- 3\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_z + (elem.elem_pos_z*-1)\n elseif (elem.elem_pos_x>0 and elem.elem_pos_x<=self.max_x) and (elem.elem_pos_z>=self.min_z and elem.elem_pos_z<0) then \n -- 4\n left = (self.min_x*-1) + elem.elem_pos_x\n top = self.max_z + (elem.elem_pos_z*-1)\n end\n -- SCALING\n left = left * self.xzscaleFactor \n top = top * self.xzscaleFactor\n maxtoptv = maxtoptv * self.xzscaleFactor\n maxtopsv = maxtopsv * self.xzscaleFactor\n -- CENTERING\n xcentering_offset = 1920-DMGREPORT_size\n xcentering_offset = xcentering_offset/2\n left = left + xcentering_offset\n ycentering_offset = 1080-DMGREPORT_size\n ycentering_offset = ycentering_offset/2\n top = top + ycentering_offset + 50\n if maxtopfv < top then\n maxtopfv = top\n end\n\n -- Creating dot \n if elem_hp_percentage >= 100 then\n front_pristine_dot_list = front_pristine_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage >= 75 then\n front_light_dot_list = front_light_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage >= 50 then\n front_medium_dot_list = front_medium_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage > 0 then\n front_high_dot_list = front_high_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n else \n front_dead_dot_list = front_dead_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n end\n --front_view_html = front_view_html..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n -- Side view y,z\n if (elem.elem_pos_y>=self.min_y and elem.elem_pos_y<=0) and (elem.elem_pos_z>=0 and elem.elem_pos_z<=self.max_z) then \n -- 1\n left = (self.min_y*-1) + elem.elem_pos_y\n top = self.max_z - elem.elem_pos_z\n elseif (elem.elem_pos_y>0 and elem.elem_pos_y<=self.max_y) and (elem.elem_pos_z>=0 and elem.elem_pos_z<=self.max_z) then \n -- 2\n left = (self.min_y*-1) + elem.elem_pos_y\n top = self.max_z - elem.elem_pos_z\n elseif (elem.elem_pos_y>=self.min_y and elem.elem_pos_y<=0) and (elem.elem_pos_z>=self.min_z and elem.elem_pos_z<0) then \n -- 3\n left = (self.min_y*-1) + elem.elem_pos_y\n top = self.max_z + (elem.elem_pos_z*-1)\n elseif (elem.elem_pos_y>0 and elem.elem_pos_y<=self.max_y) and (elem.elem_pos_z>=self.min_z and elem.elem_pos_z<0) then \n -- 4\n left = (self.min_y*-1) + elem.elem_pos_y\n top = self.max_z + (elem.elem_pos_z*-1)\n end\n -- SCALING\n left = left * self.yzscaleFactor \n top = top * self.yzscaleFactor\n maxtoptv = maxtoptv * self.yzscaleFactor\n maxtopsv = maxtopsv * self.yzscaleFactor\n -- CENTERING\n xcentering_offset = 1920-DMGREPORT_size\n xcentering_offset = xcentering_offset/2\n left = left + xcentering_offset\n ycentering_offset = 1080-DMGREPORT_size\n ycentering_offset = ycentering_offset/2\n top = top + ycentering_offset + 50\n if maxtopsv < top then\n maxtopsv = top\n end \n -- Creating dot \n if elem_hp_percentage >= 100 then\n side_pristine_dot_list = side_pristine_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage >= 75 then\n side_light_dot_list = side_light_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage >= 50 then\n side_medium_dot_list = side_medium_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n elseif elem_hp_percentage > 0 then\n side_high_dot_list = side_high_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n else \n side_dead_dot_list = side_dead_dot_list..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n end \n --side_view_html = side_view_html..[[<circle fill-opacity=\"]]..opacity..[[\" cx=\"]]..left..[[\" cy=\"]]..top..[[\" r=\"]]..DMGREPORT_point_size..[[\" fill=\"]]..color..[[\" />]]\n end \n end\n -- Text damage report\n --Adding filter label below\n local filter_label = \"(ALL PARTS)\"\n if self.elem_filter == 2 then\n filter_label = \"(WP & AV ONLY)\"\n elseif self.elem_filter == 3 then\n filter_label = \"(AVIONICS ONLY)\"\n elseif self.elem_filter == 4 then\n filter_label = \"(WEAPONS ONLY)\"\n end\n -- Top view code x,y \n top_view_html=[[<svg class=\"bootstrap\" viewBox=\"0 0 1920 1080\" style=\"width:100%; height:100%\"><rect width=\"100%\" height=\"100%\" fill=\"#000000\" /><rect fill=\"#f2933a\" height=\"60\" width=\"100%\" y=\"-1\" x=\"-1\"/><text x=\"13\" y=\"45\" font-size=\"60\" text-anchor='start' fill=\"white\">Damage report : TOP ]]..filter_label..[[</text>]]..top_pristine_dot_list..top_light_dot_list..top_medium_dot_list..top_high_dot_list..top_dead_dot_list..[[</svg>]]\n -- front view code x,z\n front_view_html=[[<svg class=\"bootstrap\" viewBox=\"0 0 1920 1080\" style=\"width:100%; height:100%\"><rect width=\"100%\" height=\"100%\" fill=\"#000000\" /><rect fill=\"#f2933a\" height=\"60\" width=\"100%\" y=\"-1\" x=\"-1\"/><text x=\"13\" y=\"45\" font-size=\"60\" text-anchor='start' fill=\"white\">Damage report : FRONT ]]..filter_label..[[</text>]]..front_pristine_dot_list..front_light_dot_list..front_medium_dot_list..front_high_dot_list..front_dead_dot_list..[[</svg>]]\n -- side view y,z\n side_view_html=[[<svg class=\"bootstrap\" viewBox=\"0 0 1920 1080\" style=\"width:100%; height:100%\"><rect width=\"100%\" height=\"100%\" fill=\"#000000\" /><rect fill=\"#f2933a\" height=\"60\" width=\"100%\" y=\"-1\" x=\"-1\"/><text x=\"13\" y=\"45\" font-size=\"60\" text-anchor='start' fill=\"white\">Damage report : SIDE ]]..filter_label..[[</text>]]..side_pristine_dot_list..side_light_dot_list..side_medium_dot_list..side_high_dot_list..side_dead_dot_list..[[</svg>]]\n -- Table view\n table_view_html = table_view_html..[[<style>.cdiv{transform: rotate(-90deg);transform-origin: 50vh 50vh;} .cdiv table {width:100vh;} .cdiv table tr{height:4vh;font-size:4vh;font-weight:bold;} .pristine td {color: #9BFFAC;} .ldmg td {color: #FFDD8E;} .mdmg td {color: #FF9E66;} .hdmg td {color: #FF2819;} .dead td {color: #7F120C;} .r {text-align:right;} </style><div class=\"cdiv\"><table><tr style=\"background-color:#f2933a;color:white;font-weight:bold;\"><td>Element type</td><td>Element name</td><td>Element HP</td></tr>]]..dead_elem_list..high_damage_list..medium_damage_list..light_damage_list..[[</table></div>]]\n end\n return {top_view_html,front_view_html,side_view_html,table_view_html}\nend","filter":{"args":[],"signature":"start()","slotKey":"-3"},"key":"5"}],"methods":[],"events":[]}