From 09d0c9228b4840f7e9c7f1154be00d3df3b25fc7 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 00:28:25 +0100 Subject: [PATCH 001/236] Added project files --- addon.txt | 9 + lua/autorun/wire_fpga_load.lua | 18 + lua/entities/gmod_wire_fpga/cl_init.lua | 57 + lua/entities/gmod_wire_fpga/init.lua | 62 + lua/entities/gmod_wire_fpga/shared.lua | 9 + lua/wire/client/node_editor/nodeeditor.lua | 158 +++ .../client/node_editor/wire_fpga_editor.lua | 1186 +++++++++++++++++ lua/wire/stools/fpga.lua | 128 ++ lua/wire/tool_loader.lua | 158 +-- 9 files changed, 1655 insertions(+), 130 deletions(-) create mode 100644 addon.txt create mode 100644 lua/autorun/wire_fpga_load.lua create mode 100644 lua/entities/gmod_wire_fpga/cl_init.lua create mode 100644 lua/entities/gmod_wire_fpga/init.lua create mode 100644 lua/entities/gmod_wire_fpga/shared.lua create mode 100644 lua/wire/client/node_editor/nodeeditor.lua create mode 100644 lua/wire/client/node_editor/wire_fpga_editor.lua create mode 100644 lua/wire/stools/fpga.lua diff --git a/addon.txt b/addon.txt new file mode 100644 index 0000000000..3328372c9d --- /dev/null +++ b/addon.txt @@ -0,0 +1,9 @@ +"AddonInfo" +{ + "name" "Wire - FPGA" + "version" "Git" + "author_name" "Lysdal" + "author_url" "https://lysdal.dev" + "info" "Field-Programmable Gate Array" + "override" "0" +} diff --git a/lua/autorun/wire_fpga_load.lua b/lua/autorun/wire_fpga_load.lua new file mode 100644 index 0000000000..74f9e7d14f --- /dev/null +++ b/lua/autorun/wire_fpga_load.lua @@ -0,0 +1,18 @@ +if SERVER then MsgC(Color(0, 150, 255), "Loading Wire FPGA...\n") end + +if SERVER then + AddCSLuaFile("wire/client/node_editor/nodeeditor.lua") + AddCSLuaFile("wire/client/node_editor/wire_fpga_editor.lua") + AddCSLuaFile("wire/tool_loader.lua") +end + +if CLIENT then + AddCSLuaFile("wire/client/node_editor/nodeeditor.lua") + AddCSLuaFile("wire/client/node_editor/wire_fpga_editor.lua") + AddCSLuaFile("wire/tool_loader.lua") + + include("wire/client/node_editor/nodeeditor.lua") + include("wire/client/node_editor/wire_fpga_editor.lua") +end + +if SERVER then MsgC(Color(0, 150, 255), "Wire FPGA loaded!\n") end \ No newline at end of file diff --git a/lua/entities/gmod_wire_fpga/cl_init.lua b/lua/entities/gmod_wire_fpga/cl_init.lua new file mode 100644 index 0000000000..d5d1cf1dc2 --- /dev/null +++ b/lua/entities/gmod_wire_fpga/cl_init.lua @@ -0,0 +1,57 @@ +include('shared.lua') + +function ENT:GetWorldTipBodySize() + local data = self:GetOverlayData() + if not data then return 100, 20 end + + local w_total,h_total = surface.GetTextSize(data.name) + + local timebench = data.timebench + + -- cpu time text + local str = string.format("cpu time: %ius", timebench * 1000000) + + local w,h = surface.GetTextSize(str) + w_total = math.max(w_total, w) + h_total = h_total + h + 10 + + return w_total, h_total +end + +function ENT:DrawWorldTipBody( pos ) + local data = self:GetOverlayData() + if not data then return end + + local name = data.name + + local white = Color(255,255,255,255) + local black = Color(0,0,0,255) + + local w_total, yoffset = 0, pos.min.y + + ------------------- + -- Name + ------------------- + local w,h = surface.GetTextSize(name) + h = h + pos.edgesize + h = math.min(h,pos.size.h - (pos.footersize.h)) + + render.SetScissorRect(pos.min.x + 16, pos.min.y, pos.max.x - 16, pos.min.y + h, true) + draw.DrawText(name, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 10, white, TEXT_ALIGN_CENTER) + render.SetScissorRect(0, 0, ScrW(), ScrH(), false) + + w_total = math.max(w_total, w) + yoffset = yoffset + h + + surface.SetDrawColor(black) + surface.DrawLine(pos.min.x, yoffset, pos.max.x, yoffset) + + ------------------- + -- prfcount/benchmarking/etc + ------------------- + local timebench = data.timebench + + -- cpu time text + local str = string.format("cpu time: %ius", timebench * 1000000) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, white, TEXT_ALIGN_CENTER) +end \ No newline at end of file diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua new file mode 100644 index 0000000000..cb6a3da262 --- /dev/null +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -0,0 +1,62 @@ +AddCSLuaFile('cl_init.lua') +AddCSLuaFile('shared.lua') +include('shared.lua') + +DEFINE_BASECLASS("base_wire_entity") + + +function ENT:UpdateOverlay(clear) + if clear then + self:SetOverlayData( { + name = "(none)", + timebench = 0 + }) + else + self:SetOverlayData( { + name = self.name, + timebench = self.timebench + }) + end +end + +function ENT:Initialize() + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + + self.Inputs = WireLib.CreateInputs(self, {"In"}) + self.Outputs = WireLib.CreateOutputs(self, {"Out"}) + + self:UpdateOverlay(true) + --self:SetColor(Color(255, 0, 0, self:GetColor().a)) +end + + +function ENT:Upload() + MsgC(Color(0, 255, 100), "Uploading to FPGA\n") + self.name = "Test" + self.timebench = 0.075 + self:UpdateOverlay(false) + + self.Inputs = WireLib.AdjustInputs(self, {"In"}) +end + +function ENT:Reset() + MsgC(Color(0, 100, 255), "Resetting FPGA\n") + self.Inputs = WireLib.AdjustInputs(self, {"In", "In2"}) +end + + + +function ENT:TriggerInput(iname, value) + if iname == "In" then + Wire_TriggerOutput(self, "Out", value) + end +end + + +-- function ENT:Think() + +-- self:NextThink(CurTime()) +-- return true +-- end \ No newline at end of file diff --git a/lua/entities/gmod_wire_fpga/shared.lua b/lua/entities/gmod_wire_fpga/shared.lua new file mode 100644 index 0000000000..afe48bc447 --- /dev/null +++ b/lua/entities/gmod_wire_fpga/shared.lua @@ -0,0 +1,9 @@ +DEFINE_BASECLASS("base_wire_entity") + +ENT.PrintName = "Wire FPGA" +ENT.Author = "Lysdal" +ENT.Contact = "https://steamcommunity.com/id/lysdal1234/" +ENT.Purpose = "" +ENT.Instructions = "" + +ENT.WireDebugName = "FPGA" \ No newline at end of file diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua new file mode 100644 index 0000000000..93b70d84e6 --- /dev/null +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -0,0 +1,158 @@ +local Editor = {} + +local Nodes = { + {gate = "IN", x = 0, y = 50, connections = {3}}, + {gate = "IN", x = 0, y = 150, connections = {3}}, + {gate = "AND", x = 50, y = 100, connections = {4}}, + {gate = "OUT", x = 150, y = 100, connections = {}} +} + +function Editor:Init() + self.Position = {0, 0} + self.Zoom = 1 + self.DraggingWorld = false + self.DraggingGate = nil + + self.LastMousePos = {0, 0} + self.MouseDown = false + + self.GateSize = 5 +end + + +-- UTILITY +function Editor:PosToScr(x, y) + return self:GetWide()/2 - (self.Position[1] - x) * self.Zoom, self:GetTall()/2 - (self.Position[2] - y) * self.Zoom +end + +function Editor:ScrToPos(x, y) + return self.Position[1] - (self:GetWide()/2 - x) / self.Zoom, self.Position[2] - (self:GetTall()/2 - y) / self.Zoom +end + +-- DETECTION +function Editor:GetNodeAt(x, y) + local gx, gy = self:ScrToPos(x, y) + + for k, node in pairs(Nodes) do + if gx < node.x - self.GateSize/2 then continue end + if gx > node.x + self.GateSize/2 then continue end + if gy < node.y - self.GateSize/2 then continue end + if gy > node.y + self.GateSize/2 then continue end + + return k + end + + return nil +end + +-- DRAWING +function Editor:PaintConnection(nodeFrom, nodeTo) + local x1, y1 = self:PosToScr(nodeFrom.x, nodeFrom.y) + local x2, y2 = self:PosToScr(nodeTo.x, nodeTo.y) + + surface.SetDrawColor(Color(50, 50, 150, 255)) + surface.DrawLine(x1, y1, x2, y2) +end + +function Editor:PaintConnections() + for k1, node in pairs(Nodes) do + for k2, dest in pairs(node.connections) do + self:PaintConnection(node, Nodes[dest]) + end + end +end + +function Editor:PaintNode(node) + surface.SetDrawColor(Color(50, 150, 50, 255)) + + local size = self.Zoom * self.GateSize + local x, y = self:PosToScr(node.x, node.y) + + surface.DrawRect(x-size/2, y-size/2, size, size) + + surface.SetFont("Default") + surface.SetTextColor(255, 255, 255) + local tx, ty = surface.GetTextSize(node.gate) + surface.SetTextPos(x-tx/2, y-ty/2) + surface.DrawText(node.gate) +end + +function Editor:PaintNodes() + for k, node in pairs(Nodes) do + self:PaintNode(node) + end +end + +function Editor:Paint() + surface.SetDrawColor(Color(200, 200, 200, 255)) + surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) + + self:PaintConnections() + self:PaintNodes() + + self:PaintDebug() + + -- moving the plane + if self.DraggingWorld then + local x, y = self:CursorPos() + local dx, dy = self.LastMousePos[1] - x, self.LastMousePos[2] - y + self.Position = {self.Position[1] + dx * (1/self.Zoom), self.Position[2] + dy * (1/self.Zoom)} + end + -- moving a node + if self.DraggingNode then + local x, y = self:CursorPos() + local gx, gy = self:ScrToPos(x, y) + Nodes[self.DraggingNode].x = gx + Nodes[self.DraggingNode].y = gy + end + + local x, y = self:CursorPos() + self.LastMousePos = {x, y} +end + + +function Editor:PaintDebug() + surface.SetFont("Default") + surface.SetTextColor(255, 255, 255) + surface.SetTextPos(128, 128) + surface.DrawText(self.Position[1] .. ", " .. self.Position[2]) + surface.SetTextPos(128, 158) + surface.DrawText(self.Zoom) +end + +--EVENTS +function Editor:OnMousePressed(code) + if code == MOUSE_LEFT then + self.MouseDown = true + --check if over node + local x, y = self:CursorPos() + local node = self:GetNodeAt(x, y) + --begin dragging + if node then + self.DraggingNode = node + end + elseif code == MOUSE_RIGHT then + self.DraggingWorld = true + end +end + +function Editor:OnMouseReleased(code) + --if not self.MouseDown then return end + + if code == MOUSE_LEFT then + self.MouseDown = false + self.DraggingNode = nil + elseif code == MOUSE_RIGHT then + self.DraggingWorld = false + end + +end + +function Editor:OnMouseWheeled(delta) + self.Zoom = self.Zoom + delta * 0.1 + if self.Zoom < 0.1 then self.Zoom = 0.1 end + if self.Zoom > 10 then self.Zoom = 10 end +end + + +vgui.Register("FPGAEditor", Editor, "Panel"); \ No newline at end of file diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua new file mode 100644 index 0000000000..b28aeba04e --- /dev/null +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -0,0 +1,1186 @@ +local Editor = {} + +Editor.NewTabOnOpen = CreateClientConVar("wire_fpga_new_tab_on_open", "1", true, false) + +surface.CreateFont("DefaultBold", { + font = "Tahoma", + size = 12, + weight = 700, + antialias = true, + additive = false, +}) + +------------------------------------------------------------------------ + +local invalid_filename_chars = { + ["*"] = "", + ["?"] = "", + [">"] = "", + ["<"] = "", + ["|"] = "", + ["\\"] = "", + ['"'] = "", + [" "] = "_", +} + +-- overwritten commands +function Editor:Init() + -- don't use any of the default DFrame UI components + for _, v in pairs(self:GetChildren()) do v:Remove() end + self.Title = "" + self.subTitle = "" + self.LastClick = 0 + self.GuiClick = 0 + self.SimpleGUI = false + self.Location = "" + + self.C = {} + self.Components = {} + + -- Load border colors, position, & size + self:LoadEditorSettings() + + local fontTable = { + font = "default", + size = 11, + weight = 300, + antialias = false, + additive = false, + } + surface.CreateFont("E2SmallFont", fontTable) + self.logo = surface.GetTextureID("vgui/e2logo") + + self:InitComponents() + + -- This turns off the engine drawing + self:SetPaintBackgroundEnabled(false) + self:SetPaintBorderEnabled(false) + + self:SetV(false) + + self:InitShutdownHook() +end + +local size = CreateClientConVar("wire_fpga_editor_size", "800_600", true, false) +local pos = CreateClientConVar("wire_fpga_editor_pos", "-1_-1", true, false) + +function Editor:LoadEditorSettings() + + -- Position & Size + local w, h = size:GetString():match("(%d+)_(%d+)") + w = tonumber(w) + h = tonumber(h) + + self:SetSize(w, h) + + local x, y = pos:GetString():match("(%-?%d+)_(%-?%d+)") + x = tonumber(x) + y = tonumber(y) + + if x == -1 and y == -1 then + self:Center() + else + self:SetPos(x, y) + end + + if x < 0 or y < 0 or x + w > ScrW() or y + h > ScrH() then -- If the editor is outside the screen, reset it + local width, height = math.min(surface.ScreenWidth() - 200, 800), math.min(surface.ScreenHeight() - 200, 620) + self:SetPos((surface.ScreenWidth() - width) / 2, (surface.ScreenHeight() - height) / 2) + self:SetSize(width, height) + + self:SaveEditorSettings() + end +end + +function Editor:SaveEditorSettings() + + -- Position & Size + local w, h = self:GetSize() + RunConsoleCommand("wire_fpga_editor_size", w .. "_" .. h) + + local x, y = self:GetPos() + RunConsoleCommand("wire_fpga_editor_pos", x .. "_" .. y) +end + + +function Editor:PaintOver() + surface.SetFont("DefaultBold") + surface.SetTextColor(255, 255, 255, 255) + surface.SetTextPos(10, 6) + surface.DrawText(self.Title .. self.subTitle) + --[[ + if(self.E2) then + surface.SetTexture(self.logo) + surface.SetDrawColor( 255, 255, 255, 128 ) + surface.DrawTexturedRect( w-148, h-158, 128, 128) + end + ]] -- + surface.SetDrawColor(255, 255, 255, 255) + surface.SetTextPos(0, 0) + surface.SetFont("Default") + return true +end + +function Editor:PerformLayout() + local w, h = self:GetSize() + + for i = 1, #self.Components do + local c = self.Components[i] + local c_x, c_y, c_w, c_h = c.Bounds.x, c.Bounds.y, c.Bounds.w, c.Bounds.h + if (c_x < 0) then c_x = w + c_x end + if (c_y < 0) then c_y = h + c_y end + if (c_w < 0) then c_w = w + c_w - c_x end + if (c_h < 0) then c_h = h + c_h - c_y end + c:SetPos(c_x, c_y) + c:SetSize(c_w, c_h) + end +end + +function Editor:OnMousePressed(mousecode) + if mousecode ~= 107 then return end -- do nothing if mouseclick is other than left-click + if not self.pressed then + self.pressed = true + self.p_x, self.p_y = self:GetPos() + self.p_w, self.p_h = self:GetSize() + self.p_mx = gui.MouseX() + self.p_my = gui.MouseY() + self.p_mode = self:getMode() + if self.p_mode == "drag" then + if self.GuiClick > CurTime() - 0.2 then + self:fullscreen() + self.pressed = false + self.GuiClick = 0 + else + self.GuiClick = CurTime() + end + end + end +end + +function Editor:OnMouseReleased(mousecode) + if mousecode ~= 107 then return end -- do nothing if mouseclick is other than left-click + self.pressed = false +end + +function Editor:Think() + if self.fs then return end + if self.pressed then + if not input.IsMouseDown(MOUSE_LEFT) then -- needs this if you let go of the mouse outside the panel + self.pressed = false + end + local movedX = gui.MouseX() - self.p_mx + local movedY = gui.MouseY() - self.p_my + if self.p_mode == "drag" then + local x = self.p_x + movedX + local y = self.p_y + movedY + if (x < 10 and x > -10) then x = 0 end + if (y < 10 and y > -10) then y = 0 end + if (x + self.p_w < surface.ScreenWidth() + 10 and x + self.p_w > surface.ScreenWidth() - 10) then x = surface.ScreenWidth() - self.p_w end + if (y + self.p_h < surface.ScreenHeight() + 10 and y + self.p_h > surface.ScreenHeight() - 10) then y = surface.ScreenHeight() - self.p_h end + self:SetPos(x, y) + end + if self.p_mode == "sizeBR" then + local w = self.p_w + movedX + local h = self.p_h + movedY + if (self.p_x + w < surface.ScreenWidth() + 10 and self.p_x + w > surface.ScreenWidth() - 10) then w = surface.ScreenWidth() - self.p_x end + if (self.p_y + h < surface.ScreenHeight() + 10 and self.p_y + h > surface.ScreenHeight() - 10) then h = surface.ScreenHeight() - self.p_y end + if (w < 300) then w = 300 end + if (h < 200) then h = 200 end + self:SetSize(w, h) + end + if self.p_mode == "sizeR" then + local w = self.p_w + movedX + if (w < 300) then w = 300 end + self:SetWide(w) + end + if self.p_mode == "sizeB" then + local h = self.p_h + movedY + if (h < 200) then h = 200 end + self:SetTall(h) + end + end + if not self.pressed then + local cursor = "arrow" + local mode = self:getMode() + if (mode == "sizeBR") then cursor = "sizenwse" + elseif (mode == "sizeR") then cursor = "sizewe" + elseif (mode == "sizeB") then cursor = "sizens" + end + if cursor ~= self.cursor then + self.cursor = cursor + self:SetCursor(self.cursor) + end + end + + local x, y = self:GetPos() + local w, h = self:GetSize() + + if w < 518 then w = 518 end + if h < 200 then h = 200 end + if x < 0 then x = 0 end + if y < 0 then y = 0 end + if x + w > surface.ScreenWidth() then x = surface.ScreenWidth() - w end + if y + h > surface.ScreenHeight() then y = surface.ScreenHeight() - h end + if y < 0 then y = 0 end + if x < 0 then x = 0 end + if w > surface.ScreenWidth() then w = surface.ScreenWidth() end + if h > surface.ScreenHeight() then h = surface.ScreenHeight() end + + self:SetPos(x, y) + self:SetSize(w, h) +end + +-- special functions + +function Editor:fullscreen() + if self.fs then + self:SetPos(self.preX, self.preY) + self:SetSize(self.preW, self.preH) + self.fs = false + else + self.preX, self.preY = self:GetPos() + self.preW, self.preH = self:GetSize() + self:SetPos(0, 0) + self:SetSize(surface.ScreenWidth(), surface.ScreenHeight()) + self.fs = true + end +end + +function Editor:getMode() + local x, y = self:GetPos() + local w, h = self:GetSize() + local ix = gui.MouseX() - x + local iy = gui.MouseY() - y + + if (ix < 0 or ix > w or iy < 0 or iy > h) then return end -- if the mouse is outside the box + if (iy < 22) then + return "drag" + end + if (iy > h - 10) then + if (ix > w - 20) then return "sizeBR" end + return "sizeB" + end + if (ix > w - 10) then + if (iy > h - 20) then return "sizeBR" end + return "sizeR" + end +end + +function Editor:addComponent(panel, x, y, w, h) + assert(not panel.Bounds) + panel.Bounds = { x = x, y = y, w = w, h = h } + self.Components[#self.Components + 1] = panel + return panel +end + +function Editor:GetLastTab() return self.LastTab end + +function Editor:SetLastTab(Tab) self.LastTab = Tab end + +function Editor:GetActiveTab() return self.C.TabHolder:GetActiveTab() end + +function Editor:GetNumTabs() return #self.C.TabHolder.Items end + +function Editor:SetActiveTab(val) + if self:GetActiveTab() == val then + val:GetPanel():RequestFocus() + return + end + self:SetLastTab(self:GetActiveTab()) + if isnumber(val) then + self.C.TabHolder:SetActiveTab(self.C.TabHolder.Items[val].Tab) + self:GetCurrentEditor():RequestFocus() + elseif val and val:IsValid() then + self.C.TabHolder:SetActiveTab(val) + val:GetPanel():RequestFocus() + end + + self:UpdateActiveTabTitle() +end + +function Editor:UpdateActiveTabTitle() + local title = self:GetChosenFile() + local tabtext = self:GetChosenFile() + + if title then self:SubTitle("Editing: " .. title) else self:SubTitle() end + if tabtext then + if self:GetActiveTab():GetText() ~= tabtext then + self:GetActiveTab():SetText(tabtext) + self.C.TabHolder.tabScroller:InvalidateLayout() + end + end +end + +function Editor:GetActiveTabIndex() + local tab = self:GetActiveTab() + for k, v in pairs(self.C.TabHolder.Items) do + if tab == v.Tab then + return k + end + end + return -1 +end + + +function Editor:SetActiveTabIndex(index) + local tab = self.C.TabHolder.Items[index].Tab + + if not tab then return end + + self:SetActiveTab(tab) +end + +local function extractNameFromFilePath(str) + local found = str:reverse():find("/", 1, true) + if found then + return str:Right(found - 1) + else + return str + end +end + +local old +function Editor:FixTabFadeTime() + if old ~= nil then return end -- It's already being fixed + old = self.C.TabHolder:GetFadeTime() + self.C.TabHolder:SetFadeTime(0) + timer.Simple(old, function() self.C.TabHolder:SetFadeTime(old) old = nil end) +end + +function Editor:CreateTab(chosenfile) + local editor = vgui.Create("FPGAEditor") + editor.parentpanel = self + + local sheet = self.C.TabHolder:AddSheet(extractNameFromFilePath(chosenfile), editor) + editor.chosenfile = chosenfile + + sheet.Tab.OnMousePressed = function(pnl, keycode, ...) + + if keycode == MOUSE_MIDDLE then + --self:FixTabFadeTime() + self:CloseTab(pnl) + return + elseif keycode == MOUSE_RIGHT then + local menu = DermaMenu() + menu:AddOption("Close", function() + --self:FixTabFadeTime() + self:CloseTab(pnl) + end) + menu:AddOption("Close all others", function() + self:FixTabFadeTime() + self:SetActiveTab(pnl) + for i = self:GetNumTabs(), 1, -1 do + if self.C.TabHolder.Items[i] ~= sheet then + self:CloseTab(i) + end + end + end) + menu:AddSpacer() + menu:AddOption("Save", function() + self:FixTabFadeTime() + local old = self:GetLastTab() + local currentTab = self:GetActiveTab() + self:SetActiveTab(pnl) + self:SaveFile(self:GetChosenFile(), false) + self:SetActiveTab(currentTab) + self:SetLastTab(old) + end) + menu:AddOption("Save As", function() + self:FixTabFadeTime() + self:SetActiveTab(pnl) + self:SaveFile(self:GetChosenFile(), false, true) + end) + menu:AddOption("Reload", function() + self:FixTabFadeTime() + local old = self:GetLastTab() + self:SetActiveTab(pnl) + self:LoadFile(editor.chosenfile, false) + self:SetActiveTab(self:GetLastTab()) + self:SetLastTab(old) + end) + menu:AddSpacer() + menu:AddOption("Copy file path to clipboard", function() + if editor.chosenfile and editor.chosenfile ~= "" then + SetClipboardText(editor.chosenfile) + end + end) + menu:AddOption("Copy all file paths to clipboard", function() + local str = "" + for i = 1, self:GetNumTabs() do + local chosenfile = self:GetEditor(i).chosenfile + if chosenfile and chosenfile ~= "" then + str = str .. chosenfile .. ";" + end + end + str = str:sub(1, -2) + SetClipboardText(str) + end) + menu:Open() + return + end + + self:SetActiveTab(pnl) + end + + editor.OnTextChanged = function(panel) + timer.Create("fpgaautosave", 5, 1, function() + self:AutoSave() + end) + --hook.Run("WireEditorText", self, editor) + end + editor.OnShortcut = function(_, code) + if code == KEY_S then + self:SaveFile(self:GetChosenFile()) + end + end + editor:RequestFocus() + + self:OnTabCreated(sheet) -- Call a function that you can override to do custom stuff to each tab. + + return sheet +end + +function Editor:OnTabCreated(sheet) end + +-- This function is made to be overwritten + +function Editor:GetNextAvailableTab() + local activetab = self:GetActiveTab() + for _, v in pairs(self.C.TabHolder.Items) do + if v.Tab and v.Tab:IsValid() and v.Tab ~= activetab then + return v.Tab + end + end +end + +function Editor:NewTab() + local sheet = self:CreateTab("chip") + self:SetActiveTab(sheet.Tab) +end + +function Editor:CloseTab(_tab) + local activetab, sheetindex + if _tab then + if isnumber(_tab) then + local temp = self.C.TabHolder.Items[_tab] + if temp then + activetab = temp.Tab + sheetindex = _tab + else + return + end + else + activetab = _tab + -- Find the sheet index + for k, v in pairs(self.C.TabHolder.Items) do + if activetab == v.Tab then + sheetindex = k + break + end + end + end + else + activetab = self:GetActiveTab() + -- Find the sheet index + for k, v in pairs(self.C.TabHolder.Items) do + if activetab == v.Tab then + sheetindex = k + break + end + end + end + + self:AutoSave() + + -- There's only one tab open, no need to actually close any tabs + if self:GetNumTabs() == 1 then + activetab:SetText("chip") + self.C.TabHolder:InvalidateLayout() + self:NewScript(true) + return + end + + -- Find the panel (for the scroller) + local tabscroller_sheetindex + for k, v in pairs(self.C.TabHolder.tabScroller.Panels) do + if v == activetab then + tabscroller_sheetindex = k + break + end + end + + self:FixTabFadeTime() + + if activetab == self:GetActiveTab() then -- We're about to close the current tab + if self:GetLastTab() and self:GetLastTab():IsValid() then -- If the previous tab was saved + if activetab == self:GetLastTab() then -- If the previous tab is equal to the current tab + local othertab = self:GetNextAvailableTab() -- Find another tab + if othertab and othertab:IsValid() then -- If that other tab is valid, use it + self:SetActiveTab(othertab) + self:SetLastTab() + else -- Reset the current tab (backup) + self:GetActiveTab():SetText("chip") + self.C.TabHolder:InvalidateLayout() + self:NewScript(true) + return + end + else -- Change to the previous tab + self:SetActiveTab(self:GetLastTab()) + self:SetLastTab() + end + else -- If the previous tab wasn't saved + local othertab = self:GetNextAvailableTab() -- Find another tab + if othertab and othertab:IsValid() then -- If that other tab is valid, use it + self:SetActiveTab(othertab) + else -- Reset the current tab (backup) + self:GetActiveTab():SetText("chip") + self.C.TabHolder:InvalidateLayout() + self:NewScript(true) + return + end + end + end + + self:OnTabClosed(activetab) -- Call a function that you can override to do custom stuff to each tab. + + activetab:GetPanel():Remove() + activetab:Remove() + table.remove(self.C.TabHolder.Items, sheetindex) + table.remove(self.C.TabHolder.tabScroller.Panels, tabscroller_sheetindex) + + self.C.TabHolder.tabScroller:InvalidateLayout() + local w, h = self.C.TabHolder:GetSize() + self.C.TabHolder:SetSize(w + 1, h) -- +1 so it updates +end + +function Editor:OnTabClosed(sheet) end + +-- This function is made to be overwritten + +-- initialization commands +function Editor:InitComponents() + self.Components = {} + self.C = {} + + local function PaintFlatButton(panel, w, h) + if not (panel:IsHovered() or panel:IsDown()) then return end + derma.SkinHook("Paint", "Button", panel, w, h) + end + + local DMenuButton = vgui.RegisterTable({ + Init = function(panel) + panel:SetText("") + panel:SetSize(24, 20) + panel:Dock(LEFT) + end, + Paint = PaintFlatButton, + DoClick = function(panel) + local name = panel:GetName() + local f = name and name ~= "" and self[name] or nil + if f then f(self) end + end + }, "DButton") + + -- addComponent( panel, x, y, w, h ) + -- if x, y, w, h is minus, it will stay relative to right or buttom border + self.C.Close = self:addComponent(vgui.Create("DButton", self), -45-4, 0, 45, 22) -- Close button + self.C.Inf = self:addComponent(vgui.CreateFromTable(DMenuButton, self), -45-4-26, 0, 24, 22) -- Info button + self.C.ConBut = self:addComponent(vgui.CreateFromTable(DMenuButton, self), -45-4-24-26, 0, 24, 22) -- Control panel open/close + + self.C.Divider = vgui.Create("DHorizontalDivider", self) + + self.C.Browser = vgui.Create("wire_expression2_browser", self.C.Divider) -- Expression 2 file browser + + self.C.MainPane = vgui.Create("DPanel", self.C.Divider) + self.C.Menu = vgui.Create("DPanel", self.C.MainPane) + self.C.Val = vgui.Create("Button", self.C.MainPane) -- Validation line + self.C.TabHolder = vgui.Create("DPropertySheet", self.C.MainPane) + + self.C.Btoggle = vgui.CreateFromTable(DMenuButton, self.C.Menu) -- Toggle Browser being shown + self.C.Sav = vgui.CreateFromTable(DMenuButton, self.C.Menu) -- Save button + self.C.NewTab = vgui.CreateFromTable(DMenuButton, self.C.Menu, "NewTab") -- New tab button + self.C.CloseTab = vgui.CreateFromTable(DMenuButton, self.C.Menu, "CloseTab") -- Close tab button + self.C.Reload = vgui.CreateFromTable(DMenuButton, self.C.Menu) -- Reload tab button + self.C.SaE = vgui.Create("DButton", self.C.Menu) -- Save & Exit button + self.C.SavAs = vgui.Create("DButton", self.C.Menu) -- Save As button + + self.C.Control = self:addComponent(vgui.Create("Panel", self), -350, 52, 342, -32) -- Control Panel + self.C.Credit = self:addComponent(vgui.Create("DTextEntry", self), -160, 52, 150, 190) -- Credit box + self.C.Credit:SetEditable(false) + + self:CreateTab("chip") + + -- extra component options + + self.C.Divider:SetLeft(self.C.Browser) + self.C.Divider:SetRight(self.C.MainPane) + self.C.Divider:Dock(FILL) + self.C.Divider:SetDividerWidth(4) + self.C.Divider:SetCookieName("wire_fpga_editor_divider") + self.C.Divider:SetLeftMin(0) + + local DoNothing = function() end + self.C.MainPane.Paint = DoNothing + --self.C.Menu.Paint = DoNothing + + self.C.Menu:Dock(TOP) + self.C.TabHolder:Dock(FILL) + self.C.Val:Dock(BOTTOM) + + self.C.TabHolder:SetPadding(1) + + self.C.Menu:SetHeight(24) + self.C.Menu:DockPadding(2,2,2,2) + self.C.Val:SetHeight(22) + + self.C.SaE:SetSize(80, 20) + self.C.SaE:Dock(RIGHT) + self.C.SavAs:SetSize(51, 20) + self.C.SavAs:Dock(RIGHT) + + self.C.Inf:Dock(NODOCK) + self.C.ConBut:Dock(NODOCK) + + self.C.Close:SetText("r") + self.C.Close:SetFont("Marlett") + self.C.Close.DoClick = function(btn) self:Close() end + + self.C.ConBut:SetImage("icon16/wrench.png") + self.C.ConBut:SetText("") + self.C.ConBut.Paint = PaintFlatButton + self.C.ConBut.DoClick = function() self.C.Control:SetVisible(not self.C.Control:IsVisible()) end + + self.C.Inf:SetImage("icon16/information.png") + self.C.Inf.Paint = PaintFlatButton + self.C.Inf.DoClick = function(btn) + self.C.Credit:SetVisible(not self.C.Credit:IsVisible()) + end + + + self.C.Sav:SetImage("icon16/disk.png") + self.C.Sav.DoClick = function(button) self:SaveFile(self:GetChosenFile()) end + self.C.Sav:SetToolTip( "Save" ) + + self.C.NewTab:SetImage("icon16/page_white_add.png") + self.C.NewTab.DoClick = function(button) self:NewTab() end + self.C.NewTab:SetToolTip( "New tab" ) + + self.C.CloseTab:SetImage("icon16/page_white_delete.png") + self.C.CloseTab.DoClick = function(button) self:CloseTab() end + self.C.CloseTab:SetToolTip( "Close tab" ) + + self.C.Reload:SetImage("icon16/page_refresh.png") + self.C.Reload:SetToolTip( "Refresh file" ) + self.C.Reload.DoClick = function(button) + self:LoadFile(self:GetChosenFile(), false) + end + + self.C.SaE:SetText("Save and Exit") + self.C.SaE.DoClick = function(button) self:SaveFile(self:GetChosenFile(), true) end + + self.C.SavAs:SetText("Save As") + self.C.SavAs.DoClick = function(button) self:SaveFile(self:GetChosenFile(), false, true) end + + self.C.Browser:AddRightClick(self.C.Browser.filemenu, 4, "Save to", function() + Derma_Query("Overwrite this file?", "Save To", + "Overwrite", function() + self:SaveFile(self.C.Browser.File.FileDir) + end, + "Cancel") + end) + self.C.Browser.OnFileOpen = function(_, filepath, newtab) + self:Open(filepath, nil, newtab) + end + + self.C.Btoggle:SetImage("icon16/application_side_contract.png") + function self.C.Btoggle.DoClick(button) + if button.hide then + self.C.Divider:LoadCookies() + else + self.C.Divider:SetLeftWidth(0) + end + self.C.Divider:InvalidateLayout() + button:InvalidateLayout() + end + + local oldBtoggleLayout = self.C.Btoggle.PerformLayout + function self.C.Btoggle.PerformLayout(button) + oldBtoggleLayout(button) + if self.C.Divider:GetLeftWidth() > 0 then + button.hide = false + button:SetImage("icon16/application_side_contract.png") + else + button.hide = true + button:SetImage("icon16/application_side_expand.png") + end + end + + self.C.Credit:SetTextColor(Color(0, 0, 0, 255)) + self.C.Credit:SetText("\t\tCREDITS\n\n\tEditor by: \tSyranide and Shandolum\n\n\tTabs (and more) added by Divran.\n\n\tFixed for GMod13 By Ninja101 \n\n\t Rewritten into a node editor by Lysdal") -- Sure why not ;) + self.C.Credit:SetMultiline(true) + self.C.Credit:SetVisible(false) + + self:InitControlPanel(self.C.Control) -- making it seperate for better overview + self.C.Control:SetVisible(false) +end + +function Editor:AutoSave() + local buffer = self:GetNodes() + if self.savebuffer == buffer or buffer == "" then return end + self.savebuffer = buffer + file.Write(self.Location .. "/_autosave_.txt", buffer) +end + +function Editor:AddControlPanelTab(label, icon, tooltip) + local frame = self.C.Control + local panel = vgui.Create("DPanel") + local ret = frame.TabHolder:AddSheet(label, panel, icon, false, false, tooltip) + local old = ret.Tab.OnMousePressed + function ret.Tab.OnMousePressed(...) + timer.Simple(0.1,function() frame:ResizeAll() end) -- timers solve everything + old(...) + end + + ret.Panel:SetBackgroundColor(Color(96, 96, 96, 255)) + + return ret +end + +function Editor:InitControlPanel(frame) + -- Add a property sheet to hold the tabs + local tabholder = vgui.Create("DPropertySheet", frame) + tabholder:SetPos(2, 4) + frame.TabHolder = tabholder + + -- They need to be resized one at a time... dirty fix incoming (If you know of a nicer way to do this, don't hesitate to fix it.) + local function callNext(t, n) + local obj = t[n] + local pnl = obj[1] + if pnl and pnl:IsValid() then + local x, y = obj[2], obj[3] + pnl:SetPos(x, y) + local w, h = pnl:GetParent():GetSize() + local wofs, hofs = w - x * 2, h - y * 2 + pnl:SetSize(wofs, hofs) + end + n = n + 1 + if n <= #t then + timer.Simple(0, function() callNext(t, n) end) + end + end + + function frame:ResizeAll() + timer.Simple(0, function() + callNext(self.ResizeObjects, 1) + end) + end + + -- Resize them at the right times + local oldFrameSetSize = frame.SetSize + function frame:SetSize(...) + self:ResizeAll() + oldFrameSetSize(self, ...) + end + + local oldFrameSetVisible = frame.SetVisible + function frame:SetVisible(...) + self:ResizeAll() + oldFrameSetVisible(self, ...) + end + + -- Function to add more objects to resize automatically + frame.ResizeObjects = {} + function frame:AddResizeObject(...) + self.ResizeObjects[#self.ResizeObjects + 1] = { ... } + end + + -- Our first object to auto resize is the tabholder. This sets it to position 2,4 and with a width and height offset of w-4, h-8. + frame:AddResizeObject(tabholder, 2, 4) + + -- ------------------------------------------- EDITOR TAB + local sheet = self:AddControlPanelTab("Editor", "icon16/wrench.png", "Options for the editor itself.") + + -- WINDOW BORDER COLORS + + local dlist = vgui.Create("DPanelList", sheet.Panel) + dlist.Paint = function() end + frame:AddResizeObject(dlist, 4, 4) + dlist:EnableVerticalScrollbar(true) + + local NewTabOnOpen = vgui.Create("DCheckBoxLabel") + dlist:AddItem(NewTabOnOpen) + NewTabOnOpen:SetConVar("wire_fpga_new_tab_on_open") + NewTabOnOpen:SetText("New tab on open") + NewTabOnOpen:SizeToContents() + NewTabOnOpen:SetTooltip("Enable/disable loaded files opening in a new tab.\nIf disabled, loaded files will be opened in the current tab.") + + local SaveTabsOnClose = vgui.Create("DCheckBoxLabel") + dlist:AddItem(SaveTabsOnClose) + SaveTabsOnClose:SetConVar("wire_fpga_editor_savetabs") + SaveTabsOnClose:SetText("Save tabs on close") + SaveTabsOnClose:SizeToContents() + SaveTabsOnClose:SetTooltip("Save the currently opened tab file paths on shutdown.\nOnly saves tabs whose files are saved.") + + local OpenOldTabs = vgui.Create("DCheckBoxLabel") + dlist:AddItem(OpenOldTabs) + OpenOldTabs:SetConVar("wire_fpga_editor_openoldtabs") + OpenOldTabs:SetText("Open old tabs on load") + OpenOldTabs:SizeToContents() + OpenOldTabs:SetTooltip("Open the tabs from the last session on load.\nOnly tabs whose files were saved before disconnecting from the server are stored.") + + local WorldClicker = vgui.Create("DCheckBoxLabel") + dlist:AddItem(WorldClicker) + WorldClicker:SetConVar("wire_fpga_editor_worldclicker") + WorldClicker:SetText("Enable Clicking Outside Editor") + WorldClicker:SizeToContents() + function WorldClicker.OnChange(pnl, bVal) + self:GetParent():SetWorldClicker(bVal) + end + + --------------------------------------------- FPGA TAB + sheet = self:AddControlPanelTab("FPGA", "icon16/computer.png", "Options for FPGA.") + + dlist = vgui.Create("DPanelList", sheet.Panel) + dlist.Paint = function() end + frame:AddResizeObject(dlist, 2, 2) + dlist:EnableVerticalScrollbar(true) + +end + +-- options + +function Editor:NewChip(incurrent) + if not incurrent and self.NewTabOnOpen:GetBool() then + self:NewTab() + else + self:AutoSave() + self:ChosenFile() + + -- Set title + self:GetActiveTab():SetText("chip") + self.C.TabHolder:InvalidateLayout() + + self:ClearNodes() + end +end + +local wire_fpga_editor_savetabs = CreateClientConVar("wire_fpga_editor_savetabs", "1", true, false) + +local id = 0 +function Editor:InitShutdownHook() + id = id + 1 + + -- save code when shutting down + hook.Add("ShutDown", "wire_fpga_ShutDown" .. id, function() + -- if wire_fpga_editor == nil then return end + local buffer = self:GetNodes() + if buffer == defaultcode then return end + file.Write(self.Location .. "/_shutdown_.txt", buffer) + + if wire_fpga_editor_savetabs:GetBool() then + self:SaveTabs() + end + end) +end + +function Editor:SaveTabs() + local strtabs = "" + local tabs = {} + for i=1, self:GetNumTabs() do + local chosenfile = self:GetEditor(i).chosenfile + if chosenfile and chosenfile ~= "" and not tabs[chosenfile] then + strtabs = strtabs .. chosenfile .. ";" + tabs[chosenfile] = true -- Prevent duplicates + end + end + + strtabs = strtabs:sub(1, -2) + + file.Write(self.Location .. "/_tabs_.txt", strtabs) +end + +local wire_fpga_editor_openoldtabs = CreateClientConVar("wire_fpga_editor_openoldtabs", "1", true, false) + +function Editor:OpenOldTabs() + if not file.Exists(self.Location .. "/_tabs_.txt", "DATA") then return end + + -- Read file + local tabs = file.Read(self.Location .. "/_tabs_.txt") + if not tabs or tabs == "" then return end + + -- Explode around ; + tabs = string.Explode(";", tabs) + if not tabs or #tabs == 0 then return end + + -- Temporarily remove fade time + self:FixTabFadeTime() + + local is_first = true + for _, v in pairs(tabs) do + if v and v ~= "" then + if (file.Exists(v, "DATA")) then + -- Open it in a new tab + self:LoadFile(v, true) + + -- If this is the first loop, close the initial tab. + if (is_first) then + timer.Simple(0, function() + self:CloseTab(1) + end) + is_first = false + end + end + end + end +end + +function Editor:SubTitle(sub) + if not sub then self.subTitle = "" + else self.subTitle = " - " .. sub + end +end + +local wire_fpga_editor_worldclicker = CreateClientConVar("wire_fpga_editor_worldclicker", "0", true, false) +function Editor:SetV(bool) + if bool then + self:MakePopup() + self:InvalidateLayout(true) + end + self:SetVisible(bool) + self:SetKeyBoardInputEnabled(bool) + self:GetParent():SetWorldClicker(wire_fpga_editor_worldclicker:GetBool() and bool) -- Enable this on the background so we can update E2's without closing the editor + -- if CanRunConsoleCommand() then + -- RunConsoleCommand("wire_fpga_event", bool and "editor_open" or "editor_close") + -- end +end + +function Editor:GetChosenFile() + return self:GetCurrentEditor().chosenfile +end + +function Editor:ChosenFile(Line) + self:GetCurrentEditor().chosenfile = Line + if Line then + self:SubTitle("Editing: " .. Line) + else + self:SubTitle() + end +end + +function Editor:FindOpenFile(FilePath) + for i = 1, self:GetNumTabs() do + local ed = self:GetEditor(i) + if ed.chosenfile == FilePath then + return ed + end + end +end + +function Editor:ExtractName() + self.savefilefn = "filename" + return +end + +-- function Editor:SetCode(code) +-- self:GetCurrentEditor():SetText(code) +-- self.savebuffer = self:GetCode() +-- if self.E2 then self:Validate() end +-- self:ExtractName() +-- end + +function Editor:SetNodes(nodes) + --self:GetCurrentEditor():SetText(code) + self.savebuffer = self:GetNodes() +end + +function Editor:ClearNodes() + +end + +function Editor:GetEditor(n) + if self.C.TabHolder.Items[n] then + return self.C.TabHolder.Items[n].Panel + end +end + +function Editor:GetCurrentEditor() + return self:GetActiveTab():GetPanel() +end + +-- function Editor:GetCode() +-- return self:GetCurrentEditor():GetValue() +-- end + +function Editor:GetNodes() + -- return self:GetCurrentEditor():GetValue() + return {} +end + +function Editor:Open(Line, nodes, forcenewtab) + if self:IsVisible() and not Line and not nodes then self:Close() end + hook.Run("WireFPGAEditorOpen", self, Line, nodes, forcenewtab) + self:SetV(true) + if self.chip then + self.C.SaE:SetText("Upload & Exit") + else + self.C.SaE:SetText("Save and Exit") + end + -- if code then + -- if not forcenewtab then + -- for i = 1, self:GetNumTabs() do + -- if self:GetEditor(i).chosenfile == Line then + -- self:SetActiveTab(i) + -- self:SetNodes(nodes) + -- return + -- elseif self:GetEditor(i):GetValue() == nodes then + -- self:SetActiveTab(i) + -- return + -- end + -- end + -- end + -- local _, tabtext = getPreferredTitles(Line, nodes) + -- local tab + -- if self.NewTabOnOpen:GetBool() or forcenewtab then + -- tab = self:CreateTab(tabtext).Tab + -- else + -- tab = self:GetActiveTab() + -- tab:SetText(tabtext) + -- self.C.TabHolder:InvalidateLayout() + -- end + -- self:SetActiveTab(tab) + + -- self:ChosenFile() + -- self:SetNodes(nodes) + -- if Line then self:SubTitle("Editing: " .. Line) end + -- return + -- end + -- if Line then self:LoadFile(Line, forcenewtab) return end +end + +function Editor:SaveFile(Line, close, SaveAs) + if close and self.chip then + --WireLib.Expression2Upload(self.chip, self:GetCode()) + self:Close() + return + end + if not Line or SaveAs or Line == self.Location .. "/" .. ".txt" then + local str + if self.C.Browser.File then + str = self.C.Browser.File.FileDir -- Get FileDir + if str and str ~= "" then -- Check if not nil + + -- Remove "expression2/" or "cpuchip/" etc + local n, _ = str:find("/", 1, true) + str = str:sub(n + 1, -1) + + if str and str ~= "" then -- Check if not nil + if str:Right(4) == ".txt" then -- If it's a file + str = string.GetPathFromFilename(str):Left(-2) -- Get the file path instead + if not str or str == "" then + str = nil + end + end + else + str = nil + end + else + str = nil + end + end + Derma_StringRequestNoBlur("Save to New File", "", (str ~= nil and str .. "/" or "") .. self.savefilefn, + function(strTextOut) + strTextOut = string.gsub(strTextOut, ".", invalid_filename_chars) + self:SaveFile(self.Location .. "/" .. strTextOut .. ".txt", close) + self:UpdateActiveTabTitle() + end) + return + end + + file.Write(Line, self:GetNodes()) + + local panel = self.C.Val + timer.Simple(0, function() panel.SetText(panel, " Saved as " .. Line) end) + surface.PlaySound("ambient/water/drip3.wav") + + if not self.chip then self:ChosenFile(Line) end + if close then + if self.E2 then + GAMEMODE:AddNotify("Expression saved as " .. Line .. ".", NOTIFY_GENERIC, 7) + else + GAMEMODE:AddNotify("Source code saved as " .. Line .. ".", NOTIFY_GENERIC, 7) + end + self:Close() + end +end + +function Editor:LoadFile(Line, forcenewtab) + -- if not Line or file.IsDir(Line, "DATA") then return end + + -- local f = file.Open(Line, "r", "DATA") + -- if not f then + -- ErrorNoHalt("Erroring opening file: " .. Line) + -- else + -- local str = f:Read(f:Size()) or "" + -- f:Close() + -- self:AutoSave() + -- if not forcenewtab then + -- for i = 1, self:GetNumTabs() do + -- if self:GetEditor(i).chosenfile == Line then + -- self:SetActiveTab(i) + -- if forcenewtab ~= nil then self:SetCode(str) end + -- return + -- elseif self:GetEditor(i):GetValue() == str then + -- self:SetActiveTab(i) + -- return + -- end + -- end + -- end + + -- local _, tabtext = getPreferredTitles(Line, str) + -- local tab + -- if self.NewTabOnOpen:GetBool() or forcenewtab then + -- tab = self:CreateTab(tabtext).Tab + -- else + -- tab = self:GetActiveTab() + -- tab:SetText(tabtext) + -- self.C.TabHolder:InvalidateLayout() + -- end + -- self:SetActiveTab(tab) + -- self:ChosenFile(Line) + + -- self:SetCode(str) + -- end +end + +function Editor:Close() + timer.Stop("fpgaautosave") + self:AutoSave() + + self:SetV(false) + self.chip = false + + self:SaveEditorSettings() + + hook.Run("WireFPGAEditorClose", self) +end + + +function Editor:Setup(nTitle, nLocation) + self.Title = nTitle + self.Location = nLocation + -- self.EditorType = nEditorType + self.C.Browser:Setup(nLocation) + + self.C.Val:SetVisible(false) + + self:NewChip(true) -- Opens initial tab, in case OpenOldTabs is disabled or fails. + + if wire_fpga_editor_openoldtabs:GetBool() then + self:OpenOldTabs() + end + + self:InvalidateLayout() +end + +vgui.Register("FPGAEditorFrame", Editor, "DFrame") +if SERVER then MsgC(Color(0, 100, 255), "FPGA Editor loaded!\n") end \ No newline at end of file diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua new file mode 100644 index 0000000000..c6de54999b --- /dev/null +++ b/lua/wire/stools/fpga.lua @@ -0,0 +1,128 @@ +WireToolSetup.setCategory("Chips, Gates", "Advanced") +WireToolSetup.open("fpga", "FPGA", "gmod_wire_fpga", nil, "FPGAs") + +if CLIENT then + language.Add("Tool.wire_fpga.name", "FPGA Tool (Wire)") + language.Add("Tool.wire_fpga.desc", "Spawns a field programmable gate array for use with the wire system.") + language.Add("ToolWirecpu_Model", "Model:" ) + TOOL.Information = { + { name = "left", text = "Upload program to FPGA" }, + { name = "right", text = "Open editor" }, + { name = "reload", text = "Reset" } + } +end +WireToolSetup.BaseLang() +WireToolSetup.SetupMax(7) + +TOOL.ClientConVar = { + model = "models/cheeze/wires/cpu.mdl", + filename = "", +} + +if CLIENT then + ------------------------------------------------------------------------------ + -- Make sure firing animation is displayed clientside + ------------------------------------------------------------------------------ + function TOOL:LeftClick() return true end + function TOOL:Reload() return true end + function TOOL:RightClick() return false end +end + +if SERVER then + util.AddNetworkString("FPGA_OpenEditor") + + -- Reset + function TOOL:Reload(trace) + if trace.Entity:IsPlayer() then return false end + if CLIENT then return true end + + local player = self:GetOwner() + + if IsValid(trace.Entity) and trace.Entity:GetClass() == "gmod_wire_fpga" then + trace.Entity:Reset() + return true + else + return false + end + end + + -- Spawn or upload + function TOOL:CheckHitOwnClass(trace) + return trace.Entity:IsValid() and (trace.Entity:GetClass() == "gmod_wire_fpga") + end + function TOOL:LeftClick_Update(trace) + trace.Entity:Upload() + end + function TOOL:MakeEnt(ply, model, Ang, trace) + local ent = WireLib.MakeWireEnt(ply, {Class = self.WireClass, Pos=trace.HitPos, Angle=Ang, Model=model}) + ent:Upload() + return ent + end + + -- Open editor + function TOOL:RightClick(trace) + net.Start("FPGA_OpenEditor") net.Send(self:GetOwner()) + return true + end +end + +if CLIENT then + + ------------------------------------------------------------------------------ + -- Open FPGA editor + ------------------------------------------------------------------------------ + function FPGA_OpenEditor() + if not FPGA_Editor then + FPGA_Editor = vgui.Create("FPGAEditorFrame") + FPGA_Editor:Setup("FPGA Editor", "fpgachip") + end + FPGA_Editor:Open() + end + net.Receive("FPGA_OpenEditor", FPGA_OpenEditor) + + ------------------------------------------------------------------------------ + -- Build tool control panel + ------------------------------------------------------------------------------ + function TOOL.BuildCPanel(panel) + local currentDirectory + local FileBrowser = vgui.Create("wire_expression2_browser" , panel) + panel:AddPanel(FileBrowser) + FileBrowser:Setup("fpgachip") + FileBrowser:SetSize(235,400) + function FileBrowser:OnFileOpen(filepath, newtab) + if not FPGA_Editor then + FPGA_Editor = vgui.Create("FPGAEditorFrame") + FPGA_Editor:Setup("FPGA Editor", "fpgachip") + end + FPGA_Editor:Open(filepath, nil, newtab) + end + + + ---------------------------------------------------------------------------- + local New = vgui.Create("DButton" , panel) + panel:AddPanel(New) + New:SetText("New file") + New.DoClick = function(button) + FPGA_OpenEditor() + FPGA_Editor:AutoSave() + FPGA_Editor:NewScript(false) + end + panel:AddControl("Label", {Text = ""}) + + ---------------------------------------------------------------------------- + local OpenEditor = vgui.Create("DButton", panel) + panel:AddPanel(OpenEditor) + OpenEditor:SetText("Open Editor") + OpenEditor.DoClick = FPGA_OpenEditor + + + ---------------------------------------------------------------------------- + panel:AddControl("Label", {Text = ""}) + panel:AddControl("Label", {Text = "FPGA settings:"}) + + + ---------------------------------------------------------------------------- + local modelPanel = WireDermaExts.ModelSelect(panel, "wire_fpga_model", list.Get("Wire_gate_Models"), 2) + panel:AddControl("Label", {Text = ""}) + end +end \ No newline at end of file diff --git a/lua/wire/tool_loader.lua b/lua/wire/tool_loader.lua index bdaad92868..4e5d9dfb6b 100644 --- a/lua/wire/tool_loader.lua +++ b/lua/wire/tool_loader.lua @@ -63,7 +63,7 @@ if SERVER then -- Default MakeEnt function, override to use a different MakeWire* function function WireToolObj:MakeEnt( ply, model, Ang, trace ) local ent = WireLib.MakeWireEnt( ply, {Class = self.WireClass, Pos=trace.HitPos, Angle=Ang, Model=model}, self:GetConVars() ) - if ent and ent.RestoreNetworkVars then ent:RestoreNetworkVars(self:GetDataTables()) end + if ent.RestoreNetworkVars then ent:RestoreNetworkVars(self:GetDataTables()) end return ent end @@ -74,10 +74,8 @@ if SERVER then -- -- to prevent update, set TOOL.NoLeftOnClass = true function WireToolObj:LeftClick_Update( trace ) - if trace.Entity:IsValid() then - if trace.Entity.Setup then trace.Entity:Setup(self:GetConVars()) end - if trace.Entity.RestoreNetworkVars then trace.Entity:RestoreNetworkVars(self:GetDataTables()) end - end + if trace.Entity.Setup then trace.Entity:Setup(self:GetConVars()) end + if trace.Entity.RestoreNetworkVars then trace.Entity:RestoreNetworkVars(self:GetDataTables()) end end -- @@ -91,7 +89,7 @@ if SERVER then if self:GetClientNumber( "parent" ) == 1 then if (trace.Entity:IsValid()) then -- Nocollide the gate to the prop to make adv duplicator (and normal duplicator) find it - if (not self.ClientConVar.noclip or self:GetClientNumber( "noclip" ) == 1) then + if (!self.ClientConVar.noclip or self:GetClientNumber( "noclip" ) == 1) then nocollide = constraint.NoCollide( ent, trace.Entity, 0,trace.PhysicsBone ) end @@ -217,7 +215,7 @@ function WireToolObj:GetModel() local model_convar = self:GetClientInfo( "model" ) if self.ClientConVar.modelsize then local modelsize = self:GetClientInfo( "modelsize" ) - if modelsize ~= "" then + if modelsize != "" then local model = string.sub(model_convar, 1, -5) .."_".. modelsize .. string.sub(model_convar, -4) if self:CheckValidModel(model) then return model end model = string.GetPathFromFilename(model_convar) .. modelsize .."_".. string.GetFileFromFilename(model_convar) @@ -282,6 +280,11 @@ if CLIENT then surface.CreateFont("GmodToolScreen"..size, fonttab) end + local iconparams = { + ["$vertexcolor"] = 1, + ["$vertexalpha"] = 1, + ["$ignorez"] = 1 -- This is essential, since the base Gmod screen_bg has ignorez, otherwise it'll draw overtop of us + } local txBackground = surface.GetTextureID("models/weapons/v_toolgun/wirescreen_bg") function WireToolObj:DrawToolScreen(width, height) surface.SetTexture(txBackground) @@ -313,31 +316,10 @@ if CLIENT then surface.SetTextPos(x, y) surface.DrawText(text) - local model = ClientsideModel(self:GetModel()) - - if IsValid(model) then - model:SetNoDraw(true) - model:SetIK(false) - - local params = PositionSpawnIcon(model, vector_origin, true) - - cam.Start3D(params.origin, params.angles, params.fov, 128 - 32, 150, 64, 64, params.znear, params.zfar) - render.SuppressEngineLighting(true) - render.SetLightingOrigin(vector_origin) - render.SetColorModulation(1, 1, 1) - - render.ResetModelLighting(0.2, 0.2, 0.2) - render.SetModelLighting(BOX_TOP, 1, 1, 1) - render.SetModelLighting(BOX_FRONT, 1, 1, 1) - - render.ClearDepth(true) - model:DrawModel() - - render.SuppressEngineLighting(false) - cam.End3D() - - model:Remove() - end + iconparams[ "$basetexture" ] = "spawnicons/"..self:GetModel():sub(1,-5) + local mat = CreateMaterial(self:GetModel() .. "_DImage", "UnlitGeneric", iconparams ) + surface.SetMaterial(mat) + surface.DrawTexturedRect( 128 - 32, 150, 64, 64) local on = self:GetOwner():GetInfo( "wire_tool_weldworld" )~="0" and not self:GetOwner():KeyDown(IN_WALK) draw.DrawText("World Weld: "..(on and "On" or "Off"), @@ -371,30 +353,16 @@ end -- function used by TOOL.BuildCPanel WireToolHelpers = {} --- gets the TOOL since TOOL.BuildCPanel isn't passed this var. wts >_< -function WireToolHelpers.GetTOOL(mode, ply) - if CLIENT then ply = LocalPlayer() end - if not ply then return end - - for _,wep in ipairs(ply:GetWeapons()) do - if wep:GetClass() == "gmod_tool" then - return wep:GetToolObject(mode) +if CLIENT then + -- gets the TOOL since TOOL.BuildCPanel isn't passed this var. wts >_< + function WireToolHelpers.GetTOOL(mode) + for _,wep in ipairs(LocalPlayer():GetWeapons()) do + if wep:GetClass() == "gmod_tool" then + return wep:GetToolObject(mode) + end end end -end - --- similar to GetTool (above), gets the specified tool, but only if it's the currently actively held weapon by the player -function WireToolHelpers.GetActiveTOOL(mode, ply) - if CLIENT then ply = LocalPlayer() end - if not ply then return end - - local activeWep = ply:GetActiveWeapon() - if not IsValid(activeWep) or activeWep:GetClass() ~= "gmod_tool" or activeWep.Mode ~= mode then return end - - return activeWep:GetToolObject(mode) -end -if CLIENT then -- makes the preset control for use cause we're lazy function WireToolHelpers.MakePresetControl(panel, mode, folder) if not mode or not panel then return end @@ -596,39 +564,17 @@ function WireToolSetup.SetupLinking(SingleLink, linkedname) language.Add( "Tool."..TOOL.Mode..".reload_2", "Reload on the same controller again to clear all linked entities.") end - local lastRequested = 0 function TOOL:DrawHUD() local trace = self:GetOwner():GetEyeTrace() - - if not trace.Entity then lastRequested = 0 end - - if self:CheckHitOwnClass(trace) then - local controller = trace.Entity - if controller.WireLinkedEnts and controller.WireLinkedEnts.Marks then - local markerpos = controller:GetPos():ToScreen() - for _, ent in pairs(controller.WireLinkedEnts.Marks) do - if IsValid(ent) then - local markpos = ent:GetPos():ToScreen() - surface.SetDrawColor( 255,255,100,255 ) - surface.DrawLine( markerpos.x, markerpos.y, markpos.x, markpos.y ) - end + if self:CheckHitOwnClass(trace) and trace.Entity.Marks then + local markerpos = trace.Entity:GetPos():ToScreen() + for _, ent in pairs(trace.Entity.Marks) do + if IsValid(ent) then + local markpos = ent:GetPos():ToScreen() + surface.SetDrawColor( 255,255,100,255 ) + surface.DrawLine( markerpos.x, markerpos.y, markpos.x, markpos.y ) end end - - -- request updated marks when the player looks at the entity - if CurTime() - lastRequested > 1 then -- at most once per second - if not controller.WireLinkedEnts or CurTime() > controller.WireLinkedEnts.LastUpdated then - net.Start("WireLinkedEntsRequest") - net.WriteEntity(controller) - if controller.WireLinkedEnts then - net.WriteFloat(controller.WireLinkedEnts.LastUpdated) - else - net.WriteFloat(0) - end - net.SendToServer() - end - lastRequested = CurTime() - end end end end @@ -705,52 +651,4 @@ function WireToolSetup.SetupLinking(SingleLink, linkedname) end end --- For transmitting the yellow lines showing links between controllers and ents, as used by the Adv Entity Marker -if SERVER then - util.AddNetworkString("WireLinkedEnts") - util.AddNetworkString("WireLinkedEntsRequest") - function WireLib.SendMarks(controller, marks) - if not IsValid(controller) then return end - controller.WireLinkedEnts = { - Marks = marks or controller.Marks, - LastUpdated = CurTime() - } - end - net.Receive("WireLinkedEntsRequest", function(netlen, ply) - local controller = net.ReadEntity() - local lastUpdated = net.ReadFloat() - - if not IsValid(controller) then return end - if not controller.WireLinkedEnts then return end - if not controller.WireLinkedEnts.Marks then return end - if controller.WireLinkedEnts.LastUpdated < lastUpdated then return end - - net.Start("WireLinkedEnts") - net.WriteEntity(controller) - net.WriteFloat(controller.WireLinkedEnts.LastUpdated) - net.WriteUInt(#controller.WireLinkedEnts.Marks, 16) - for _,v in pairs(controller.WireLinkedEnts.Marks) do - net.WriteEntity(v) - end - net.Send( ply ) - end) -else - net.Receive("WireLinkedEnts", function(netlen) - local controller = net.ReadEntity() - local lastUpdated = net.ReadFloat() - if IsValid(controller) then - controller.WireLinkedEnts = { - Marks = {}, - LastUpdated = lastUpdated - } - for _=1, net.ReadUInt(16) do - local link = net.ReadEntity() - if IsValid(link) then - table.insert(controller.WireLinkedEnts.Marks, link) - end - end - end - end) -end - LoadTools() From 7165d89a5320ae9db83b33d1b8d632bfe34aa492 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 02:19:20 +0100 Subject: [PATCH 002/236] Added input/outputs and connection drawing (nonfunctional so far) --- lua/wire/client/node_editor/nodeeditor.lua | 178 ++++++++++++++++++--- 1 file changed, 158 insertions(+), 20 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 93b70d84e6..0dd78055c9 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -1,10 +1,10 @@ local Editor = {} local Nodes = { - {gate = "IN", x = 0, y = 50, connections = {3}}, - {gate = "IN", x = 0, y = 150, connections = {3}}, - {gate = "AND", x = 50, y = 100, connections = {4}}, - {gate = "OUT", x = 150, y = 100, connections = {}} + {type = "wire", gate = "floor", x = 0, y = 50, connections = {{3, 1}}}, + {type = "wire", gate = "ceil", x = 0, y = 150, connections = {{3, 2}}}, + {type = "wire", gate = "+", x = 50, y = 100, connections = {{4, 1}}}, + {type = "wire", gate = "exp", x = 150, y = 100, connections = {}} } function Editor:Init() @@ -13,12 +13,37 @@ function Editor:Init() self.DraggingWorld = false self.DraggingGate = nil + self.DrawingConnection = false + self.DrawingFromInput = false + self.DrawingFromOutput = false + self.ConnectionFrom = nil + self.LastMousePos = {0, 0} self.MouseDown = false self.GateSize = 5 + + self.BackgroundColor = Color(170, 170, 170, 255) + self.NodeColor = Color(100, 100, 100, 255) + self.ConnectionColor = Color(255, 255, 255, 255) + self.InputColor = Color(100, 150, 100, 255) + self.OutputColor = Color(100, 100, 150, 255) + + --MsgC(Color(0, 150, 255), table.ToString(GateActions, "Gate Actions", true)) end +-- ceil = { +-- label = function: 0x01eca99bda28, +-- group = "Arithmetic", +-- is_banned = false, +-- name = "Ceiling (Round up)", +-- output = function: 0x01eca99bd9f8, +-- inputs = { +-- "A", +-- }, +-- }, + + -- UTILITY function Editor:PosToScr(x, y) @@ -29,6 +54,14 @@ function Editor:ScrToPos(x, y) return self.Position[1] - (self:GetWide()/2 - x) / self.Zoom, self.Position[2] - (self:GetTall()/2 - y) / self.Zoom end +function Editor:NodeInputPos(node, input) + return node.x - self.GateSize/2 - self.GateSize/5, node.y + (input - 1) * self.GateSize +end + +function Editor:NodeOutputPos(node, output) + return node.x + self.GateSize/2, node.y + (output - 1) * self.GateSize +end + -- DETECTION function Editor:GetNodeAt(x, y) local gx, gy = self:ScrToPos(x, y) @@ -45,36 +78,105 @@ function Editor:GetNodeAt(x, y) return nil end +function Editor:GetNodeInputAt(x, y) + local gx, gy = self:ScrToPos(x, y) + + for k, node in pairs(Nodes) do + gate = GateActions[node.gate] + + if gx < node.x - self.GateSize/2 - self.GateSize/5 then continue end + if gx > node.x + self.GateSize/2 + self.GateSize/5 then continue end + if gy < node.y - self.GateSize/2 then continue end + if gy > node.y - self.GateSize/2 + self.GateSize * table.Count(gate.inputs) then continue end + + for inputNum, input in pairs(gate.inputs) do + local ix, iy = self:NodeInputPos(node, inputNum) + + if gx < ix - self.GateSize/5 then continue end + if gx > ix + self.GateSize/5 then continue end + if gy < iy - self.GateSize/5 then continue end + if gy > iy + self.GateSize/5 then continue end + + return k, inputNum + end + end + + return nil +end + +function Editor:GetNodeOutputAt(x, y) + local gx, gy = self:ScrToPos(x, y) + + for k, node in pairs(Nodes) do + gate = GateActions[node.gate] + + if gx < node.x - self.GateSize/2 - self.GateSize/5 then continue end + if gx > node.x + self.GateSize/2 + self.GateSize/5 then continue end + if gy < node.y - self.GateSize/2 then continue end + if gy > node.y + self.GateSize/2 then continue end + + local ix, iy = self:NodeOutputPos(node, 1) + + if gx < ix - self.GateSize/5 then continue end + if gx > ix + self.GateSize/5 then continue end + if gy < iy - self.GateSize/5 then continue end + if gy > iy + self.GateSize/5 then continue end + + return k, 1 + end + + return nil +end + -- DRAWING -function Editor:PaintConnection(nodeFrom, nodeTo) - local x1, y1 = self:PosToScr(nodeFrom.x, nodeFrom.y) - local x2, y2 = self:PosToScr(nodeTo.x, nodeTo.y) +function Editor:PaintConnection(nodeFrom, output, nodeTo, input) + local x1, y1 = self:NodeOutputPos(nodeFrom, output) + local x2, y2 = self:NodeInputPos(nodeTo, input) - surface.SetDrawColor(Color(50, 50, 150, 255)) - surface.DrawLine(x1, y1, x2, y2) + local sx1, sy1 = self:PosToScr(x1, y1) + local sx2, sy2 = self:PosToScr(x2, y2) + + surface.SetDrawColor(self.ConnectionColor) + surface.DrawLine(sx1, sy1, sx2, sy2) end function Editor:PaintConnections() for k1, node in pairs(Nodes) do for k2, dest in pairs(node.connections) do - self:PaintConnection(node, Nodes[dest]) + self:PaintConnection(node, 1, Nodes[dest[1]], dest[2]) end end end function Editor:PaintNode(node) - surface.SetDrawColor(Color(50, 150, 50, 255)) + local gate = GateActions[node.gate] + local amountOfInputs = table.Count(gate.inputs) + + -- Body + surface.SetDrawColor(self.NodeColor) local size = self.Zoom * self.GateSize local x, y = self:PosToScr(node.x, node.y) - surface.DrawRect(x-size/2, y-size/2, size, size) + surface.DrawRect(x-size/2, y-size/2, size, size * amountOfInputs) + -- Name surface.SetFont("Default") surface.SetTextColor(255, 255, 255) - local tx, ty = surface.GetTextSize(node.gate) + local tx, ty = surface.GetTextSize(gate.name) surface.SetTextPos(x-tx/2, y-ty/2) - surface.DrawText(node.gate) + surface.DrawText(gate.name) + + -- Inputs + surface.SetDrawColor(self.InputColor) + for k, input in pairs(gate.inputs) do + -- This should rely on a function + surface.DrawRect(x - size/2 - size/5, y + (k-1) * size, size / 5, size / 5) + end + + -- Output + surface.SetDrawColor(self.OutputColor) + surface.DrawRect(x + size/2, y, size / 5, size / 5) end function Editor:PaintNodes() @@ -84,7 +186,7 @@ function Editor:PaintNodes() end function Editor:Paint() - surface.SetDrawColor(Color(200, 200, 200, 255)) + surface.SetDrawColor(self.BackgroundColor) surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) self:PaintConnections() @@ -105,6 +207,19 @@ function Editor:Paint() Nodes[self.DraggingNode].x = gx Nodes[self.DraggingNode].y = gy end + -- drawing a connection + if self.DrawingConnection then + local x, y = 0, 0 + if self.DrawingFromInput then + x, y = self:NodeInputPos(Nodes[self.ConnectionFrom[1]], self.ConnectionFrom[2]) + elseif self.DrawingFromOutput then + x, y = self:NodeOutputPos(Nodes[self.ConnectionFrom[1]], self.ConnectionFrom[2]) + end + local sx, sy = self:PosToScr(x, y) + local mx, my = self:CursorPos() + surface.SetDrawColor(self.ConnectionColor) + surface.DrawLine(sx, sy, mx, my) + end local x, y = self:CursorPos() self.LastMousePos = {x, y} @@ -114,9 +229,9 @@ end function Editor:PaintDebug() surface.SetFont("Default") surface.SetTextColor(255, 255, 255) - surface.SetTextPos(128, 128) + surface.SetTextPos(10, 10) surface.DrawText(self.Position[1] .. ", " .. self.Position[2]) - surface.SetTextPos(128, 158) + surface.SetTextPos(10, 30) surface.DrawText(self.Zoom) end @@ -124,14 +239,30 @@ end function Editor:OnMousePressed(code) if code == MOUSE_LEFT then self.MouseDown = true - --check if over node + local x, y = self:CursorPos() + + --NODE DRAGGING local node = self:GetNodeAt(x, y) - --begin dragging if node then self.DraggingNode = node end - elseif code == MOUSE_RIGHT then + + --CONNECTION DRAWING + local node, input = self:GetNodeInputAt(x, y) + if node then + self.DrawingConnection = true + self.DrawingFromInput = true + self.ConnectionFrom = {node, input} + end + local node, output = self:GetNodeOutputAt(x, y) + if node then + self.DrawingConnection = true + self.DrawingFromOutput = true + self.ConnectionFrom = {node, output} + end + elseif code == MOUSE_RIGHT then + -- PLANE DRAGGING self.DraggingWorld = true end end @@ -142,6 +273,13 @@ function Editor:OnMouseReleased(code) if code == MOUSE_LEFT then self.MouseDown = false self.DraggingNode = nil + + if self.DrawingConnection then + self.DrawingConnection = false + self.DrawingFromInput = false + self.DrawingFromOutput = false + + end elseif code == MOUSE_RIGHT then self.DraggingWorld = false end From 749a32e21904848dd3dcf48c505f76f6c514f174 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 14:22:03 +0100 Subject: [PATCH 003/236] Improved connection drawing --- addon.json | 21 ++-- addon.txt | 9 -- lua/wire/client/node_editor/nodeeditor.lua | 128 ++++++++++++++------- 3 files changed, 96 insertions(+), 62 deletions(-) delete mode 100644 addon.txt diff --git a/addon.json b/addon.json index 0865354de1..c2219583c1 100644 --- a/addon.json +++ b/addon.json @@ -1,20 +1,13 @@ { - "title" : "Wiremod", + "title" : "Wire FPGA", "type" : "tool", - "tags" : [ "build", "fun" ], - "description": "A collection of entities connectable by data wires utilizing logical concepts, which allows for the creation of advanced contraptions.", + "tags" : [ "build" ], + "description": "An extension to Wiremod, adding a FPGA chip", "ignore" : [ - "*.psd", - "*.vcproj", - "*.xcf", ".git*", - "*.md", - ".glualint.json", - ".github", - "git-hooks-pre-commit", - "gitrid.sh", - "LICENSE", - "wiremod.*" + ".gitignore", + "license", + "readme.md", ] -} +} \ No newline at end of file diff --git a/addon.txt b/addon.txt deleted file mode 100644 index 3328372c9d..0000000000 --- a/addon.txt +++ /dev/null @@ -1,9 +0,0 @@ -"AddonInfo" -{ - "name" "Wire - FPGA" - "version" "Git" - "author_name" "Lysdal" - "author_url" "https://lysdal.dev" - "info" "Field-Programmable Gate Array" - "override" "0" -} diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 0dd78055c9..2702e84e37 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -16,12 +16,13 @@ function Editor:Init() self.DrawingConnection = false self.DrawingFromInput = false self.DrawingFromOutput = false - self.ConnectionFrom = nil + self.DrawingConnectionFrom = nil self.LastMousePos = {0, 0} self.MouseDown = false self.GateSize = 5 + self.IOSize = 1 self.BackgroundColor = Color(170, 170, 170, 255) self.NodeColor = Color(100, 100, 100, 255) @@ -55,7 +56,7 @@ function Editor:ScrToPos(x, y) end function Editor:NodeInputPos(node, input) - return node.x - self.GateSize/2 - self.GateSize/5, node.y + (input - 1) * self.GateSize + return node.x - self.GateSize/2 - self.IOSize, node.y + (input - 1) * self.GateSize end function Editor:NodeOutputPos(node, output) @@ -84,18 +85,18 @@ function Editor:GetNodeInputAt(x, y) for k, node in pairs(Nodes) do gate = GateActions[node.gate] - if gx < node.x - self.GateSize/2 - self.GateSize/5 then continue end - if gx > node.x + self.GateSize/2 + self.GateSize/5 then continue end + if gx < node.x - self.GateSize/2 - self.IOSize then continue end + if gx > node.x + self.GateSize/2 + self.IOSize then continue end if gy < node.y - self.GateSize/2 then continue end if gy > node.y - self.GateSize/2 + self.GateSize * table.Count(gate.inputs) then continue end for inputNum, input in pairs(gate.inputs) do local ix, iy = self:NodeInputPos(node, inputNum) - if gx < ix - self.GateSize/5 then continue end - if gx > ix + self.GateSize/5 then continue end - if gy < iy - self.GateSize/5 then continue end - if gy > iy + self.GateSize/5 then continue end + if gx < ix - self.IOSize then continue end + if gx > ix + self.IOSize then continue end + if gy < iy - self.IOSize then continue end + if gy > iy + self.IOSize then continue end return k, inputNum end @@ -110,17 +111,17 @@ function Editor:GetNodeOutputAt(x, y) for k, node in pairs(Nodes) do gate = GateActions[node.gate] - if gx < node.x - self.GateSize/2 - self.GateSize/5 then continue end - if gx > node.x + self.GateSize/2 + self.GateSize/5 then continue end + if gx < node.x - self.GateSize/2 - self.IOSize then continue end + if gx > node.x + self.GateSize/2 + self.IOSize then continue end if gy < node.y - self.GateSize/2 then continue end if gy > node.y + self.GateSize/2 then continue end local ix, iy = self:NodeOutputPos(node, 1) - if gx < ix - self.GateSize/5 then continue end - if gx > ix + self.GateSize/5 then continue end - if gy < iy - self.GateSize/5 then continue end - if gy > iy + self.GateSize/5 then continue end + if gx < ix - self.IOSize then continue end + if gx > ix + self.IOSize then continue end + if gy < iy - self.IOSize then continue end + if gy > iy + self.IOSize then continue end return k, 1 end @@ -152,12 +153,13 @@ function Editor:PaintNode(node) local gate = GateActions[node.gate] local amountOfInputs = table.Count(gate.inputs) - -- Body - surface.SetDrawColor(self.NodeColor) + local x, y = self:PosToScr(node.x, node.y) local size = self.Zoom * self.GateSize - local x, y = self:PosToScr(node.x, node.y) + local ioSize = self.Zoom * self.IOSize + -- Body + surface.SetDrawColor(self.NodeColor) surface.DrawRect(x-size/2, y-size/2, size, size * amountOfInputs) -- Name @@ -171,12 +173,12 @@ function Editor:PaintNode(node) surface.SetDrawColor(self.InputColor) for k, input in pairs(gate.inputs) do -- This should rely on a function - surface.DrawRect(x - size/2 - size/5, y + (k-1) * size, size / 5, size / 5) + surface.DrawRect(x - size/2 - ioSize, y + (k-1) * size, ioSize, ioSize) end -- Output surface.SetDrawColor(self.OutputColor) - surface.DrawRect(x + size/2, y, size / 5, size / 5) + surface.DrawRect(x + size/2, y, ioSize, ioSize) end function Editor:PaintNodes() @@ -189,8 +191,8 @@ function Editor:Paint() surface.SetDrawColor(self.BackgroundColor) surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) - self:PaintConnections() self:PaintNodes() + self:PaintConnections() self:PaintDebug() @@ -211,9 +213,9 @@ function Editor:Paint() if self.DrawingConnection then local x, y = 0, 0 if self.DrawingFromInput then - x, y = self:NodeInputPos(Nodes[self.ConnectionFrom[1]], self.ConnectionFrom[2]) + x, y = self:NodeInputPos(Nodes[self.DrawingConnectionFrom[1]], self.DrawingConnectionFrom[2]) elseif self.DrawingFromOutput then - x, y = self:NodeOutputPos(Nodes[self.ConnectionFrom[1]], self.ConnectionFrom[2]) + x, y = self:NodeOutputPos(Nodes[self.DrawingConnectionFrom[1]], self.DrawingConnectionFrom[2]) end local sx, sy = self:PosToScr(x, y) local mx, my = self:CursorPos() @@ -235,6 +237,42 @@ function Editor:PaintDebug() surface.DrawText(self.Zoom) end +--ACTIONS +function Editor:BeginDrawingConnection(x, y) + local node, input = self:GetNodeInputAt(x, y) + if node then + --check if something is connected to this input + local connectedTo = nil + for nodeId, fromNode in pairs(Nodes) do + for k, connection in pairs(fromNode.connections) do + if connection[1] == node && connection[2] == input then + connectedTo = {nodeId = nodeId, node = fromNode, output = k} + end + end + end + + --Input already connected + if connectedTo then + table.remove(connectedTo.node.connections, connectedTo.output) + self.DrawingConnectionFrom = {connectedTo.nodeId, 1} + self.DrawingFromOutput = true + else + --input not connected + self.DrawingConnectionFrom = {node, input} + self.DrawingFromInput = true + end + + self.DrawingConnection = true + end + + local node, output = self:GetNodeOutputAt(x, y) + if node then + self.DrawingConnection = true + self.DrawingFromOutput = true + self.DrawingConnectionFrom = {node, output} + end +end + --EVENTS function Editor:OnMousePressed(code) if code == MOUSE_LEFT then @@ -249,18 +287,7 @@ function Editor:OnMousePressed(code) end --CONNECTION DRAWING - local node, input = self:GetNodeInputAt(x, y) - if node then - self.DrawingConnection = true - self.DrawingFromInput = true - self.ConnectionFrom = {node, input} - end - local node, output = self:GetNodeOutputAt(x, y) - if node then - self.DrawingConnection = true - self.DrawingFromOutput = true - self.ConnectionFrom = {node, output} - end + self:BeginDrawingConnection(x, y) elseif code == MOUSE_RIGHT then -- PLANE DRAGGING self.DraggingWorld = true @@ -268,17 +295,15 @@ function Editor:OnMousePressed(code) end function Editor:OnMouseReleased(code) - --if not self.MouseDown then return end + --if not self.MouseDown then return end + local x, y = self:CursorPos() if code == MOUSE_LEFT then self.MouseDown = false self.DraggingNode = nil if self.DrawingConnection then - self.DrawingConnection = false - self.DrawingFromInput = false - self.DrawingFromOutput = false - + self:OnDrawConnectionFinished(x, y) end elseif code == MOUSE_RIGHT then self.DraggingWorld = false @@ -286,6 +311,31 @@ function Editor:OnMouseReleased(code) end +function Editor:OnDrawConnectionFinished(x, y) + if self.DrawingFromOutput then + local node, input = self:GetNodeInputAt(x, y) + + if node then + local sourceNode = Nodes[self.DrawingConnectionFrom[1]] + + table.insert(sourceNode.connections, {node, input}) + end + elseif self.DrawingFromInput then + local node, output = self:GetNodeOutputAt(x, y) + -- discard output for now + + if node then + local sourceNode = Nodes[node] + + table.insert(sourceNode.connections, {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]}) + end + end + + self.DrawingConnection = false + self.DrawingFromInput = false + self.DrawingFromOutput = false +end + function Editor:OnMouseWheeled(delta) self.Zoom = self.Zoom + delta * 0.1 if self.Zoom < 0.1 then self.Zoom = 0.1 end From 9d76895ec6ed556c0edc8ef2c24db6a09a729c22 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 15:03:13 +0100 Subject: [PATCH 004/236] Flipped around connection structure, minor visual improvements --- lua/wire/client/node_editor/nodeeditor.lua | 89 ++++++++++------------ 1 file changed, 41 insertions(+), 48 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 2702e84e37..2155436380 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -1,10 +1,10 @@ local Editor = {} local Nodes = { - {type = "wire", gate = "floor", x = 0, y = 50, connections = {{3, 1}}}, - {type = "wire", gate = "ceil", x = 0, y = 150, connections = {{3, 2}}}, - {type = "wire", gate = "+", x = 50, y = 100, connections = {{4, 1}}}, - {type = "wire", gate = "exp", x = 150, y = 100, connections = {}} + {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = nil}}, + {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = nil}}, + {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, + {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}} } function Editor:Init() @@ -22,7 +22,7 @@ function Editor:Init() self.MouseDown = false self.GateSize = 5 - self.IOSize = 1 + self.IOSize = 2 self.BackgroundColor = Color(170, 170, 170, 255) self.NodeColor = Color(100, 100, 100, 255) @@ -56,11 +56,11 @@ function Editor:ScrToPos(x, y) end function Editor:NodeInputPos(node, input) - return node.x - self.GateSize/2 - self.IOSize, node.y + (input - 1) * self.GateSize + return node.x - self.GateSize/2 - self.IOSize/2, node.y + (input - 1) * self.GateSize end function Editor:NodeOutputPos(node, output) - return node.x + self.GateSize/2, node.y + (output - 1) * self.GateSize + return node.x + self.GateSize/2 + self.IOSize/2, node.y + (output - 1) * self.GateSize end -- DETECTION @@ -93,10 +93,10 @@ function Editor:GetNodeInputAt(x, y) for inputNum, input in pairs(gate.inputs) do local ix, iy = self:NodeInputPos(node, inputNum) - if gx < ix - self.IOSize then continue end - if gx > ix + self.IOSize then continue end - if gy < iy - self.IOSize then continue end - if gy > iy + self.IOSize then continue end + if gx < ix - self.IOSize/2 then continue end + if gx > ix + self.IOSize/2 then continue end + if gy < iy - self.IOSize/2 then continue end + if gy > iy + self.IOSize/2 then continue end return k, inputNum end @@ -118,10 +118,10 @@ function Editor:GetNodeOutputAt(x, y) local ix, iy = self:NodeOutputPos(node, 1) - if gx < ix - self.IOSize then continue end - if gx > ix + self.IOSize then continue end - if gy < iy - self.IOSize then continue end - if gy > iy + self.IOSize then continue end + if gx < ix - self.IOSize/2 then continue end + if gx > ix + self.IOSize/2 then continue end + if gy < iy - self.IOSize/2 then continue end + if gy > iy + self.IOSize/2 then continue end return k, 1 end @@ -143,8 +143,8 @@ end function Editor:PaintConnections() for k1, node in pairs(Nodes) do - for k2, dest in pairs(node.connections) do - self:PaintConnection(node, 1, Nodes[dest[1]], dest[2]) + for input, connectedTo in pairs(node.connections) do + self:PaintConnection(Nodes[connectedTo[1]], connectedTo[2], node, input) end end end @@ -166,19 +166,19 @@ function Editor:PaintNode(node) surface.SetFont("Default") surface.SetTextColor(255, 255, 255) local tx, ty = surface.GetTextSize(gate.name) - surface.SetTextPos(x-tx/2, y-ty/2) + surface.SetTextPos(x-tx/2, y-ty/2-size/1.2) surface.DrawText(gate.name) -- Inputs surface.SetDrawColor(self.InputColor) for k, input in pairs(gate.inputs) do -- This should rely on a function - surface.DrawRect(x - size/2 - ioSize, y + (k-1) * size, ioSize, ioSize) + surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize, ioSize) end -- Output surface.SetDrawColor(self.OutputColor) - surface.DrawRect(x + size/2, y, ioSize, ioSize) + surface.DrawRect(x + size/2, y - ioSize/2, ioSize, ioSize) end function Editor:PaintNodes() @@ -239,37 +239,32 @@ end --ACTIONS function Editor:BeginDrawingConnection(x, y) - local node, input = self:GetNodeInputAt(x, y) - if node then + local nodeId, inputId = self:GetNodeInputAt(x, y) + if nodeId then --check if something is connected to this input - local connectedTo = nil - for nodeId, fromNode in pairs(Nodes) do - for k, connection in pairs(fromNode.connections) do - if connection[1] == node && connection[2] == input then - connectedTo = {nodeId = nodeId, node = fromNode, output = k} - end - end - end + node = Nodes[nodeId] + input = node.connections[inputId] --Input already connected - if connectedTo then - table.remove(connectedTo.node.connections, connectedTo.output) - self.DrawingConnectionFrom = {connectedTo.nodeId, 1} + if input then + local connectedNode, connectedOutput = input[1], input[2] + node.connections[inputId] = nil + self.DrawingConnectionFrom = {connectedNode, connectedOutput} self.DrawingFromOutput = true else --input not connected - self.DrawingConnectionFrom = {node, input} + self.DrawingConnectionFrom = {nodeId, inputId} self.DrawingFromInput = true end self.DrawingConnection = true end - local node, output = self:GetNodeOutputAt(x, y) - if node then + local nodeId, outputId = self:GetNodeOutputAt(x, y) + if nodeId then self.DrawingConnection = true self.DrawingFromOutput = true - self.DrawingConnectionFrom = {node, output} + self.DrawingConnectionFrom = {nodeId, outputId} end end @@ -313,21 +308,19 @@ end function Editor:OnDrawConnectionFinished(x, y) if self.DrawingFromOutput then - local node, input = self:GetNodeInputAt(x, y) - - if node then - local sourceNode = Nodes[self.DrawingConnectionFrom[1]] + local nodeId, inputId = self:GetNodeInputAt(x, y) - table.insert(sourceNode.connections, {node, input}) + if nodeId then + local node = Nodes[nodeId] + node.connections[inputId] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} end - elseif self.DrawingFromInput then - local node, output = self:GetNodeOutputAt(x, y) - -- discard output for now - if node then - local sourceNode = Nodes[node] + elseif self.DrawingFromInput then + local nodeId, outputId = self:GetNodeOutputAt(x, y) - table.insert(sourceNode.connections, {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]}) + if nodeId then + local node = Nodes[self.DrawingConnectionFrom[1]] + node.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputId} end end From 52f9fe45ae55ef7ee5cbf53e4fa84828f7e36229 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 18:52:13 +0100 Subject: [PATCH 005/236] Added nodetypes, with new Input and Output gates --- lua/wire/client/node_editor/nodeeditor.lua | 60 +++++++++++++++++----- 1 file changed, 48 insertions(+), 12 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 2155436380..735e92c166 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -1,10 +1,12 @@ local Editor = {} local Nodes = { - {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = nil}}, - {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = nil}}, + {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, + {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, - {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}} + {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, + {type = "io", gate = "in", x = -100, y = 100, connections = {}}, + {type = "io", gate = "out", x = 200, y = 100, connections = {[1] = {4, 1}}}, } function Editor:Init() @@ -45,6 +47,22 @@ end -- }, +-- GATES +function Editor:GetIOGate(node) + if node.gate == "in" then + return {name = "Input", inputs = {}, outputs = {"Out"}} + elseif node.gate == "out" then + return {name = "Output", inputs = {"A"}, outputs = {}} + end +end + +function Editor:GetGate(node) + if node.type == "wire" then + return GateActions[node.gate] + elseif node.type == "io" then + return self:GetIOGate(node) + end +end -- UTILITY function Editor:PosToScr(x, y) @@ -83,7 +101,7 @@ function Editor:GetNodeInputAt(x, y) local gx, gy = self:ScrToPos(x, y) for k, node in pairs(Nodes) do - gate = GateActions[node.gate] + local gate = self:GetGate(node) if gx < node.x - self.GateSize/2 - self.IOSize then continue end if gx > node.x + self.GateSize/2 + self.IOSize then continue end @@ -109,7 +127,7 @@ function Editor:GetNodeOutputAt(x, y) local gx, gy = self:ScrToPos(x, y) for k, node in pairs(Nodes) do - gate = GateActions[node.gate] + local gate = self:GetGate(node) if gx < node.x - self.GateSize/2 - self.IOSize then continue end if gx > node.x + self.GateSize/2 + self.IOSize then continue end @@ -150,8 +168,16 @@ function Editor:PaintConnections() end function Editor:PaintNode(node) - local gate = GateActions[node.gate] - local amountOfInputs = table.Count(gate.inputs) + local gate = self:GetGate(node) + + local amountOfInputs = 0 + if gate.inputs then + amountOfInputs = table.Count(gate.inputs) + end + local amountOfOutputs = 1 + if gate.outputs then + local amountOfOutputs = table.Count(gate.outputs) + end local x, y = self:PosToScr(node.x, node.y) @@ -159,8 +185,10 @@ function Editor:PaintNode(node) local ioSize = self.Zoom * self.IOSize -- Body + local height = math.max(amountOfInputs, amountOfOutputs, 1) + surface.SetDrawColor(self.NodeColor) - surface.DrawRect(x-size/2, y-size/2, size, size * amountOfInputs) + surface.DrawRect(x-size/2, y-size/2, size, size * height) -- Name surface.SetFont("Default") @@ -171,14 +199,22 @@ function Editor:PaintNode(node) -- Inputs surface.SetDrawColor(self.InputColor) - for k, input in pairs(gate.inputs) do - -- This should rely on a function - surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize, ioSize) + if gate.inputs then + for k, input in pairs(gate.inputs) do + -- This should rely on a function + surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize, ioSize) + end end -- Output surface.SetDrawColor(self.OutputColor) - surface.DrawRect(x + size/2, y - ioSize/2, ioSize, ioSize) + if gate.outputs then + for k, output in pairs(gate.outputs) do + surface.DrawRect(x + size/2, y - ioSize/2 + (k-1) * size, ioSize, ioSize) + end + else + surface.DrawRect(x + size/2, y - ioSize/2, ioSize, ioSize) + end end function Editor:PaintNodes() From dbff7d57405028180650898e8c618941f000c7d9 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 20:08:52 +0100 Subject: [PATCH 006/236] Made saving and loading functional --- lua/wire/client/node_editor/nodeeditor.lua | 63 ++++-- .../client/node_editor/wire_fpga_editor.lua | 208 +++++++++--------- 2 files changed, 139 insertions(+), 132 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 735e92c166..f0c9bbeaf5 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -1,14 +1,5 @@ local Editor = {} -local Nodes = { - {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, - {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, - {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, - {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, - {type = "io", gate = "in", x = -100, y = 100, connections = {}}, - {type = "io", gate = "out", x = 200, y = 100, connections = {[1] = {4, 1}}}, -} - function Editor:Init() self.Position = {0, 0} self.Zoom = 1 @@ -32,6 +23,15 @@ function Editor:Init() self.InputColor = Color(100, 150, 100, 255) self.OutputColor = Color(100, 100, 150, 255) + self.Nodes = { + {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, + {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, + {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, + {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, + {type = "io", gate = "in", x = -100, y = 100, connections = {}}, + {type = "io", gate = "out", x = 200, y = 100, connections = {[1] = {4, 1}}}, + } + --MsgC(Color(0, 150, 255), table.ToString(GateActions, "Gate Actions", true)) end @@ -46,6 +46,25 @@ end -- }, -- }, +-- INTERACTION +function Editor:GetData() + return util.TableToJSON({ + Nodes = self.Nodes, + Position = self.Position, + Zoom = self.Zoom + }, false) +end + +function Editor:SetData(data) + local data = util.JSONToTable(data) + -- error check + + self.Nodes = data.Nodes + self.Position = data.Position + self.Zoom = data.Zoom +end + + -- GATES function Editor:GetIOGate(node) @@ -85,7 +104,7 @@ end function Editor:GetNodeAt(x, y) local gx, gy = self:ScrToPos(x, y) - for k, node in pairs(Nodes) do + for k, node in pairs(self.Nodes) do if gx < node.x - self.GateSize/2 then continue end if gx > node.x + self.GateSize/2 then continue end if gy < node.y - self.GateSize/2 then continue end @@ -100,7 +119,7 @@ end function Editor:GetNodeInputAt(x, y) local gx, gy = self:ScrToPos(x, y) - for k, node in pairs(Nodes) do + for k, node in pairs(self.Nodes) do local gate = self:GetGate(node) if gx < node.x - self.GateSize/2 - self.IOSize then continue end @@ -126,7 +145,7 @@ end function Editor:GetNodeOutputAt(x, y) local gx, gy = self:ScrToPos(x, y) - for k, node in pairs(Nodes) do + for k, node in pairs(self.Nodes) do local gate = self:GetGate(node) if gx < node.x - self.GateSize/2 - self.IOSize then continue end @@ -160,9 +179,9 @@ function Editor:PaintConnection(nodeFrom, output, nodeTo, input) end function Editor:PaintConnections() - for k1, node in pairs(Nodes) do + for k1, node in pairs(self.Nodes) do for input, connectedTo in pairs(node.connections) do - self:PaintConnection(Nodes[connectedTo[1]], connectedTo[2], node, input) + self:PaintConnection(self.Nodes[connectedTo[1]], connectedTo[2], node, input) end end end @@ -218,7 +237,7 @@ function Editor:PaintNode(node) end function Editor:PaintNodes() - for k, node in pairs(Nodes) do + for k, node in pairs(self.Nodes) do self:PaintNode(node) end end @@ -242,16 +261,16 @@ function Editor:Paint() if self.DraggingNode then local x, y = self:CursorPos() local gx, gy = self:ScrToPos(x, y) - Nodes[self.DraggingNode].x = gx - Nodes[self.DraggingNode].y = gy + self.Nodes[self.DraggingNode].x = gx + self.Nodes[self.DraggingNode].y = gy end -- drawing a connection if self.DrawingConnection then local x, y = 0, 0 if self.DrawingFromInput then - x, y = self:NodeInputPos(Nodes[self.DrawingConnectionFrom[1]], self.DrawingConnectionFrom[2]) + x, y = self:NodeInputPos(self.Nodes[self.DrawingConnectionFrom[1]], self.DrawingConnectionFrom[2]) elseif self.DrawingFromOutput then - x, y = self:NodeOutputPos(Nodes[self.DrawingConnectionFrom[1]], self.DrawingConnectionFrom[2]) + x, y = self:NodeOutputPos(self.Nodes[self.DrawingConnectionFrom[1]], self.DrawingConnectionFrom[2]) end local sx, sy = self:PosToScr(x, y) local mx, my = self:CursorPos() @@ -278,7 +297,7 @@ function Editor:BeginDrawingConnection(x, y) local nodeId, inputId = self:GetNodeInputAt(x, y) if nodeId then --check if something is connected to this input - node = Nodes[nodeId] + node = self.Nodes[nodeId] input = node.connections[inputId] --Input already connected @@ -347,7 +366,7 @@ function Editor:OnDrawConnectionFinished(x, y) local nodeId, inputId = self:GetNodeInputAt(x, y) if nodeId then - local node = Nodes[nodeId] + local node = self.Nodes[nodeId] node.connections[inputId] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} end @@ -355,7 +374,7 @@ function Editor:OnDrawConnectionFinished(x, y) local nodeId, outputId = self:GetNodeOutputAt(x, y) if nodeId then - local node = Nodes[self.DrawingConnectionFrom[1]] + local node = self.Nodes[self.DrawingConnectionFrom[1]] node.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputId} end end diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index b28aeba04e..0c9484616f 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -298,9 +298,18 @@ function Editor:SetActiveTab(val) self:UpdateActiveTabTitle() end +local function extractNameFromFilePath(str) + local found = str:reverse():find("/", 1, true) + if found then + return str:Right(found - 1) + else + return str + end +end + function Editor:UpdateActiveTabTitle() local title = self:GetChosenFile() - local tabtext = self:GetChosenFile() + local tabtext = extractNameFromFilePath(self:GetChosenFile()) if title then self:SubTitle("Editing: " .. title) else self:SubTitle() end if tabtext then @@ -330,15 +339,6 @@ function Editor:SetActiveTabIndex(index) self:SetActiveTab(tab) end -local function extractNameFromFilePath(str) - local found = str:reverse():find("/", 1, true) - if found then - return str:Right(found - 1) - else - return str - end -end - local old function Editor:FixTabFadeTime() if old ~= nil then return end -- It's already being fixed @@ -496,7 +496,7 @@ function Editor:CloseTab(_tab) if self:GetNumTabs() == 1 then activetab:SetText("chip") self.C.TabHolder:InvalidateLayout() - self:NewScript(true) + self:NewChip(true) return end @@ -521,7 +521,7 @@ function Editor:CloseTab(_tab) else -- Reset the current tab (backup) self:GetActiveTab():SetText("chip") self.C.TabHolder:InvalidateLayout() - self:NewScript(true) + self:NewChip(true) return end else -- Change to the previous tab @@ -535,7 +535,7 @@ function Editor:CloseTab(_tab) else -- Reset the current tab (backup) self:GetActiveTab():SetText("chip") self.C.TabHolder:InvalidateLayout() - self:NewScript(true) + self:NewChip(true) return end end @@ -725,7 +725,7 @@ function Editor:InitComponents() end function Editor:AutoSave() - local buffer = self:GetNodes() + local buffer = self:GetData() if self.savebuffer == buffer or buffer == "" then return end self.savebuffer = buffer file.Write(self.Location .. "/_autosave_.txt", buffer) @@ -860,7 +860,7 @@ function Editor:NewChip(incurrent) self:GetActiveTab():SetText("chip") self.C.TabHolder:InvalidateLayout() - self:ClearNodes() + self:ClearData() end end @@ -873,7 +873,7 @@ function Editor:InitShutdownHook() -- save code when shutting down hook.Add("ShutDown", "wire_fpga_ShutDown" .. id, function() -- if wire_fpga_editor == nil then return end - local buffer = self:GetNodes() + local buffer = self:GetData() if buffer == defaultcode then return end file.Write(self.Location .. "/_shutdown_.txt", buffer) @@ -981,20 +981,15 @@ function Editor:ExtractName() return end --- function Editor:SetCode(code) --- self:GetCurrentEditor():SetText(code) --- self.savebuffer = self:GetCode() --- if self.E2 then self:Validate() end --- self:ExtractName() --- end - -function Editor:SetNodes(nodes) - --self:GetCurrentEditor():SetText(code) - self.savebuffer = self:GetNodes() +function Editor:SetData(data) + self:GetCurrentEditor():SetData(data) + self.savebuffer = self:GetData() + self:ExtractName() end -function Editor:ClearNodes() - +function Editor:ClearData() + self:GetCurrentEditor():SetData("{}") + self.savebuffer = self:GetData() end function Editor:GetEditor(n) @@ -1007,57 +1002,53 @@ function Editor:GetCurrentEditor() return self:GetActiveTab():GetPanel() end --- function Editor:GetCode() --- return self:GetCurrentEditor():GetValue() --- end - -function Editor:GetNodes() - -- return self:GetCurrentEditor():GetValue() - return {} +function Editor:GetData() + return self:GetCurrentEditor():GetData() end -function Editor:Open(Line, nodes, forcenewtab) - if self:IsVisible() and not Line and not nodes then self:Close() end - hook.Run("WireFPGAEditorOpen", self, Line, nodes, forcenewtab) +function Editor:Open(Line, data, forcenewtab) + if self:IsVisible() and not Line and not data then self:Close() end + hook.Run("WireFPGAEditorOpen", self, Line, data, forcenewtab) self:SetV(true) if self.chip then self.C.SaE:SetText("Upload & Exit") else self.C.SaE:SetText("Save and Exit") end - -- if code then - -- if not forcenewtab then - -- for i = 1, self:GetNumTabs() do - -- if self:GetEditor(i).chosenfile == Line then - -- self:SetActiveTab(i) - -- self:SetNodes(nodes) - -- return - -- elseif self:GetEditor(i):GetValue() == nodes then - -- self:SetActiveTab(i) - -- return - -- end - -- end - -- end - -- local _, tabtext = getPreferredTitles(Line, nodes) - -- local tab - -- if self.NewTabOnOpen:GetBool() or forcenewtab then - -- tab = self:CreateTab(tabtext).Tab - -- else - -- tab = self:GetActiveTab() - -- tab:SetText(tabtext) - -- self.C.TabHolder:InvalidateLayout() - -- end - -- self:SetActiveTab(tab) - - -- self:ChosenFile() - -- self:SetNodes(nodes) - -- if Line then self:SubTitle("Editing: " .. Line) end - -- return - -- end - -- if Line then self:LoadFile(Line, forcenewtab) return end + if data then + if not forcenewtab then + for i = 1, self:GetNumTabs() do + if self:GetEditor(i).chosenfile == Line then + self:SetActiveTab(i) + self:SetData(data) + return + elseif self:GetEditor(i):GetValue() == data then + self:SetActiveTab(i) + return + end + end + end + local tabtext = extractNameFromFilePath(Line) + local tab + if self.NewTabOnOpen:GetBool() or forcenewtab then + tab = self:CreateTab(tabtext).Tab + else + tab = self:GetActiveTab() + tab:SetText(tabtext) + self.C.TabHolder:InvalidateLayout() + end + self:SetActiveTab(tab) + + self:ChosenFile() + self:SetData(data) + if Line then self:SubTitle("Editing: " .. Line) end + return + end + if Line then self:LoadFile(Line, forcenewtab) return end end function Editor:SaveFile(Line, close, SaveAs) + self:ExtractName() if close and self.chip then --WireLib.Expression2Upload(self.chip, self:GetCode()) self:Close() @@ -1096,7 +1087,7 @@ function Editor:SaveFile(Line, close, SaveAs) return end - file.Write(Line, self:GetNodes()) + file.Write(Line, self:GetData()) local panel = self.C.Val timer.Simple(0, function() panel.SetText(panel, " Saved as " .. Line) end) @@ -1104,58 +1095,55 @@ function Editor:SaveFile(Line, close, SaveAs) if not self.chip then self:ChosenFile(Line) end if close then - if self.E2 then - GAMEMODE:AddNotify("Expression saved as " .. Line .. ".", NOTIFY_GENERIC, 7) - else - GAMEMODE:AddNotify("Source code saved as " .. Line .. ".", NOTIFY_GENERIC, 7) - end + GAMEMODE:AddNotify("Source code saved as " .. Line .. ".", NOTIFY_GENERIC, 7) self:Close() end end function Editor:LoadFile(Line, forcenewtab) - -- if not Line or file.IsDir(Line, "DATA") then return end - - -- local f = file.Open(Line, "r", "DATA") - -- if not f then - -- ErrorNoHalt("Erroring opening file: " .. Line) - -- else - -- local str = f:Read(f:Size()) or "" - -- f:Close() - -- self:AutoSave() - -- if not forcenewtab then - -- for i = 1, self:GetNumTabs() do - -- if self:GetEditor(i).chosenfile == Line then - -- self:SetActiveTab(i) - -- if forcenewtab ~= nil then self:SetCode(str) end - -- return - -- elseif self:GetEditor(i):GetValue() == str then - -- self:SetActiveTab(i) - -- return - -- end - -- end - -- end - - -- local _, tabtext = getPreferredTitles(Line, str) - -- local tab - -- if self.NewTabOnOpen:GetBool() or forcenewtab then - -- tab = self:CreateTab(tabtext).Tab - -- else - -- tab = self:GetActiveTab() - -- tab:SetText(tabtext) - -- self.C.TabHolder:InvalidateLayout() - -- end - -- self:SetActiveTab(tab) - -- self:ChosenFile(Line) - - -- self:SetCode(str) - -- end + if not Line or file.IsDir(Line, "DATA") then return end + + local f = file.Open(Line, "r", "DATA") + if not f then + ErrorNoHalt("Erroring opening file: " .. Line) + else + local str = f:Read(f:Size()) or "" + f:Close() + self:AutoSave() + if not forcenewtab then + for i = 1, self:GetNumTabs() do + if self:GetEditor(i).chosenfile == Line then + self:SetActiveTab(i) + if forcenewtab ~= nil then self:SetData(str) end + return + elseif self:GetEditor(i):GetValue() == str then + self:SetActiveTab(i) + return + end + end + end + + local tabtext = extractNameFromFilePath(Line) + local tab + if self.NewTabOnOpen:GetBool() or forcenewtab then + tab = self:CreateTab(tabtext).Tab + else + tab = self:GetActiveTab() + tab:SetText(tabtext) + self.C.TabHolder:InvalidateLayout() + end + self:SetActiveTab(tab) + self:ChosenFile(Line) + + self:SetData(str) + end end function Editor:Close() timer.Stop("fpgaautosave") self:AutoSave() + self:ExtractName() self:SetV(false) self.chip = false From c034cd65c72eb211299c174814d695772f55b38f Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 2 Jan 2021 20:24:00 +0100 Subject: [PATCH 007/236] Fixed bug with tab closing --- lua/wire/client/node_editor/nodeeditor.lua | 5 +++++ lua/wire/client/node_editor/wire_fpga_editor.lua | 7 +++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index f0c9bbeaf5..b4f730270e 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -64,6 +64,11 @@ function Editor:SetData(data) self.Zoom = data.Zoom end +function Editor:ClearData() + self.Nodes = {} + self.Position = {0, 0} + self.Zoom = 1 +end -- GATES diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 0c9484616f..53f1b37449 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -309,7 +309,10 @@ end function Editor:UpdateActiveTabTitle() local title = self:GetChosenFile() - local tabtext = extractNameFromFilePath(self:GetChosenFile()) + local tabtext = self:GetChosenFile() + if self:GetChosenFile() then + tabtext = extractNameFromFilePath(self:GetChosenFile()) + end if title then self:SubTitle("Editing: " .. title) else self:SubTitle() end if tabtext then @@ -988,7 +991,7 @@ function Editor:SetData(data) end function Editor:ClearData() - self:GetCurrentEditor():SetData("{}") + self:GetCurrentEditor():ClearData() self.savebuffer = self:GetData() end From 925604f2e16b47bf876c46f1e8553f93d7a01034 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 3 Jan 2021 00:14:55 +0100 Subject: [PATCH 008/236] Fixed bugs related to saving --- lua/wire/client/node_editor/nodeeditor.lua | 8 +++---- .../client/node_editor/wire_fpga_editor.lua | 21 +++++++------------ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index b4f730270e..8f589ca83d 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -17,11 +17,11 @@ function Editor:Init() self.GateSize = 5 self.IOSize = 2 - self.BackgroundColor = Color(170, 170, 170, 255) + self.BackgroundColor = Color(32, 32, 32, 255) self.NodeColor = Color(100, 100, 100, 255) - self.ConnectionColor = Color(255, 255, 255, 255) - self.InputColor = Color(100, 150, 100, 255) - self.OutputColor = Color(100, 100, 150, 255) + self.ConnectionColor = Color(200, 200, 200, 255) + self.InputColor = Color(120, 250, 120, 255) + self.OutputColor = Color(120, 120, 250, 255) self.Nodes = { {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 53f1b37449..37283e5329 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -310,7 +310,8 @@ end function Editor:UpdateActiveTabTitle() local title = self:GetChosenFile() local tabtext = self:GetChosenFile() - if self:GetChosenFile() then + if self:GetChosenFile() + then tabtext = extractNameFromFilePath(self:GetChosenFile()) end @@ -458,7 +459,9 @@ end function Editor:NewTab() local sheet = self:CreateTab("chip") - self:SetActiveTab(sheet.Tab) + self:SetActiveTab(sheet.Tab) + + self:NewChip(true) end function Editor:CloseTab(_tab) @@ -596,7 +599,6 @@ function Editor:InitComponents() self.C.MainPane = vgui.Create("DPanel", self.C.Divider) self.C.Menu = vgui.Create("DPanel", self.C.MainPane) - self.C.Val = vgui.Create("Button", self.C.MainPane) -- Validation line self.C.TabHolder = vgui.Create("DPropertySheet", self.C.MainPane) self.C.Btoggle = vgui.CreateFromTable(DMenuButton, self.C.Menu) -- Toggle Browser being shown @@ -628,13 +630,11 @@ function Editor:InitComponents() self.C.Menu:Dock(TOP) self.C.TabHolder:Dock(FILL) - self.C.Val:Dock(BOTTOM) self.C.TabHolder:SetPadding(1) self.C.Menu:SetHeight(24) self.C.Menu:DockPadding(2,2,2,2) - self.C.Val:SetHeight(22) self.C.SaE:SetSize(80, 20) self.C.SaE:Dock(RIGHT) @@ -861,9 +861,9 @@ function Editor:NewChip(incurrent) -- Set title self:GetActiveTab():SetText("chip") - self.C.TabHolder:InvalidateLayout() - - self:ClearData() + + self.C.TabHolder:InvalidateLayout() + self:ClearData() end end @@ -1092,8 +1092,6 @@ function Editor:SaveFile(Line, close, SaveAs) file.Write(Line, self:GetData()) - local panel = self.C.Val - timer.Simple(0, function() panel.SetText(panel, " Saved as " .. Line) end) surface.PlaySound("ambient/water/drip3.wav") if not self.chip then self:ChosenFile(Line) end @@ -1159,11 +1157,8 @@ end function Editor:Setup(nTitle, nLocation) self.Title = nTitle self.Location = nLocation - -- self.EditorType = nEditorType self.C.Browser:Setup(nLocation) - self.C.Val:SetVisible(false) - self:NewChip(true) -- Opens initial tab, in case OpenOldTabs is disabled or fails. if wire_fpga_editor_openoldtabs:GetBool() then From 67df135d95b6b65c4926984d64faf14a89e996d9 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 3 Jan 2021 18:45:43 +0100 Subject: [PATCH 009/236] Added file naming and tab names --- lua/wire/client/node_editor/nodeeditor.lua | 43 +++++++++-- .../client/node_editor/wire_fpga_editor.lua | 77 +++++++++++-------- 2 files changed, 81 insertions(+), 39 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 8f589ca83d..fb9195a151 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -20,8 +20,11 @@ function Editor:Init() self.BackgroundColor = Color(32, 32, 32, 255) self.NodeColor = Color(100, 100, 100, 255) self.ConnectionColor = Color(200, 200, 200, 255) - self.InputColor = Color(120, 250, 120, 255) - self.OutputColor = Color(120, 120, 250, 255) + self.InputColor = Color(160, 240, 160, 255) + self.OutputColor = Color(160, 160, 240, 255) + + self.C = {} + self:InitComponents() self.Nodes = { {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, @@ -46,9 +49,33 @@ end -- }, -- }, +-- COMPONENTS + +function Editor:InitComponents() + self.C = {} + + self.C.TopBar = vgui.Create("DPanel", self) + self.C.TopBar:Dock(TOP) + self.C.TopBar:SetHeight(24) + self.C.TopBar:DockPadding(2,2,2,2) + + self.C.Name = vgui.Create("DTextEntry", self.C.TopBar) + self.C.Name:SetEditable(true) + self.C.Name:SetSize(140, 20) + self.C.Name:Dock(LEFT) + -- this doesnt work + self.C.Name.OnLoseFocus = function (self) + if self:GetValue() == "" then + self:SetValue("empty") + end + end +end + + -- INTERACTION function Editor:GetData() return util.TableToJSON({ + Name = self.C.Name:GetValue(), Nodes = self.Nodes, Position = self.Position, Zoom = self.Zoom @@ -59,18 +86,24 @@ function Editor:SetData(data) local data = util.JSONToTable(data) -- error check + self.C.Name:SetValue(data.Name) self.Nodes = data.Nodes self.Position = data.Position self.Zoom = data.Zoom end -function Editor:ClearData() +function Editor:ClearData() + self.C.Name:SetValue("empty") self.Nodes = {} self.Position = {0, 0} self.Zoom = 1 end +function Editor:GetName() + return self.C.Name:GetValue() +end + -- GATES function Editor:GetIOGate(node) if node.gate == "in" then @@ -291,9 +324,9 @@ end function Editor:PaintDebug() surface.SetFont("Default") surface.SetTextColor(255, 255, 255) - surface.SetTextPos(10, 10) + surface.SetTextPos(10, 50) surface.DrawText(self.Position[1] .. ", " .. self.Position[2]) - surface.SetTextPos(10, 30) + surface.SetTextPos(10, 70) surface.DrawText(self.Zoom) end diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 37283e5329..58ebe9431d 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -307,13 +307,19 @@ local function extractNameFromFilePath(str) end end +local function extractNameFromFile(file) + local data = util.JSONToTable(file) + + return data.Name +end + +function Editor:ExtractNameFromEditor() + return self:GetCurrentEditor():GetName() +end + function Editor:UpdateActiveTabTitle() local title = self:GetChosenFile() - local tabtext = self:GetChosenFile() - if self:GetChosenFile() - then - tabtext = extractNameFromFilePath(self:GetChosenFile()) - end + local tabtext = self:ExtractNameFromEditor() if title then self:SubTitle("Editing: " .. title) else self:SubTitle() end if tabtext then @@ -355,7 +361,7 @@ function Editor:CreateTab(chosenfile) local editor = vgui.Create("FPGAEditor") editor.parentpanel = self - local sheet = self.C.TabHolder:AddSheet(extractNameFromFilePath(chosenfile), editor) + local sheet = self.C.TabHolder:AddSheet(chosenfile, editor) editor.chosenfile = chosenfile sheet.Tab.OnMousePressed = function(pnl, keycode, ...) @@ -394,13 +400,14 @@ function Editor:CreateTab(chosenfile) self:SetActiveTab(pnl) self:SaveFile(self:GetChosenFile(), false, true) end) - menu:AddOption("Reload", function() + menu:AddOption("Reload", function() self:FixTabFadeTime() local old = self:GetLastTab() self:SetActiveTab(pnl) self:LoadFile(editor.chosenfile, false) self:SetActiveTab(self:GetLastTab()) - self:SetLastTab(old) + self:SetLastTab(old) + self:UpdateActiveTabTitle() end) menu:AddSpacer() menu:AddOption("Copy file path to clipboard", function() @@ -458,7 +465,7 @@ function Editor:GetNextAvailableTab() end function Editor:NewTab() - local sheet = self:CreateTab("chip") + local sheet = self:CreateTab("empty") self:SetActiveTab(sheet.Tab) self:NewChip(true) @@ -500,7 +507,7 @@ function Editor:CloseTab(_tab) -- There's only one tab open, no need to actually close any tabs if self:GetNumTabs() == 1 then - activetab:SetText("chip") + activetab:SetText("empty") self.C.TabHolder:InvalidateLayout() self:NewChip(true) return @@ -525,7 +532,7 @@ function Editor:CloseTab(_tab) self:SetActiveTab(othertab) self:SetLastTab() else -- Reset the current tab (backup) - self:GetActiveTab():SetText("chip") + self:GetActiveTab():SetText("empty") self.C.TabHolder:InvalidateLayout() self:NewChip(true) return @@ -539,7 +546,7 @@ function Editor:CloseTab(_tab) if othertab and othertab:IsValid() then -- If that other tab is valid, use it self:SetActiveTab(othertab) else -- Reset the current tab (backup) - self:GetActiveTab():SetText("chip") + self:GetActiveTab():SetText("empty") self.C.TabHolder:InvalidateLayout() self:NewChip(true) return @@ -613,7 +620,7 @@ function Editor:InitComponents() self.C.Credit = self:addComponent(vgui.Create("DTextEntry", self), -160, 52, 150, 190) -- Credit box self.C.Credit:SetEditable(false) - self:CreateTab("chip") + self:CreateTab("empty") -- extra component options @@ -675,7 +682,8 @@ function Editor:InitComponents() self.C.Reload:SetImage("icon16/page_refresh.png") self.C.Reload:SetToolTip( "Refresh file" ) self.C.Reload.DoClick = function(button) - self:LoadFile(self:GetChosenFile(), false) + self:LoadFile(self:GetChosenFile(), false) + self:UpdateActiveTabTitle() end self.C.SaE:SetText("Save and Exit") @@ -860,7 +868,7 @@ function Editor:NewChip(incurrent) self:ChosenFile() -- Set title - self:GetActiveTab():SetText("chip") + self:GetActiveTab():SetText("empty") self.C.TabHolder:InvalidateLayout() self:ClearData() @@ -980,7 +988,7 @@ function Editor:FindOpenFile(FilePath) end function Editor:ExtractName() - self.savefilefn = "filename" + self.savefilefn = self:ExtractNameFromEditor() return end @@ -1030,20 +1038,21 @@ function Editor:Open(Line, data, forcenewtab) return end end - end - local tabtext = extractNameFromFilePath(Line) - local tab + end + + local tab if self.NewTabOnOpen:GetBool() or forcenewtab then tab = self:CreateTab(tabtext).Tab else tab = self:GetActiveTab() - tab:SetText(tabtext) - self.C.TabHolder:InvalidateLayout() end - self:SetActiveTab(tab) + self:SetActiveTab(tab) self:ChosenFile() - self:SetData(data) + self:SetData(data) + + self:UpdateActiveTabTitle() + if Line then self:SubTitle("Editing: " .. Line) end return end @@ -1052,6 +1061,7 @@ end function Editor:SaveFile(Line, close, SaveAs) self:ExtractName() + if close and self.chip then --WireLib.Expression2Upload(self.chip, self:GetCode()) self:Close() @@ -1092,7 +1102,9 @@ function Editor:SaveFile(Line, close, SaveAs) file.Write(Line, self:GetData()) - surface.PlaySound("ambient/water/drip3.wav") + surface.PlaySound("ambient/water/drip3.wav") + + self:UpdateActiveTabTitle() if not self.chip then self:ChosenFile(Line) end if close then @@ -1124,19 +1136,16 @@ function Editor:LoadFile(Line, forcenewtab) end end - local tabtext = extractNameFromFilePath(Line) - local tab + local tab if self.NewTabOnOpen:GetBool() or forcenewtab then - tab = self:CreateTab(tabtext).Tab + tab = self:CreateTab("").Tab else - tab = self:GetActiveTab() - tab:SetText(tabtext) - self.C.TabHolder:InvalidateLayout() - end - self:SetActiveTab(tab) + tab = self:GetActiveTab() + end + self:SetActiveTab(tab) self:ChosenFile(Line) - - self:SetData(str) + self:SetData(str) + self:UpdateActiveTabTitle() end end From fb8ef9ab6fee91b5f40852d193369c116edb725d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 3 Jan 2021 18:55:56 +0100 Subject: [PATCH 010/236] Made panel cover much nicer --- lua/wire/client/node_editor/nodeeditor.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index fb9195a151..40cc19e9ff 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -57,7 +57,8 @@ function Editor:InitComponents() self.C.TopBar = vgui.Create("DPanel", self) self.C.TopBar:Dock(TOP) self.C.TopBar:SetHeight(24) - self.C.TopBar:DockPadding(2,2,2,2) + self.C.TopBar:DockPadding(2,2,2,2) + self.C.TopBar:SetBackgroundColor(Color(170, 174, 179, 255)) self.C.Name = vgui.Create("DTextEntry", self.C.TopBar) self.C.Name:SetEditable(true) From 7c95df7a8e8e1d934c61be4b3195f9580c1f9573 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 00:56:23 +0100 Subject: [PATCH 011/236] Added uploading FPGA data to FPGA chip --- lua/entities/gmod_wire_fpga/init.lua | 10 +-- lua/wire/client/node_editor/nodeeditor.lua | 25 +++--- lua/wire/stools/fpga.lua | 98 +++++++++++++++++++++- 3 files changed, 112 insertions(+), 21 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index cb6a3da262..2a3ff62611 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -32,17 +32,17 @@ function ENT:Initialize() end -function ENT:Upload() - MsgC(Color(0, 255, 100), "Uploading to FPGA\n") - self.name = "Test" - self.timebench = 0.075 +function ENT:Upload(data) + --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") + self.name = data.Name + self.timebench = 0 self:UpdateOverlay(false) self.Inputs = WireLib.AdjustInputs(self, {"In"}) end function ENT:Reset() - MsgC(Color(0, 100, 255), "Resetting FPGA\n") + --MsgC(Color(0, 100, 255), "Resetting FPGA\n") self.Inputs = WireLib.AdjustInputs(self, {"In", "In2"}) end diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 40cc19e9ff..293c1b07df 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -26,14 +26,7 @@ function Editor:Init() self.C = {} self:InitComponents() - self.Nodes = { - {type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, - {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, - {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, - {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, - {type = "io", gate = "in", x = -100, y = 100, connections = {}}, - {type = "io", gate = "out", x = 200, y = 100, connections = {[1] = {4, 1}}}, - } + self.Nodes = {} --MsgC(Color(0, 150, 255), table.ToString(GateActions, "Gate Actions", true)) end @@ -75,7 +68,7 @@ end -- INTERACTION function Editor:GetData() - return util.TableToJSON({ + return WireLib.von.serialize({ Name = self.C.Name:GetValue(), Nodes = self.Nodes, Position = self.Position, @@ -84,7 +77,7 @@ function Editor:GetData() end function Editor:SetData(data) - local data = util.JSONToTable(data) + local data = WireLib.von.deserialize(data) -- error check self.C.Name:SetValue(data.Name) @@ -95,7 +88,13 @@ end function Editor:ClearData() self.C.Name:SetValue("empty") - self.Nodes = {} + self.Nodes = {{type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, + {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, + {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, + {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, + {type = "io", gate = "in-number", x = -100, y = 100, connections = {}}, + {type = "io", gate = "out-number", x = 200, y = 100, connections = {[1] = {4, 1}}} + } self.Position = {0, 0} self.Zoom = 1 end @@ -107,9 +106,9 @@ end -- GATES function Editor:GetIOGate(node) - if node.gate == "in" then + if node.gate == "in-number" then return {name = "Input", inputs = {}, outputs = {"Out"}} - elseif node.gate == "out" then + elseif node.gate == "out-number" then return {name = "Output", inputs = {"A"}, outputs = {}} end end diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index c6de54999b..788cf02bf2 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -29,6 +29,7 @@ if CLIENT then end if SERVER then + util.AddNetworkString("FPGA_Upload") util.AddNetworkString("FPGA_OpenEditor") -- Reset @@ -51,23 +52,114 @@ if SERVER then return trace.Entity:IsValid() and (trace.Entity:GetClass() == "gmod_wire_fpga") end function TOOL:LeftClick_Update(trace) - trace.Entity:Upload() + self:Upload(trace.Entity) end function TOOL:MakeEnt(ply, model, Ang, trace) local ent = WireLib.MakeWireEnt(ply, {Class = self.WireClass, Pos=trace.HitPos, Angle=Ang, Model=model}) - ent:Upload() return ent end + function TOOL:PostMake(ent) + self:Upload(ent) + end -- Open editor function TOOL:RightClick(trace) + --check if hit chip, download the nodes off that chip net.Start("FPGA_OpenEditor") net.Send(self:GetOwner()) return true end -end + + + ------------------------------------------------------------------------------ + -- Uploading (Server -> Client -> Server) + ------------------------------------------------------------------------------ + -- Send request to client for FPGA data + function TOOL:Upload(ent) + net.Start("FPGA_Upload") + net.WriteInt(ent:EntIndex(), 32) + net.Send(self:GetOwner()) + end +end if CLIENT then + -------------------------------------------------------------- + -- Clientside Send + -------------------------------------------------------------- + function WireLib.FPGAUpload(targetEnt, data) + if type(targetEnt) == "number" then targetEnt = Entity(targetEnt) end + targetEnt = targetEnt or LocalPlayer():GetEyeTrace().Entity + + if (not IsValid(targetEnt) or targetEnt:GetClass() ~= "gmod_wire_fpga") then + WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + return + end + + data = data or FPGA_Editor:GetData() + + data = WireLib.FPGACompile(data) + + net.Start("FPGA_Upload") + net.WriteEntity(targetEnt) + net.WriteString(data) + net.SendToServer() + end + + -- Received request to upload + net.Receive("FPGA_Upload", function(len, ply) + local entid = net.ReadInt(32) + timer.Create("FPGA_Upload_Delay",0.03,30,function() -- The new net library is so fast sometimes the chip gets fully uploaded before the entity even exists. + if IsValid(Entity(entid)) then + WireLib.FPGAUpload(entid) + timer.Remove("FPGA_Upload_Delay") + timer.Remove("FPGA_Upload_Delay_Error") + end + end) + timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) end) + end) + + -- Node 'compiler' + -- Flip connections, generate input output tabels + function WireLib.FPGACompile(data) + + + return data + end +end +if SERVER then + -------------------------------------------------------------- + -- Serverside Receive + -------------------------------------------------------------- + -- Receive FPGA data from client + net.Receive("FPGA_Upload",function(len, ply) + local chip = net.ReadEntity() + --local numpackets = net.ReadUInt(16) + + if not IsValid(chip) or chip:GetClass() ~= "gmod_wire_fpga" then + WireLib.AddNotify(ply, "Invalid FPGA chip specified. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + return + end + + -- if not E2Lib.isFriend(toent.player,ply) then + -- WireLib.AddNotify(ply, "You are not allowed to upload to the target FPGA chip. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + -- return + -- end + + local data = net.ReadString() + local ok, ret = pcall(WireLib.von.deserialize, data) + + if ok then + chip:Upload(ret) + else + WireLib.AddNotify(ply, "FPGA upload failed! Error message:\n" .. ret, NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + end + end) + +end + + + +if CLIENT then ------------------------------------------------------------------------------ -- Open FPGA editor ------------------------------------------------------------------------------ From bf2f2ef40f12ae453d8dc01a6f9a4e1ab9cbd3d5 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 01:37:44 +0100 Subject: [PATCH 012/236] Added node compiling --- lua/entities/gmod_wire_fpga/init.lua | 3 +- lua/wire/client/node_editor/nodeeditor.lua | 43 +++++++++++++++++-- .../client/node_editor/wire_fpga_editor.lua | 4 ++ lua/wire/stools/fpga.lua | 12 +----- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 2a3ff62611..8cf13fe53a 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -33,7 +33,8 @@ end function ENT:Upload(data) - --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") + MsgC(Color(0, 255, 100), "Uploading to FPGA\n") + print(table.ToString(data, "data", true)) self.name = data.Name self.timebench = 0 self:UpdateOverlay(false) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 293c1b07df..fe903a9ba3 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -92,18 +92,55 @@ function Editor:ClearData() {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, - {type = "io", gate = "in-number", x = -100, y = 100, connections = {}}, - {type = "io", gate = "out-number", x = 200, y = 100, connections = {[1] = {4, 1}}} + {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, + {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {4, 1}}} } self.Position = {0, 0} self.Zoom = 1 end - function Editor:GetName() return self.C.Name:GetValue() end +-- Node 'compiler' +-- Flip connections, generate input output tabels +function Editor:GetCompiledData() + --Make node table and connection table [from][output] = {to, input} + nodes = {} + edges = {} + for nodeId, node in pairs(self.Nodes) do + table.insert(nodes, { + type = "wire", + gate = node.gate, + }) + for input, connection in pairs(node.connections) do + fromNode = connection[1] + fromOutput = connection[2] + if not edges[fromNode] then edges[fromNode] = {} end + if not edges[fromNode][fromOutput] then edges[fromNode][fromOutput] = {} end + + table.insert(edges[fromNode][fromOutput], {nodeId, input}) + end + + if node.type == "io" then + nodes[nodeId].ioName = node.ioName + end + end + + --Integrate connection table into node table + for nodeId, node in pairs(nodes) do + nodes[nodeId].connections = edges[nodeId] + end + + compiled = WireLib.von.serialize({ + Name = self:GetName(), + Nodes = nodes, + }, false) + + return compiled +end + -- GATES function Editor:GetIOGate(node) if node.gate == "in-number" then diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 58ebe9431d..23f4c2af25 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -1017,6 +1017,10 @@ function Editor:GetData() return self:GetCurrentEditor():GetData() end +function Editor:GetCompiledData() + return self:GetCurrentEditor():GetCompiledData() +end + function Editor:Open(Line, data, forcenewtab) if self:IsVisible() and not Line and not data then self:Close() end hook.Run("WireFPGAEditorOpen", self, Line, data, forcenewtab) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index 788cf02bf2..78de78016f 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -94,9 +94,7 @@ if CLIENT then return end - data = data or FPGA_Editor:GetData() - - data = WireLib.FPGACompile(data) + data = data or FPGA_Editor:GetCompiledData() net.Start("FPGA_Upload") net.WriteEntity(targetEnt) @@ -116,14 +114,6 @@ if CLIENT then end) timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) end) end) - - -- Node 'compiler' - -- Flip connections, generate input output tabels - function WireLib.FPGACompile(data) - - - return data - end end if SERVER then From 49adf4224195c11322ad45c15300e9e79d67a001 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 02:11:02 +0100 Subject: [PATCH 013/236] Compiler finds IO now, and chip updates its IO --- lua/entities/gmod_wire_fpga/init.lua | 6 +-- lua/wire/client/node_editor/nodeeditor.lua | 46 +++++++++++++++++----- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 8cf13fe53a..f76c09db67 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -39,12 +39,12 @@ function ENT:Upload(data) self.timebench = 0 self:UpdateOverlay(false) - self.Inputs = WireLib.AdjustInputs(self, {"In"}) + self.Inputs = WireLib.AdjustSpecialInputs(self, data.Inputs, data.InputTypes, "") + self.Outputs = WireLib.AdjustSpecialOutputs(self, data.Outputs, data.OutputTypes, "") end function ENT:Reset() - --MsgC(Color(0, 100, 255), "Resetting FPGA\n") - self.Inputs = WireLib.AdjustInputs(self, {"In", "In2"}) + MsgC(Color(0, 100, 255), "Resetting FPGA\n") end diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index fe903a9ba3..1b3ec47b63 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -88,12 +88,23 @@ end function Editor:ClearData() self.C.Name:SetValue("empty") - self.Nodes = {{type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, - {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, - {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, - {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, + -- self.Nodes = {{type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, + -- {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, + -- {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, + -- {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, + -- {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, + -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {4, 1}}} + -- } + + -- self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, + -- {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, + -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} + -- } + + self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {3, 1}}}, {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, - {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {4, 1}}} + {type = "io", gate = "in-number", ioName = "B", x = -100, y = 150, connections = {}}, + {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} } self.Position = {0, 0} self.Zoom = 1 @@ -109,9 +120,13 @@ function Editor:GetCompiledData() --Make node table and connection table [from][output] = {to, input} nodes = {} edges = {} + inputs = {} + inputTypes = {} + outputs = {} + outputTypes = {} for nodeId, node in pairs(self.Nodes) do table.insert(nodes, { - type = "wire", + type = node.type, gate = node.gate, }) for input, connection in pairs(node.connections) do @@ -124,7 +139,16 @@ function Editor:GetCompiledData() end if node.type == "io" then - nodes[nodeId].ioName = node.ioName + local gate = self:GetIOGate(node) + + if gate.outputs[1] then + table.insert(inputs, node.ioName) + table.insert(inputTypes, gate.type) + end + if gate.inputs[1] then + table.insert(outputs, node.ioName) + table.insert(outputTypes, gate.type) + end end end @@ -136,6 +160,10 @@ function Editor:GetCompiledData() compiled = WireLib.von.serialize({ Name = self:GetName(), Nodes = nodes, + Inputs = inputs, + InputTypes = inputTypes, + Outputs = outputs, + OutputTypes = outputTypes, }, false) return compiled @@ -144,9 +172,9 @@ end -- GATES function Editor:GetIOGate(node) if node.gate == "in-number" then - return {name = "Input", inputs = {}, outputs = {"Out"}} + return {name = "Input", inputs = {}, outputs = {"Out"}, type = "NORMAL"} elseif node.gate == "out-number" then - return {name = "Output", inputs = {"A"}, outputs = {}} + return {name = "Output", inputs = {"A"}, outputs = {}, type = "NORMAL"} end end From 4f27162b30ae97513b87491834de35ef1eea743d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 04:06:37 +0100 Subject: [PATCH 014/236] Refactored mock-gates into real gate component --- lua/autorun/wire_fpga_load.lua | 3 ++ lua/entities/gmod_wire_fpga/init.lua | 56 ++++++++++++++++++---- lua/wire/client/node_editor/nodeeditor.lua | 36 +++++++------- lua/wire/fpga_gates/io.lua | 23 +++++++++ lua/wire/fpgagates.lua | 38 +++++++++++++++ 5 files changed, 127 insertions(+), 29 deletions(-) create mode 100644 lua/wire/fpga_gates/io.lua create mode 100644 lua/wire/fpgagates.lua diff --git a/lua/autorun/wire_fpga_load.lua b/lua/autorun/wire_fpga_load.lua index 74f9e7d14f..58caf141d8 100644 --- a/lua/autorun/wire_fpga_load.lua +++ b/lua/autorun/wire_fpga_load.lua @@ -4,8 +4,11 @@ if SERVER then AddCSLuaFile("wire/client/node_editor/nodeeditor.lua") AddCSLuaFile("wire/client/node_editor/wire_fpga_editor.lua") AddCSLuaFile("wire/tool_loader.lua") + AddCSLuaFile("wire/fpgagates.lua") end +include("wire/fpgagates.lua") + if CLIENT then AddCSLuaFile("wire/client/node_editor/nodeeditor.lua") AddCSLuaFile("wire/client/node_editor/wire_fpga_editor.lua") diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index f76c09db67..bbd2dcde56 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -22,10 +22,15 @@ end function ENT:Initialize() self:PhysicsInit(SOLID_VPHYSICS) self:SetMoveType(MOVETYPE_VPHYSICS) - self:SetSolid(SOLID_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + + self.Inputs = WireLib.CreateInputs(self, {}) + self.Outputs = WireLib.CreateOutputs(self, {}) + + self.Gates = {} - self.Inputs = WireLib.CreateInputs(self, {"In"}) - self.Outputs = WireLib.CreateOutputs(self, {"Out"}) + self.InputIds = {} + self.OutputIds = {} self:UpdateOverlay(true) --self:SetColor(Color(255, 0, 0, self:GetColor().a)) @@ -34,25 +39,34 @@ end function ENT:Upload(data) MsgC(Color(0, 255, 100), "Uploading to FPGA\n") - print(table.ToString(data, "data", true)) + self.name = data.Name self.timebench = 0 self:UpdateOverlay(false) + self.InputNames = data.Inputs self.Inputs = WireLib.AdjustSpecialInputs(self, data.Inputs, data.InputTypes, "") self.Outputs = WireLib.AdjustSpecialOutputs(self, data.Outputs, data.OutputTypes, "") + + self.InputIds = data.InputIds + self.OutputIds = data.OutputIds + + self.Gates = data.Nodes + self.Values = {} + for nodeId, node in pairs(data.Nodes) do + self.Values[nodeId] = nil + end + + print(table.ToString(data, "data", true)) end function ENT:Reset() MsgC(Color(0, 100, 255), "Resetting FPGA\n") end - - function ENT:TriggerInput(iname, value) - if iname == "In" then - Wire_TriggerOutput(self, "Out", value) - end + self.Values[self.InputIds[iname]] = value + self:Run({self.InputIds[iname]}) end @@ -60,4 +74,26 @@ end -- self:NextThink(CurTime()) -- return true --- end \ No newline at end of file +-- end + + +function ENT:Run(changedInputs) + -- local gateQueue = {} + -- for k, id in pairs(changedInputs) do + -- gateQueue[k] = id + -- end + + -- while not table.IsEmpty(gateQueue) do + -- local gateId = table.remove(gateQueue, 1) + -- local gate = self.Gates[gateId] + + -- for k, connection in pairs(gate.connections[1]) do + -- table.insert(gateQueue, connection[1]) + -- end + + + -- end + + + +end \ No newline at end of file diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 1b3ec47b63..ca655894c9 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -102,9 +102,9 @@ function Editor:ClearData() -- } self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {3, 1}}}, - {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, - {type = "io", gate = "in-number", ioName = "B", x = -100, y = 150, connections = {}}, - {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} + {type = "fpga", gate = "normal-input", ioName = "A", x = -100, y = 100, connections = {}}, + {type = "fpga", gate = "normal-input", ioName = "B", x = -100, y = 150, connections = {}}, + {type = "fpga", gate = "normal-output", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} } self.Position = {0, 0} self.Zoom = 1 @@ -124,6 +124,8 @@ function Editor:GetCompiledData() inputTypes = {} outputs = {} outputTypes = {} + inputIds = {} + outputIds = {} for nodeId, node in pairs(self.Nodes) do table.insert(nodes, { type = node.type, @@ -138,16 +140,18 @@ function Editor:GetCompiledData() table.insert(edges[fromNode][fromOutput], {nodeId, input}) end - if node.type == "io" then - local gate = self:GetIOGate(node) + if node.type == "fpga" then + local gate = self:GetGate(node) - if gate.outputs[1] then + if gate.isInput then + inputIds[node.ioName] = nodeId table.insert(inputs, node.ioName) - table.insert(inputTypes, gate.type) + table.insert(inputTypes, gate.outputtypes[1]) end - if gate.inputs[1] then + if gate.isOutput then + outputIds[node.ioName] = nodeId table.insert(outputs, node.ioName) - table.insert(outputTypes, gate.type) + table.insert(outputTypes, gate.inputtypes[1]) end end end @@ -162,27 +166,21 @@ function Editor:GetCompiledData() Nodes = nodes, Inputs = inputs, InputTypes = inputTypes, + InputIds = inputIds, Outputs = outputs, OutputTypes = outputTypes, + OutputIds = outputIds, }, false) return compiled end -- GATES -function Editor:GetIOGate(node) - if node.gate == "in-number" then - return {name = "Input", inputs = {}, outputs = {"Out"}, type = "NORMAL"} - elseif node.gate == "out-number" then - return {name = "Output", inputs = {"A"}, outputs = {}, type = "NORMAL"} - end -end - function Editor:GetGate(node) if node.type == "wire" then return GateActions[node.gate] - elseif node.type == "io" then - return self:GetIOGate(node) + elseif node.type == "fpga" then + return FPGAGateActions[node.gate] end end diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua new file mode 100644 index 0000000000..526d014078 --- /dev/null +++ b/lua/wire/fpga_gates/io.lua @@ -0,0 +1,23 @@ +FPGAGateActions("Input / Output") + +FPGAGateActions["normal-input"] = { + name = "Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"NORMAL"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["normal-output"] = { + name = "Output", + inputs = {"A"}, + inputtypes = {"NORMAL"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} \ No newline at end of file diff --git a/lua/wire/fpgagates.lua b/lua/wire/fpgagates.lua new file mode 100644 index 0000000000..d3eb08ee92 --- /dev/null +++ b/lua/wire/fpgagates.lua @@ -0,0 +1,38 @@ +local gates = {} + +local gamt +gamt = { + curcat = "DEFAULT", + __newindex = function(t,k,v) + if not v.group then + v.group = gamt.curcat + end + rawset(gates,k,v) + end, + __index = function(t,k) + return rawget(gates,k) + end, + __call = function(t,s) --call the table to set a default category + gamt.curcat = s or "DEFAULT" + end +} + +function LoadFPGAGates() + FPGAGateActions = {} + setmetatable(FPGAGateActions,gamt) + local entries = file.Find( "wire/fpga_gates/*.lua", "LUA" ) + for _,v in pairs(entries) do + include("fpga_gates/"..v) + if (SERVER) then AddCSLuaFile("fpga_gates/"..v) end + end + FPGAGateActions = gates + + FPGAGatesSorted = {} + for name,gate in pairs(FPGAGateActions) do + if not FPGAGatesSorted[gate.group] then + FPGAGatesSorted[gate.group] = {} + end + FPGAGatesSorted[gate.group][name] = gate + end +end +LoadFPGAGates() \ No newline at end of file From fbab4753d44ec0297b199dadcf5d38aab99a93ca Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 04:57:50 +0100 Subject: [PATCH 015/236] Added basic FPGA functionality --- lua/entities/gmod_wire_fpga/init.lua | 85 +++++++++++++++++----- lua/wire/client/node_editor/nodeeditor.lua | 3 +- 2 files changed, 68 insertions(+), 20 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index bbd2dcde56..c4f8aee429 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -44,20 +44,29 @@ function ENT:Upload(data) self.timebench = 0 self:UpdateOverlay(false) - self.InputNames = data.Inputs self.Inputs = WireLib.AdjustSpecialInputs(self, data.Inputs, data.InputTypes, "") self.Outputs = WireLib.AdjustSpecialOutputs(self, data.Outputs, data.OutputTypes, "") self.InputIds = data.InputIds self.OutputIds = data.OutputIds - self.Gates = data.Nodes - self.Values = {} + self.Nodes = data.Nodes + --Initialize gate table + self.Gates = {} for nodeId, node in pairs(data.Nodes) do - self.Values[nodeId] = nil + self.Gates[nodeId] = {} + --reset gate + end + + --Initialize inputs to default values + self.InputValues = {} + for k, iname in pairs(data.Inputs) do + self.InputValues[self.InputIds[iname]] = self.Inputs[iname].Value end print(table.ToString(data, "data", true)) + + self:Run(data.InputIds) end function ENT:Reset() @@ -65,7 +74,9 @@ function ENT:Reset() end function ENT:TriggerInput(iname, value) - self.Values[self.InputIds[iname]] = value + print("Set input " .. iname .. " to " .. value) + + self.InputValues[self.InputIds[iname]] = value self:Run({self.InputIds[iname]}) end @@ -76,23 +87,61 @@ end -- return true -- end +local function getGate(node) + if node.type == "wire" then + return GateActions[node.gate] + elseif node.type == "fpga" then + return FPGAGateActions[node.gate] + end +end + function ENT:Run(changedInputs) - -- local gateQueue = {} - -- for k, id in pairs(changedInputs) do - -- gateQueue[k] = id - -- end - - -- while not table.IsEmpty(gateQueue) do - -- local gateId = table.remove(gateQueue, 1) - -- local gate = self.Gates[gateId] + local nodeQueue = {} + local i = 1 + for k, id in pairs(changedInputs) do + nodeQueue[i] = id + i = i + 1 + end - -- for k, connection in pairs(gate.connections[1]) do - -- table.insert(gateQueue, connection[1]) - -- end - + --print(table.ToString(changedInputs, "debug", true)) - -- end + local values = {} + + while not table.IsEmpty(nodeQueue) do + local nodeId = table.remove(nodeQueue, 1) + local node = self.Nodes[nodeId] + + --add connected nodes to queue + if node.connections then + for k, connection in pairs(node.connections[1]) do + --check if already in queue, only add if it isnt (Set) + table.insert(nodeQueue, connection[1]) + end + end + + local gate = getGate(node) + + if gate.isOutput then + WireLib.TriggerOutput(self, "Out", values[nodeId][1]) + continue + end + + if gate.isInput then + value = self.InputValues[nodeId] + else + value = gate.output(self.Gates[nodeId], unpack(values[nodeId])) + end + + if node.connections then + for k, connection in pairs(node.connections[1]) do + toNode = connection[1] + toInput = connection[2] + if not values[toNode] then values[toNode] = {} end + values[toNode][toInput] = value + end + end + end diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index ca655894c9..36c9db4f47 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -101,9 +101,8 @@ function Editor:ClearData() -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} -- } - self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {3, 1}}}, + self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, {type = "fpga", gate = "normal-input", ioName = "A", x = -100, y = 100, connections = {}}, - {type = "fpga", gate = "normal-input", ioName = "B", x = -100, y = 150, connections = {}}, {type = "fpga", gate = "normal-output", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} } self.Position = {0, 0} From b25fe4c8949512b0f59220ffe294a2b3bc16e5e5 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 05:13:16 +0100 Subject: [PATCH 016/236] Added todo.txt --- todo.txt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 todo.txt diff --git a/todo.txt b/todo.txt new file mode 100644 index 0000000000..4a7691eba8 --- /dev/null +++ b/todo.txt @@ -0,0 +1,16 @@ +FPGA Entity: + Improve execution + Test using chips with multiple outputs + Test to make sure that order is correct + + +FPGA Editor: + Add way to make nodes + Add way to remove nodes + + Shortcuts? + + +FPGA Gates: + Add all types of input / output chips + \ No newline at end of file From 7dcd5b1aaf5ed9f50fff70c9d972b76776ed64aa Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 21:57:48 +0100 Subject: [PATCH 017/236] Moved compilation to serverside --- lua/entities/gmod_wire_fpga/init.lua | 99 ++++++++++++++++--- lua/wire/client/node_editor/nodeeditor.lua | 61 ------------ .../client/node_editor/wire_fpga_editor.lua | 4 - lua/wire/stools/fpga.lua | 2 +- todo.txt | 22 +++-- 5 files changed, 99 insertions(+), 89 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index c4f8aee429..1a953f02b5 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -4,6 +4,17 @@ include('shared.lua') DEFINE_BASECLASS("base_wire_entity") +--HELPERS +local function getGate(node) + if node.type == "wire" then + return GateActions[node.gate] + elseif node.type == "fpga" then + return FPGAGateActions[node.gate] + end +end + + + function ENT:UpdateOverlay(clear) if clear then @@ -24,18 +35,82 @@ function ENT:Initialize() self:SetMoveType(MOVETYPE_VPHYSICS) self:SetSolid(SOLID_VPHYSICS) + self.Data = nil + self.Inputs = WireLib.CreateInputs(self, {}) self.Outputs = WireLib.CreateOutputs(self, {}) self.Gates = {} + self.Nodes = {} + self.InputNames = {} + self.InputTypes = {} self.InputIds = {} + self.OutputNames = {} + self.OutputTypes = {} self.OutputIds = {} self:UpdateOverlay(true) --self:SetColor(Color(255, 0, 0, self:GetColor().a)) end +-- Node 'compiler' +-- Flip connections, generate input output tabels +function ENT:CompileData(data) + --Make node table and connection table [from][output] = {to, input} + nodes = {} + edges = {} + inputs = {} + inputTypes = {} + outputs = {} + outputTypes = {} + inputIds = {} + outputIds = {} + for nodeId, node in pairs(data.Nodes) do + table.insert(nodes, { + type = node.type, + gate = node.gate, + }) + for input, connection in pairs(node.connections) do + fromNode = connection[1] + fromOutput = connection[2] + if not edges[fromNode] then edges[fromNode] = {} end + if not edges[fromNode][fromOutput] then edges[fromNode][fromOutput] = {} end + + table.insert(edges[fromNode][fromOutput], {nodeId, input}) + end + + if node.type == "fpga" then + local gate = getGate(node) + + if gate.isInput then + inputIds[node.ioName] = nodeId + table.insert(inputs, node.ioName) + table.insert(inputTypes, gate.outputtypes[1]) + end + if gate.isOutput then + outputIds[node.ioName] = nodeId + table.insert(outputs, node.ioName) + table.insert(outputTypes, gate.inputtypes[1]) + end + end + end + + --Integrate connection table into node table + for nodeId, node in pairs(nodes) do + nodes[nodeId].connections = edges[nodeId] + end + + self.Nodes = nodes + self.InputNames = inputs + self.InputTypes = inputTypes + self.InputIds = inputIds + self.OutputNames = outputs + self.OutputTypes = outputTypes + self.OutputIds = outputIds +end + + function ENT:Upload(data) MsgC(Color(0, 255, 100), "Uploading to FPGA\n") @@ -44,29 +119,29 @@ function ENT:Upload(data) self.timebench = 0 self:UpdateOverlay(false) - self.Inputs = WireLib.AdjustSpecialInputs(self, data.Inputs, data.InputTypes, "") - self.Outputs = WireLib.AdjustSpecialOutputs(self, data.Outputs, data.OutputTypes, "") + --compile + self:CompileData(data) - self.InputIds = data.InputIds - self.OutputIds = data.OutputIds + self.Inputs = WireLib.AdjustSpecialInputs(self, self.InputNames, self.InputTypes, "") + self.Outputs = WireLib.AdjustSpecialOutputs(self, self.OutputNames, self.OutputTypes, "") - self.Nodes = data.Nodes --Initialize gate table self.Gates = {} - for nodeId, node in pairs(data.Nodes) do + for nodeId, node in pairs(self.Nodes) do self.Gates[nodeId] = {} --reset gate end --Initialize inputs to default values self.InputValues = {} - for k, iname in pairs(data.Inputs) do + for k, iname in pairs(self.InputNames) do self.InputValues[self.InputIds[iname]] = self.Inputs[iname].Value end + self.Data = data print(table.ToString(data, "data", true)) - self:Run(data.InputIds) + self:Run(self.InputIds) end function ENT:Reset() @@ -87,14 +162,6 @@ end -- return true -- end -local function getGate(node) - if node.type == "wire" then - return GateActions[node.gate] - elseif node.type == "fpga" then - return FPGAGateActions[node.gate] - end -end - function ENT:Run(changedInputs) local nodeQueue = {} diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 36c9db4f47..16b3600038 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -113,67 +113,6 @@ function Editor:GetName() return self.C.Name:GetValue() end --- Node 'compiler' --- Flip connections, generate input output tabels -function Editor:GetCompiledData() - --Make node table and connection table [from][output] = {to, input} - nodes = {} - edges = {} - inputs = {} - inputTypes = {} - outputs = {} - outputTypes = {} - inputIds = {} - outputIds = {} - for nodeId, node in pairs(self.Nodes) do - table.insert(nodes, { - type = node.type, - gate = node.gate, - }) - for input, connection in pairs(node.connections) do - fromNode = connection[1] - fromOutput = connection[2] - if not edges[fromNode] then edges[fromNode] = {} end - if not edges[fromNode][fromOutput] then edges[fromNode][fromOutput] = {} end - - table.insert(edges[fromNode][fromOutput], {nodeId, input}) - end - - if node.type == "fpga" then - local gate = self:GetGate(node) - - if gate.isInput then - inputIds[node.ioName] = nodeId - table.insert(inputs, node.ioName) - table.insert(inputTypes, gate.outputtypes[1]) - end - if gate.isOutput then - outputIds[node.ioName] = nodeId - table.insert(outputs, node.ioName) - table.insert(outputTypes, gate.inputtypes[1]) - end - end - end - - --Integrate connection table into node table - for nodeId, node in pairs(nodes) do - nodes[nodeId].connections = edges[nodeId] - end - - compiled = WireLib.von.serialize({ - Name = self:GetName(), - Nodes = nodes, - Inputs = inputs, - InputTypes = inputTypes, - InputIds = inputIds, - Outputs = outputs, - OutputTypes = outputTypes, - OutputIds = outputIds, - }, false) - - return compiled -end - -- GATES function Editor:GetGate(node) if node.type == "wire" then diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 23f4c2af25..58ebe9431d 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -1017,10 +1017,6 @@ function Editor:GetData() return self:GetCurrentEditor():GetData() end -function Editor:GetCompiledData() - return self:GetCurrentEditor():GetCompiledData() -end - function Editor:Open(Line, data, forcenewtab) if self:IsVisible() and not Line and not data then self:Close() end hook.Run("WireFPGAEditorOpen", self, Line, data, forcenewtab) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index 78de78016f..de29e363f8 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -94,7 +94,7 @@ if CLIENT then return end - data = data or FPGA_Editor:GetCompiledData() + data = data or FPGA_Editor:GetData() net.Start("FPGA_Upload") net.WriteEntity(targetEnt) diff --git a/todo.txt b/todo.txt index 4a7691eba8..fbd4cd91f5 100644 --- a/todo.txt +++ b/todo.txt @@ -1,16 +1,24 @@ FPGA Entity: - Improve execution - Test using chips with multiple outputs - Test to make sure that order is correct + Features: + Improve execution + + Bugs: + Test using chips with multiple outputs + Test to make sure that order is correct FPGA Editor: - Add way to make nodes - Add way to remove nodes + Features: + Add way to make nodes + Add way to remove nodes + + Shortcuts? - Shortcuts? + Bugs: + Saving a file with capital letter fucks it up FPGA Gates: - Add all types of input / output chips + Features: + Add all types of input / output chips \ No newline at end of file From c4acbc5e5ca2a5eca15267f79ad8938f9d2490c3 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 4 Jan 2021 23:18:33 +0100 Subject: [PATCH 018/236] Improved FPGA entity running --- lua/entities/gmod_wire_fpga/init.lua | 67 ++++++++++++++++++---- lua/wire/client/node_editor/nodeeditor.lua | 7 ++- 2 files changed, 60 insertions(+), 14 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 1a953f02b5..7a0071afcf 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -41,6 +41,7 @@ function ENT:Initialize() self.Outputs = WireLib.CreateOutputs(self, {}) self.Gates = {} + self.LastGateValues = {} self.Nodes = {} self.InputNames = {} @@ -50,6 +51,8 @@ function ENT:Initialize() self.OutputTypes = {} self.OutputIds = {} + self.NodeGetsInputFrom = {} + self:UpdateOverlay(true) --self:SetColor(Color(255, 0, 0, self:GetColor().a)) end @@ -66,6 +69,7 @@ function ENT:CompileData(data) outputTypes = {} inputIds = {} outputIds = {} + nodeGetsInputFrom = {} for nodeId, node in pairs(data.Nodes) do table.insert(nodes, { type = node.type, @@ -80,6 +84,8 @@ function ENT:CompileData(data) table.insert(edges[fromNode][fromOutput], {nodeId, input}) end + nodeGetsInputFrom[nodeId] = node.connections + if node.type == "fpga" then local gate = getGate(node) @@ -108,6 +114,8 @@ function ENT:CompileData(data) self.OutputNames = outputs self.OutputTypes = outputTypes self.OutputIds = outputIds + + self.NodeGetsInputFrom = nodeGetsInputFrom end @@ -131,15 +139,19 @@ function ENT:Upload(data) self.Gates[nodeId] = {} --reset gate end + self.LastGateValues = {} - --Initialize inputs to default values + --Initialize inputs to default values (and backup lastgatevalue table) self.InputValues = {} for k, iname in pairs(self.InputNames) do - self.InputValues[self.InputIds[iname]] = self.Inputs[iname].Value + local inputNodeId = self.InputIds[iname] + local value = self.Inputs[iname].Value + self.InputValues[inputNodeId] = value + self.LastGateValues[inputNodeId] = value end self.Data = data - print(table.ToString(data, "data", true)) + --print(table.ToString(data, "data", true)) self:Run(self.InputIds) end @@ -164,48 +176,81 @@ end function ENT:Run(changedInputs) + --Initialize nodesInQueue set + local nodesInQueue = {} + for nodeId, node in pairs(self.Nodes) do + nodesInQueue[nodeId] = false + end + + --Initialize nodeQueue with changed inputs + --todo: also add self-triggering gates local nodeQueue = {} local i = 1 for k, id in pairs(changedInputs) do nodeQueue[i] = id + nodesInQueue[id] = true i = i + 1 end - --print(table.ToString(changedInputs, "debug", true)) + --nodeQueue = {changedInputs[1], ... changedInputs[n]} + --nodesInQueue = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0} local values = {} + print(table.ToString(self.Nodes, "nodes", true)) + while not table.IsEmpty(nodeQueue) do + print() + print(table.ToString(nodeQueue, "nodeQueue", false)) + print(table.ToString(nodesInQueue, "nodesInQueue", false)) + + local nodeId = table.remove(nodeQueue, 1) local node = self.Nodes[nodeId] - --add connected nodes to queue - if node.connections then - for k, connection in pairs(node.connections[1]) do - --check if already in queue, only add if it isnt (Set) - table.insert(nodeQueue, connection[1]) - end - end + --print(table.ToString(node.connections, "node.connections", false)) + --get gate local gate = getGate(node) + --output logic if gate.isOutput then WireLib.TriggerOutput(self, "Out", values[nodeId][1]) continue end + --gate value logic if gate.isInput then value = self.InputValues[nodeId] else + --if input hasnt arrived yet, use older value + -- (maybe check if its ever going to arrive? older value should only be used incase it never will) + for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do + if not values[nodeId][inputId] then + --add support for multi output gates + values[nodeId][inputId] = self.LastGateValues[connection[1]] + end + end + value = gate.output(self.Gates[nodeId], unpack(values[nodeId])) end + --save value for future executions + self.LastGateValues[nodeId] = value + + --propergate output value to inputs if node.connections then for k, connection in pairs(node.connections[1]) do toNode = connection[1] toInput = connection[2] if not values[toNode] then values[toNode] = {} end values[toNode][toInput] = value + + --add connected nodes to queue + if nodesInQueue[connection[1]] == false then + table.insert(nodeQueue, connection[1]) + nodesInQueue[connection[1]] = true + end end end end diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 16b3600038..cdb5c391de 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -101,9 +101,10 @@ function Editor:ClearData() -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} -- } - self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, - {type = "fpga", gate = "normal-input", ioName = "A", x = -100, y = 100, connections = {}}, - {type = "fpga", gate = "normal-output", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} + self.Nodes = {{type = "wire", gate = "+", x = 0, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, + {type = "fpga", gate = "normal-input", ioName = "A", x = -50, y = 90, connections = {}}, + {type = "fpga", gate = "normal-input", ioName = "B", x = -50, y = 110, connections = {}}, + {type = "fpga", gate = "normal-output", ioName = "Out", x = 50, y = 100, connections = {[1] = {1, 1}}} } self.Position = {0, 0} self.Zoom = 1 From 9eedd0e60031482ecadb612476389880393d1843 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 6 Jan 2021 13:50:17 +0100 Subject: [PATCH 019/236] Added ability to create and remove gates (still in development) --- lua/wire/client/node_editor/nodeeditor.lua | 231 ++++++++++++++++++--- lua/wire/fpga_gates/io.lua | 26 ++- 2 files changed, 230 insertions(+), 27 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index cdb5c391de..5a1e080d8a 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -23,6 +23,9 @@ function Editor:Init() self.InputColor = Color(160, 240, 160, 255) self.OutputColor = Color(160, 160, 240, 255) + self.UsedInputNames = {} + self.UsedOutputNames = {} + self.C = {} self:InitComponents() @@ -50,7 +53,7 @@ function Editor:InitComponents() self.C.TopBar = vgui.Create("DPanel", self) self.C.TopBar:Dock(TOP) self.C.TopBar:SetHeight(24) - self.C.TopBar:DockPadding(2,2,2,2) + self.C.TopBar:DockPadding(5,5,5,5) self.C.TopBar:SetBackgroundColor(Color(170, 174, 179, 255)) self.C.Name = vgui.Create("DTextEntry", self.C.TopBar) @@ -63,6 +66,114 @@ function Editor:InitComponents() self:SetValue("empty") end end + + --Gate spawning + self.C.Holder = vgui.Create("DPanel", self) + self.C.Holder:SetWidth(300) + self.C.Holder:Dock(RIGHT) + self.C.Holder:SetBackgroundColor(Color(170, 174, 179, 255)) + + self.C.Tree = vgui.Create("DTree", self.C.Holder) + self.C.Tree:Dock(FILL) + --self.C.Tree:DockMargin(5,0,5,5) + + + --utility + local function FillSubTree(tree, node, temp, type) + node.Icon:SetImage("icon16/folder.png") + + local subtree = {} + for k, v in pairs(temp) do + subtree[#subtree+1] = {action = k, gate = v, name = v.name} + end + + table.SortByMember(subtree, "name", true) + + for index=1, #subtree do + local action, gate = subtree[index].action, subtree[index].gate + local node2 = node:AddNode(gate.name or "No name found :(") + node2.name = gate.name + node2.action = action + editor = self + function node2:DoClick() + editor:CreateNode(type, self.action) + end + node2.Icon:SetImage("icon16/newspaper.png") + end + tree:InvalidateLayout() + end + + --FPGA gates + local CategoriesSorted = {} + + for gatetype, gatefuncs in pairs(FPGAGatesSorted) do + local allowed_gates = {} + local any_allowed = false + for k,v in pairs(gatefuncs) do + if not v.is_banned then + allowed_gates[k] = v + any_allowed = true + end + end + if any_allowed then + CategoriesSorted[#CategoriesSorted+1] = {gatetype = gatetype, gatefuncs = allowed_gates} + end + end + + table.sort(CategoriesSorted, function(a, b) return a.gatetype < b.gatetype end) + + local fpgaNode = self.C.Tree:AddNode("FPGA", "icon16/bricks.png") + function fpgaNode:DoClick() + self:SetExpanded(not self.m_bExpanded) + end + + for i=1,#CategoriesSorted do + local gatetype = CategoriesSorted[i].gatetype + local gatefuncs = CategoriesSorted[i].gatefuncs + + local node = fpgaNode:AddNode(gatetype) + node.Icon:SetImage("icon16/folder.png") + FillSubTree(self.C.Tree, node, gatefuncs, "fpga") + function node:DoClick() + self:SetExpanded(not self.m_bExpanded) + end + end + + --WIREMOD gates + local CategoriesSorted = {} + + for gatetype, gatefuncs in pairs(WireGatesSorted) do + local allowed_gates = {} + local any_allowed = false + for k,v in pairs(gatefuncs) do + if not v.is_banned then + allowed_gates[k] = v + any_allowed = true + end + end + if any_allowed then + CategoriesSorted[#CategoriesSorted+1] = {gatetype = gatetype, gatefuncs = allowed_gates} + end + end + + table.sort(CategoriesSorted, function(a, b) return a.gatetype < b.gatetype end) + + local wiremodNode = self.C.Tree:AddNode("Wire", "icon16/connect.png") + function wiremodNode:DoClick() + self:SetExpanded(not self.m_bExpanded) + end + + for i=1,#CategoriesSorted do + local gatetype = CategoriesSorted[i].gatetype + local gatefuncs = CategoriesSorted[i].gatefuncs + + local node = wiremodNode:AddNode(gatetype) + node.Icon:SetImage("icon16/folder.png") + FillSubTree(self.C.Tree, node, gatefuncs, "wire") + function node:DoClick() + self:SetExpanded(not self.m_bExpanded) + end + end end @@ -101,11 +212,12 @@ function Editor:ClearData() -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} -- } - self.Nodes = {{type = "wire", gate = "+", x = 0, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, - {type = "fpga", gate = "normal-input", ioName = "A", x = -50, y = 90, connections = {}}, - {type = "fpga", gate = "normal-input", ioName = "B", x = -50, y = 110, connections = {}}, - {type = "fpga", gate = "normal-output", ioName = "Out", x = 50, y = 100, connections = {[1] = {1, 1}}} - } + -- self.Nodes = {{type = "wire", gate = "+", x = 0, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, + -- {type = "fpga", gate = "normal-input", ioName = "A", x = -50, y = 90, connections = {}}, + -- {type = "fpga", gate = "normal-input", ioName = "B", x = -50, y = 110, connections = {}}, + -- {type = "fpga", gate = "normal-output", ioName = "Out", x = 50, y = 100, connections = {[1] = {1, 1}}} + -- } + self.Nodes = {} self.Position = {0, 0} self.Zoom = 1 end @@ -125,11 +237,11 @@ end -- UTILITY function Editor:PosToScr(x, y) - return self:GetWide()/2 - (self.Position[1] - x) * self.Zoom, self:GetTall()/2 - (self.Position[2] - y) * self.Zoom + return (self:GetWide()-300)/2 - (self.Position[1] - x) * self.Zoom, self:GetTall()/2 - (self.Position[2] - y) * self.Zoom end function Editor:ScrToPos(x, y) - return self.Position[1] - (self:GetWide()/2 - x) / self.Zoom, self.Position[2] - (self:GetTall()/2 - y) / self.Zoom + return self.Position[1] - ((self:GetWide()-300)/2 - x) / self.Zoom, self.Position[2] - (self:GetTall()/2 - y) / self.Zoom end function Editor:NodeInputPos(node, input) @@ -167,7 +279,7 @@ function Editor:GetNodeInputAt(x, y) if gy < node.y - self.GateSize/2 then continue end if gy > node.y - self.GateSize/2 + self.GateSize * table.Count(gate.inputs) then continue end - for inputNum, input in pairs(gate.inputs) do + for inputNum, _ in pairs(gate.inputs) do local ix, iy = self:NodeInputPos(node, inputNum) if gx < ix - self.IOSize/2 then continue end @@ -220,8 +332,8 @@ end function Editor:PaintConnections() for k1, node in pairs(self.Nodes) do - for input, connectedTo in pairs(node.connections) do - self:PaintConnection(self.Nodes[connectedTo[1]], connectedTo[2], node, input) + for inputNum, connectedTo in pairs(node.connections) do + self:PaintConnection(self.Nodes[connectedTo[1]], connectedTo[2], node, inputNum) end end end @@ -259,7 +371,7 @@ function Editor:PaintNode(node) -- Inputs surface.SetDrawColor(self.InputColor) if gate.inputs then - for k, input in pairs(gate.inputs) do + for k, _ in pairs(gate.inputs) do -- This should rely on a function surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize, ioSize) end @@ -284,7 +396,7 @@ end function Editor:Paint() surface.SetDrawColor(self.BackgroundColor) - surface.DrawRect(0, 0, self:GetWide(), self:GetTall()) + surface.DrawRect(0, 0, self:GetWide()-290, self:GetTall()) self:PaintNodes() self:PaintConnections() @@ -334,35 +446,91 @@ end --ACTIONS function Editor:BeginDrawingConnection(x, y) - local nodeId, inputId = self:GetNodeInputAt(x, y) + local nodeId, inputNum = self:GetNodeInputAt(x, y) if nodeId then --check if something is connected to this input node = self.Nodes[nodeId] - input = node.connections[inputId] + Input = node.connections[inputNum] --Input already connected - if input then - local connectedNode, connectedOutput = input[1], input[2] - node.connections[inputId] = nil + if Input then + local connectedNode, connectedOutput = Input[1], Input[2] + node.connections[inputNum] = nil self.DrawingConnectionFrom = {connectedNode, connectedOutput} self.DrawingFromOutput = true else --input not connected - self.DrawingConnectionFrom = {nodeId, inputId} + self.DrawingConnectionFrom = {nodeId, inputNum} self.DrawingFromInput = true end self.DrawingConnection = true end - local nodeId, outputId = self:GetNodeOutputAt(x, y) + local nodeId, outputNum = self:GetNodeOutputAt(x, y) if nodeId then self.DrawingConnection = true self.DrawingFromOutput = true - self.DrawingConnectionFrom = {nodeId, outputId} + self.DrawingConnectionFrom = {nodeId, outputNum} end end +function Editor:GetInputName() + local i = 1 + while self.UsedInputNames[i] do + i = i + 1 + end + self.UsedInputNames[i] = true + + return string.char(64+i) +end + +function Editor:GetOutputName() + local i = 1 + while self.UsedOutputNames[i] do + i = i + 1 + end + self.UsedOutputNames[i] = true + + return "Out" .. i +end + +function Editor:CreateNode(type, gate) + node = { + type = type, + gate = gate, + x = self.Position[1], + y = self.Position[2], + connections = {} + } + + local gateInfo = self:GetGate(node) + + if gateInfo.isInput then + node.ioName = self:GetInputName() + elseif gateInfo.isOutput then + node.ioName = self:GetOutputName() + end + + print("Created " .. table.ToString(node, "node", false)) + + table.insert(self.Nodes, node) +end + +function Editor:DeleteNode(nodeId) + self.Nodes[nodeId] = nil + + --remove all connections to this node + for k1, node in pairs(self.Nodes) do + for inputNum, connection in pairs(node.connections) do + if connection[1] == nodeId then + node.connections[inputNum] = nil + end + end + end + +end + --EVENTS function Editor:OnMousePressed(code) if code == MOUSE_LEFT then @@ -403,19 +571,19 @@ end function Editor:OnDrawConnectionFinished(x, y) if self.DrawingFromOutput then - local nodeId, inputId = self:GetNodeInputAt(x, y) + local nodeId, inputNum = self:GetNodeInputAt(x, y) if nodeId then local node = self.Nodes[nodeId] - node.connections[inputId] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} + node.connections[inputNum] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} end elseif self.DrawingFromInput then - local nodeId, outputId = self:GetNodeOutputAt(x, y) + local nodeId, outputNum = self:GetNodeOutputAt(x, y) if nodeId then local node = self.Nodes[self.DrawingConnectionFrom[1]] - node.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputId} + node.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputNum} end end @@ -430,5 +598,18 @@ function Editor:OnMouseWheeled(delta) if self.Zoom > 10 then self.Zoom = 10 end end +function Editor:OnKeyCodePressed(code) + local x, y = self:CursorPos() + + if code == KEY_X then + --Delete + local node = self:GetNodeAt(x, y) + if node then + self:DeleteNode(node) + end + end +end + + vgui.Register("FPGAEditor", Editor, "Panel"); \ No newline at end of file diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index 526d014078..d29e9a9b21 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -1,7 +1,7 @@ FPGAGateActions("Input / Output") FPGAGateActions["normal-input"] = { - name = "Input", + name = "Normal Input", inputs = {}, outputs = {"Out"}, outputtypes = {"NORMAL"}, @@ -12,7 +12,7 @@ FPGAGateActions["normal-input"] = { } FPGAGateActions["normal-output"] = { - name = "Output", + name = "Normal Output", inputs = {"A"}, inputtypes = {"NORMAL"}, outputs = {}, @@ -20,4 +20,26 @@ FPGAGateActions["normal-output"] = { output = function(gate) return 0 end +} + +FPGAGateActions["vector-input"] = { + name = "Vector Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"VECTOR"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["vector-output"] = { + name = "Vector Output", + inputs = {"A"}, + inputtypes = {"VECTOR"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end } \ No newline at end of file From e60b6bceb14ced6de7e3e27c022da128bfa394c5 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 6 Jan 2021 15:15:53 +0100 Subject: [PATCH 020/236] Fixed net bug where indexes were ignored --- lua/entities/gmod_wire_fpga/init.lua | 9 ++++-- lua/wire/client/node_editor/nodeeditor.lua | 35 ++++++++++++++++++---- todo.txt | 8 +++-- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 7a0071afcf..8dfd844da5 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -70,11 +70,12 @@ function ENT:CompileData(data) inputIds = {} outputIds = {} nodeGetsInputFrom = {} + for nodeId, node in pairs(data.Nodes) do - table.insert(nodes, { + nodes[nodeId] = { type = node.type, gate = node.gate, - }) + } for input, connection in pairs(node.connections) do fromNode = connection[1] fromOutput = connection[2] @@ -197,7 +198,9 @@ function ENT:Run(changedInputs) local values = {} - print(table.ToString(self.Nodes, "nodes", true)) + for nodeId, node in pairs(self.Nodes) do + print(nodeId .. table.ToString(node, "", false)) + end while not table.IsEmpty(nodeQueue) do print() diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 5a1e080d8a..d7f206fc5b 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -183,7 +183,9 @@ function Editor:GetData() Name = self.C.Name:GetValue(), Nodes = self.Nodes, Position = self.Position, - Zoom = self.Zoom + Zoom = self.Zoom, + UsedInputNames = self.UsedInputNames, + UsedOutputNames = self.UsedOutputNames, }, false) end @@ -195,6 +197,8 @@ function Editor:SetData(data) self.Nodes = data.Nodes self.Position = data.Position self.Zoom = data.Zoom + self.UsedInputNames = data.UsedInputNames + self.UsedOutputNames = data.UsedOutputNames end function Editor:ClearData() @@ -220,6 +224,9 @@ function Editor:ClearData() self.Nodes = {} self.Position = {0, 0} self.Zoom = 1 + self.UsedInputNames = {} + self.UsedOutputNames = {} + end function Editor:GetName() @@ -482,7 +489,7 @@ function Editor:GetInputName() end self.UsedInputNames[i] = true - return string.char(64+i) + return "I" .. i end function Editor:GetOutputName() @@ -492,7 +499,18 @@ function Editor:GetOutputName() end self.UsedOutputNames[i] = true - return "Out" .. i + return "O" .. i +end + +function Editor:FreeName(name) + local type = string.sub(name, 1, 1) + local index = string.sub(name, 2, -1) + --print("freeing " .. type .. tonumber(index)) + if type == "I" then + self.UsedInputNames[tonumber(index)] = false + elseif type == "O" then + self.UsedOutputNames[tonumber(index)] = false + end end function Editor:CreateNode(type, gate) @@ -518,8 +536,8 @@ function Editor:CreateNode(type, gate) end function Editor:DeleteNode(nodeId) - self.Nodes[nodeId] = nil - + print("Deleted " .. nodeId) + --remove all connections to this node for k1, node in pairs(self.Nodes) do for inputNum, connection in pairs(node.connections) do @@ -529,6 +547,13 @@ function Editor:DeleteNode(nodeId) end end + --clear name, if it used one + if self.Nodes[nodeId].ioName then + self:FreeName(self.Nodes[nodeId].ioName) + end + + --finally remove node + self.Nodes[nodeId] = nil end --EVENTS diff --git a/todo.txt b/todo.txt index fbd4cd91f5..3b67b5259b 100644 --- a/todo.txt +++ b/todo.txt @@ -6,17 +6,19 @@ FPGA Entity: Test using chips with multiple outputs Test to make sure that order is correct + execution is broken + FPGA Editor: Features: - Add way to make nodes - Add way to remove nodes - Shortcuts? Bugs: Saving a file with capital letter fucks it up + nice to have: + remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred + FPGA Gates: Features: From 635d28d1d0eb7ad0ea29b15d02d926c9a37a7176 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 6 Jan 2021 16:09:04 +0100 Subject: [PATCH 021/236] Fixed execution bug regarding outputs --- lua/entities/gmod_wire_fpga/init.lua | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 8dfd844da5..348a2208b6 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -75,6 +75,7 @@ function ENT:CompileData(data) nodes[nodeId] = { type = node.type, gate = node.gate, + ioName = node.ioName, } for input, connection in pairs(node.connections) do fromNode = connection[1] @@ -177,6 +178,8 @@ end function ENT:Run(changedInputs) + print("--------------------") + --Initialize nodesInQueue set local nodesInQueue = {} for nodeId, node in pairs(self.Nodes) do @@ -197,7 +200,7 @@ function ENT:Run(changedInputs) --nodesInQueue = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0} local values = {} - + for nodeId, node in pairs(self.Nodes) do print(nodeId .. table.ToString(node, "", false)) end @@ -218,7 +221,8 @@ function ENT:Run(changedInputs) --output logic if gate.isOutput then - WireLib.TriggerOutput(self, "Out", values[nodeId][1]) + print(node.ioName .. " outputs " .. values[nodeId][1]) + WireLib.TriggerOutput(self, node.ioName, values[nodeId][1]) continue end From ba7c9f8d1febc5f44e608c27b70d5f02e9a682ca Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 6 Jan 2021 16:26:57 +0100 Subject: [PATCH 022/236] Added type colors --- lua/wire/client/node_editor/nodeeditor.lua | 62 ++++++++++++++++++++-- todo.txt | 2 + 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index d7f206fc5b..775a366299 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -20,8 +20,17 @@ function Editor:Init() self.BackgroundColor = Color(32, 32, 32, 255) self.NodeColor = Color(100, 100, 100, 255) self.ConnectionColor = Color(200, 200, 200, 255) - self.InputColor = Color(160, 240, 160, 255) - self.OutputColor = Color(160, 160, 240, 255) + + self.NormalColor = Color(200, 200, 200, 255) --White + self.Vector2Color = Color(0, 255, 255, 255) --Light blue + self.VectorColor = Color(0, 150, 255, 255) --Blue + self.Vector4Color = Color(0, 40, 255, 255) --Dark blue + self.AngleColor = Color(150, 240, 150, 255) --Light green + self.StringColor = Color(255, 190, 0, 255) --Orange + + self.ArrayColor = Color(0, 100, 0, 255) --Dark green + self.EntityColor = Color(255, 100, 100, 255) --Dark red + self.RangerColor = Color(220, 0, 255, 255) --Deep purple self.UsedInputNames = {} self.UsedOutputNames = {} @@ -242,6 +251,22 @@ function Editor:GetGate(node) end end +function Editor:GetInputType(gate, inputNum) + if gate.inputtypes then + return gate.inputtypes[inputNum] + else + return "NORMAL" + end +end + +function Editor:GetOutputType(gate, outputNum) + if gate.outputtypes then + return gate.outputtypes[outputNum] + else + return "NORMAL" + end +end + -- UTILITY function Editor:PosToScr(x, y) return (self:GetWide()-300)/2 - (self.Position[1] - x) * self.Zoom, self:GetTall()/2 - (self.Position[2] - y) * self.Zoom @@ -345,6 +370,30 @@ function Editor:PaintConnections() end end +function Editor:GetTypeColor(type) + if type == "NORMAL" then + return self.NormalColor + elseif type == "VECTOR2" then + return self.Vector2Color + elseif type == "VECTOR" then + return self.VectorColor + elseif type == "VECTOR4" then + return self.Vector4Color + elseif type == "ANGLE" then + return self.AngleColor + elseif type == "STRING" then + return self.StringColor + elseif type == "ARRAY" then + return self.ArrayColor + elseif type == "ENTITY" then + return self.EntityColor + elseif type == "RANGER" then + return self.RangerColor + else + return Color(0,0,0,255) + end +end + function Editor:PaintNode(node) local gate = self:GetGate(node) @@ -376,18 +425,21 @@ function Editor:PaintNode(node) surface.DrawText(gate.name) -- Inputs - surface.SetDrawColor(self.InputColor) if gate.inputs then for k, _ in pairs(gate.inputs) do + local type = self:GetInputType(gate, k) + surface.SetDrawColor(self:GetTypeColor(type)) -- This should rely on a function surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize, ioSize) end end -- Output - surface.SetDrawColor(self.OutputColor) if gate.outputs then - for k, output in pairs(gate.outputs) do + for k, _ in pairs(gate.outputs) do + local type = self:GetOutputType(gate, k) + surface.SetDrawColor(self:GetTypeColor(type)) + surface.DrawRect(x + size/2, y - ioSize/2 + (k-1) * size, ioSize, ioSize) end else diff --git a/todo.txt b/todo.txt index 3b67b5259b..d190c151a7 100644 --- a/todo.txt +++ b/todo.txt @@ -15,6 +15,8 @@ FPGA Editor: Bugs: Saving a file with capital letter fucks it up + Fix colors + Fix chip size being wrong if output bigger than input nice to have: remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred From ddf0e25b17fff9de30e95ed27a6229e84aa39018 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 12:04:57 +0100 Subject: [PATCH 023/236] Added type checking to editor --- lua/wire/client/node_editor/nodeeditor.lua | 29 +++++++++++++++++++--- todo.txt | 2 -- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 775a366299..99408bb48b 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -443,6 +443,9 @@ function Editor:PaintNode(node) surface.DrawRect(x + size/2, y - ioSize/2 + (k-1) * size, ioSize, ioSize) end else + local type = self:GetOutputType(gate, 1) + surface.SetDrawColor(self:GetTypeColor(type)) + surface.DrawRect(x + size/2, y - ioSize/2, ioSize, ioSize) end end @@ -651,16 +654,34 @@ function Editor:OnDrawConnectionFinished(x, y) local nodeId, inputNum = self:GetNodeInputAt(x, y) if nodeId then - local node = self.Nodes[nodeId] - node.connections[inputNum] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} + local inputNode = self.Nodes[nodeId] + local outputNode = self.Nodes[self.DrawingConnectionFrom[1]] + --check type + local inputType = self:GetInputType(self:GetGate(inputNode), inputNum) + local outputType = self:GetOutputType(self:GetGate(outputNode), self.DrawingConnectionFrom[2]) + + print(inputType .. " " .. outputType) + + if inputType == outputType then + --connect up + inputNode.connections[inputNum] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} + end end elseif self.DrawingFromInput then local nodeId, outputNum = self:GetNodeOutputAt(x, y) if nodeId then - local node = self.Nodes[self.DrawingConnectionFrom[1]] - node.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputNum} + local inputNode = self.Nodes[self.DrawingConnectionFrom[1]] + local outputNode = self.Nodes[nodeId] + --check type + local inputType = self:GetInputType(self:GetGate(inputNode), self.DrawingConnectionFrom[2]) + local outputType = self:GetOutputType(self:GetGate(outputNode), outputNum) + + if inputType == outputType then + --connect up + inputNode.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputNum} + end end end diff --git a/todo.txt b/todo.txt index d190c151a7..69bdec625b 100644 --- a/todo.txt +++ b/todo.txt @@ -6,8 +6,6 @@ FPGA Entity: Test using chips with multiple outputs Test to make sure that order is correct - execution is broken - FPGA Editor: Features: From d0c0cfc20719a65ba8d9d38d18052f3088e2327d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 13:11:20 +0100 Subject: [PATCH 024/236] Fixed visual bugs and improved colors --- lua/wire/client/node_editor/nodeeditor.lua | 60 ++++++++++++---------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 99408bb48b..a379063022 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -21,16 +21,17 @@ function Editor:Init() self.NodeColor = Color(100, 100, 100, 255) self.ConnectionColor = Color(200, 200, 200, 255) - self.NormalColor = Color(200, 200, 200, 255) --White - self.Vector2Color = Color(0, 255, 255, 255) --Light blue - self.VectorColor = Color(0, 150, 255, 255) --Blue - self.Vector4Color = Color(0, 40, 255, 255) --Dark blue - self.AngleColor = Color(150, 240, 150, 255) --Light green - self.StringColor = Color(255, 190, 0, 255) --Orange + self.NormalColor = Color(190, 190, 255, 255) --Very light blue nearing white + self.Vector2Color = Color(150, 255, 255, 255) --Light blue + self.VectorColor = Color(70, 160, 255, 255) --Blue + self.Vector4Color = Color(0, 50, 255, 255) --Dark blue + self.AngleColor = Color(100, 200, 100, 255) --Light green + self.StringColor = Color(250, 160, 90, 255) --Orange - self.ArrayColor = Color(0, 100, 0, 255) --Dark green + self.ArrayColor = Color(20, 110, 20, 255) --Dark green self.EntityColor = Color(255, 100, 100, 255) --Dark red - self.RangerColor = Color(220, 0, 255, 255) --Deep purple + self.RangerColor = Color(130, 100, 60, 255) --Brown + self.WirelinkColor = Color(200, 80, 200, 255) --Deep purple self.UsedInputNames = {} self.UsedOutputNames = {} @@ -253,7 +254,7 @@ end function Editor:GetInputType(gate, inputNum) if gate.inputtypes then - return gate.inputtypes[inputNum] + return gate.inputtypes[inputNum] or "NORMAL" else return "NORMAL" end @@ -261,7 +262,7 @@ end function Editor:GetOutputType(gate, outputNum) if gate.outputtypes then - return gate.outputtypes[outputNum] + return gate.outputtypes[outputNum] or "NORMAL" else return "NORMAL" end @@ -389,6 +390,8 @@ function Editor:GetTypeColor(type) return self.EntityColor elseif type == "RANGER" then return self.RangerColor + elseif type == "WIRELINK" then + return self.WirelinkColor else return Color(0,0,0,255) end @@ -403,26 +406,16 @@ function Editor:PaintNode(node) end local amountOfOutputs = 1 if gate.outputs then - local amountOfOutputs = table.Count(gate.outputs) + amountOfOutputs = table.Count(gate.outputs) end + -- if gate.outputtypes then + -- amountOfOutputs = math.max(amountOfOutputs, table.Count(gate.outputtypes)) + -- end local x, y = self:PosToScr(node.x, node.y) local size = self.Zoom * self.GateSize local ioSize = self.Zoom * self.IOSize - - -- Body - local height = math.max(amountOfInputs, amountOfOutputs, 1) - - surface.SetDrawColor(self.NodeColor) - surface.DrawRect(x-size/2, y-size/2, size, size * height) - - -- Name - surface.SetFont("Default") - surface.SetTextColor(255, 255, 255) - local tx, ty = surface.GetTextSize(gate.name) - surface.SetTextPos(x-tx/2, y-ty/2-size/1.2) - surface.DrawText(gate.name) -- Inputs if gate.inputs then @@ -430,7 +423,7 @@ function Editor:PaintNode(node) local type = self:GetInputType(gate, k) surface.SetDrawColor(self:GetTypeColor(type)) -- This should rely on a function - surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize, ioSize) + surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize*2, ioSize) end end @@ -440,14 +433,27 @@ function Editor:PaintNode(node) local type = self:GetOutputType(gate, k) surface.SetDrawColor(self:GetTypeColor(type)) - surface.DrawRect(x + size/2, y - ioSize/2 + (k-1) * size, ioSize, ioSize) + surface.DrawRect(x + size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize*2, ioSize) end else local type = self:GetOutputType(gate, 1) surface.SetDrawColor(self:GetTypeColor(type)) - surface.DrawRect(x + size/2, y - ioSize/2, ioSize, ioSize) + surface.DrawRect(x + size/2 - ioSize, y - ioSize/2, ioSize*2, ioSize) end + + -- Body + local height = math.max(amountOfInputs, amountOfOutputs, 1) + + surface.SetDrawColor(self.NodeColor) + surface.DrawRect(x-size/2, y-size/2, size, size * height) + + -- Name + surface.SetFont("Default") + surface.SetTextColor(255, 255, 255) + local tx, ty = surface.GetTextSize(gate.name) + surface.SetTextPos(x-tx/2, y-ty/2-size/1.2) + surface.DrawText(gate.name) end function Editor:PaintNodes() From 05567123c999b6aee843fe8adc96484708773237 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 13:29:13 +0100 Subject: [PATCH 025/236] Added all input and output gates --- lua/entities/gmod_wire_fpga/init.lua | 4 +- lua/wire/fpga_gates/io.lua | 165 +++++++++++++++++++++++++++ 2 files changed, 167 insertions(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 348a2208b6..63329ad7ca 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -163,7 +163,7 @@ function ENT:Reset() end function ENT:TriggerInput(iname, value) - print("Set input " .. iname .. " to " .. value) + --print("Set input " .. iname .. " to " .. value) self.InputValues[self.InputIds[iname]] = value self:Run({self.InputIds[iname]}) @@ -221,7 +221,7 @@ function ENT:Run(changedInputs) --output logic if gate.isOutput then - print(node.ioName .. " outputs " .. values[nodeId][1]) + --print(node.ioName .. " outputs " .. values[nodeId][1]) WireLib.TriggerOutput(self, node.ioName, values[nodeId][1]) continue end diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index d29e9a9b21..f21a0f3fdd 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -22,6 +22,28 @@ FPGAGateActions["normal-output"] = { end } +FPGAGateActions["vector2-input"] = { + name = "Vector-2 Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"VECTOR2"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["vector2-output"] = { + name = "Vector-2 Output", + inputs = {"A"}, + inputtypes = {"VECTOR2"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + FPGAGateActions["vector-input"] = { name = "Vector Input", inputs = {}, @@ -42,4 +64,147 @@ FPGAGateActions["vector-output"] = { output = function(gate) return 0 end +} + +FPGAGateActions["vector4-input"] = { + name = "Vector-4 Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"VECTOR4"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["vector4-output"] = { + name = "Vector-4 Output", + inputs = {"A"}, + inputtypes = {"VECTOR4"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["angle-input"] = { + name = "Angle Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"ANGLE"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["angle-output"] = { + name = "Angle Output", + inputs = {"A"}, + inputtypes = {"ANGLE"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["string-input"] = { + name = "String Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"STRING"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["string-output"] = { + name = "String Output", + inputs = {"A"}, + inputtypes = {"STRING"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["array-input"] = { + name = "Array Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"ARRAY"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["array-output"] = { + name = "Array Output", + inputs = {"A"}, + inputtypes = {"ARRAY"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["entity-input"] = { + name = "Entity Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"ENTITY"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["entity-output"] = { + name = "Entity Output", + inputs = {"A"}, + inputtypes = {"ENTITY"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["ranger-input"] = { + name = "Ranger Input", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"RANGER"}, + isInput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["ranger-output"] = { + name = "Ranger Output", + inputs = {"A"}, + inputtypes = {"RANGER"}, + outputs = {}, + isOutput = true, + output = function(gate) + return 0 + end +} + +FPGAGateActions["hispeed-input"] = { + name = "Highspeed Input", + inputs = {}, + outputs = {"Memory"}, + outputtypes = {"WIRELINK"}, + isInput = true, + output = function(gate) + return 0 + end } \ No newline at end of file From c0fc6d83d98448d59ccd5909d6f9174751539ee9 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 14:22:14 +0100 Subject: [PATCH 026/236] Multiple outputs can now be drawn --- lua/wire/client/node_editor/nodeeditor.lua | 31 +++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index a379063022..cd19fe1d21 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -336,16 +336,33 @@ function Editor:GetNodeOutputAt(x, y) if gx < node.x - self.GateSize/2 - self.IOSize then continue end if gx > node.x + self.GateSize/2 + self.IOSize then continue end if gy < node.y - self.GateSize/2 then continue end - if gy > node.y + self.GateSize/2 then continue end + if gate.outputs then + if gy > node.y - self.GateSize/2 + self.GateSize * table.Count(gate.outputs) then continue end + else + if gy > node.y + self.GateSize/2 then continue end + end - local ix, iy = self:NodeOutputPos(node, 1) + if gate.outputs then + for outputNum, _ in pairs(gate.outputs) do + local ix, iy = self:NodeOutputPos(node, outputNum) + + if gx < ix - self.IOSize/2 then continue end + if gx > ix + self.IOSize/2 then continue end + if gy < iy - self.IOSize/2 then continue end + if gy > iy + self.IOSize/2 then continue end + + return k, outputNum + end + else + local ix, iy = self:NodeOutputPos(node, 1) - if gx < ix - self.IOSize/2 then continue end - if gx > ix + self.IOSize/2 then continue end - if gy < iy - self.IOSize/2 then continue end - if gy > iy + self.IOSize/2 then continue end + if gx < ix - self.IOSize/2 then continue end + if gx > ix + self.IOSize/2 then continue end + if gy < iy - self.IOSize/2 then continue end + if gy > iy + self.IOSize/2 then continue end - return k, 1 + return k, 1 + end end return nil From 86c9168eea37c0cee20479e4dbc33b2572793192 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 14:22:21 +0100 Subject: [PATCH 027/236] Multiple outputs are now evaluated --- lua/entities/gmod_wire_fpga/init.lua | 32 +++++++++++++++++----------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 63329ad7ca..1ba05dc6d4 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -221,14 +221,14 @@ function ENT:Run(changedInputs) --output logic if gate.isOutput then - --print(node.ioName .. " outputs " .. values[nodeId][1]) WireLib.TriggerOutput(self, node.ioName, values[nodeId][1]) + print(node.ioName .. " outputs " .. table.ToString(values[nodeId], "", false)) continue end --gate value logic if gate.isInput then - value = self.InputValues[nodeId] + value = {self.InputValues[nodeId]} else --if input hasnt arrived yet, use older value -- (maybe check if its ever going to arrive? older value should only be used incase it never will) @@ -239,24 +239,30 @@ function ENT:Run(changedInputs) end end - value = gate.output(self.Gates[nodeId], unpack(values[nodeId])) + value = {gate.output(self.Gates[nodeId], unpack(values[nodeId]))} end + print(table.ToString(value, "output", false)) + --save value for future executions self.LastGateValues[nodeId] = value --propergate output value to inputs if node.connections then - for k, connection in pairs(node.connections[1]) do - toNode = connection[1] - toInput = connection[2] - if not values[toNode] then values[toNode] = {} end - values[toNode][toInput] = value - - --add connected nodes to queue - if nodesInQueue[connection[1]] == false then - table.insert(nodeQueue, connection[1]) - nodesInQueue[connection[1]] = true + for outputNum, connections in pairs(node.connections) do + for k, connection in pairs(connections) do + toNode = connection[1] + toInput = connection[2] + if not values[toNode] then values[toNode] = {} end + + --multiple outputs + values[toNode][toInput] = value[outputNum] + + --add connected nodes to queue + if nodesInQueue[connection[1]] == false then + table.insert(nodeQueue, connection[1]) + nodesInQueue[connection[1]] = true + end end end end From 3d21325f2df12d2011a9bf688e8d020c0e343843 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 15:51:57 +0100 Subject: [PATCH 028/236] Improved execution massively, inputs now get default values, execution order is monitored --- lua/entities/gmod_wire_fpga/init.lua | 111 +++++++++++++++++++++++++-- 1 file changed, 105 insertions(+), 6 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 1ba05dc6d4..8a327b7ec2 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -13,6 +13,48 @@ local function getGate(node) end end +local function getInputType(gate, inputNum) + if gate.inputtypes then + return gate.inputtypes[inputNum] or "NORMAL" + else + return "NORMAL" + end +end + +local function getDefaultValue(node) + local gate = getGate(node) + + values = {} + for inputNum, name in pairs(gate.inputs) do + local type = getInputType(gate, inputNum) + + --default values + local value = nil + if type == "NORMAL" then + value = 0 + elseif type == "VECTOR2" then + elseif type == "VECTOR" then + value = Vector(0, 0, 0) + elseif type == "VECTOR4" then + elseif type == "ANGLE" then + value = Angle(0, 0, 0) + elseif type == "STRING" then + value = "" + elseif type == "ARRAY" then + value = {} + elseif type == "ENTITY" then + value = NULL + elseif type == "RANGER" then + value = nil + elseif type == "WIRELINK" then + value = nil + end + + values[inputNum] = value + end + + return values +end @@ -121,7 +163,6 @@ function ENT:CompileData(data) end - function ENT:Upload(data) MsgC(Color(0, 255, 100), "Uploading to FPGA\n") @@ -141,7 +182,11 @@ function ENT:Upload(data) self.Gates[nodeId] = {} --reset gate end + --Initialize default values self.LastGateValues = {} + for nodeId, node in pairs(self.Nodes) do + self.LastGateValues[nodeId] = getDefaultValue(node) + end --Initialize inputs to default values (and backup lastgatevalue table) self.InputValues = {} @@ -180,6 +225,41 @@ end function ENT:Run(changedInputs) print("--------------------") + ----------------------------------------- + --PREPARATION + ----------------------------------------- + + --Find out which nodes will be visited + local activeNodes = {} + for nodeId, node in pairs(self.Nodes) do + activeNodes[nodeId] = false + end + local activeNodesQueue = {} + local i = 1 + for k, id in pairs(changedInputs) do + activeNodesQueue[i] = id + activeNodes[id] = true + i = i + 1 + end + while not table.IsEmpty(activeNodesQueue) do + local nodeId = table.remove(activeNodesQueue, 1) + local node = self.Nodes[nodeId] + --propergate output value to inputs + if node.connections then + for outputNum, connections in pairs(node.connections) do + for k, connection in pairs(connections) do + --add connected nodes to queue (and active nodes) + if activeNodes[connection[1]] == false then + table.insert(activeNodesQueue, connection[1]) + activeNodes[connection[1]] = true + end + end + end + end + end + --activeNodes = {0,0,0,1,1,1,1,1,1} + print(table.ToString(activeNodes, "activeNodes", false)) + --Initialize nodesInQueue set local nodesInQueue = {} for nodeId, node in pairs(self.Nodes) do @@ -196,8 +276,12 @@ function ENT:Run(changedInputs) i = i + 1 end + --Initialize nodesVisited set + local nodesVisited = {} + --nodeQueue = {changedInputs[1], ... changedInputs[n]} --nodesInQueue = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0} + --nodesVisited = {} local values = {} @@ -205,13 +289,17 @@ function ENT:Run(changedInputs) print(nodeId .. table.ToString(node, "", false)) end + ----------------------------------------- + --EXECUTION + ----------------------------------------- while not table.IsEmpty(nodeQueue) do print() print(table.ToString(nodeQueue, "nodeQueue", false)) print(table.ToString(nodesInQueue, "nodesInQueue", false)) - + print(table.ToString(nodesVisited, "nodesVisited", false)) local nodeId = table.remove(nodeQueue, 1) + table.insert(nodesVisited, nodeId) local node = self.Nodes[nodeId] --print(table.ToString(node.connections, "node.connections", false)) @@ -230,15 +318,26 @@ function ENT:Run(changedInputs) if gate.isInput then value = {self.InputValues[nodeId]} else - --if input hasnt arrived yet, use older value - -- (maybe check if its ever going to arrive? older value should only be used incase it never will) + --if input hasnt arrived, send this node to the back of the queue for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do if not values[nodeId][inputId] then - --add support for multi output gates - values[nodeId][inputId] = self.LastGateValues[connection[1]] + nodeId2 = connection[1] + outputNum = connection[2] + + --if node hasnt been visited yet and its going to be visited + if not nodesVisited[nodeId2] and activeNodes[nodeId2] then + --send this node to the back of the queue (potential infinite looping???) + table.insert(nodeQueue, nodeId) + continue + else + --if input isnt going to arrive, use older value + values[nodeId][inputId] = self.LastGateValues[nodeId2][outputNum] + end end end + print(table.ToString(values[nodeId], "", false)) + value = {gate.output(self.Gates[nodeId], unpack(values[nodeId]))} end From 614ed8753c073d3a074a387f8d7c817f4bb365a7 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 15:55:27 +0100 Subject: [PATCH 029/236] Fixed error in last execution upgrade --- lua/entities/gmod_wire_fpga/init.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 8a327b7ec2..6112d999c9 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -318,6 +318,7 @@ function ENT:Run(changedInputs) if gate.isInput then value = {self.InputValues[nodeId]} else + local executeLater = false --if input hasnt arrived, send this node to the back of the queue for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do if not values[nodeId][inputId] then @@ -328,7 +329,8 @@ function ENT:Run(changedInputs) if not nodesVisited[nodeId2] and activeNodes[nodeId2] then --send this node to the back of the queue (potential infinite looping???) table.insert(nodeQueue, nodeId) - continue + executeLater = true + break else --if input isnt going to arrive, use older value values[nodeId][inputId] = self.LastGateValues[nodeId2][outputNum] @@ -336,6 +338,8 @@ function ENT:Run(changedInputs) end end + if executeLater then continue end + print(table.ToString(values[nodeId], "", false)) value = {gate.output(self.Gates[nodeId], unpack(values[nodeId]))} From f165807af74dfd25aa2e26457038d0df21d9fd2b Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 15:56:07 +0100 Subject: [PATCH 030/236] Update todo.txt --- todo.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/todo.txt b/todo.txt index 69bdec625b..4cbff6f942 100644 --- a/todo.txt +++ b/todo.txt @@ -13,14 +13,10 @@ FPGA Editor: Bugs: Saving a file with capital letter fucks it up - Fix colors - Fix chip size being wrong if output bigger than input nice to have: remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred FPGA Gates: - Features: - Add all types of input / output chips \ No newline at end of file From 13f530480ea29d794a64fd4a0297912acec8e206 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 16:26:24 +0100 Subject: [PATCH 031/236] Updated vector io gate names --- lua/wire/fpga_gates/io.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index f21a0f3fdd..6d68b44015 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -23,7 +23,7 @@ FPGAGateActions["normal-output"] = { } FPGAGateActions["vector2-input"] = { - name = "Vector-2 Input", + name = "2D Vector Input", inputs = {}, outputs = {"Out"}, outputtypes = {"VECTOR2"}, @@ -34,7 +34,7 @@ FPGAGateActions["vector2-input"] = { } FPGAGateActions["vector2-output"] = { - name = "Vector-2 Output", + name = "2D Vector Output", inputs = {"A"}, inputtypes = {"VECTOR2"}, outputs = {}, @@ -45,7 +45,7 @@ FPGAGateActions["vector2-output"] = { } FPGAGateActions["vector-input"] = { - name = "Vector Input", + name = "3D Vector Input", inputs = {}, outputs = {"Out"}, outputtypes = {"VECTOR"}, @@ -56,7 +56,7 @@ FPGAGateActions["vector-input"] = { } FPGAGateActions["vector-output"] = { - name = "Vector Output", + name = "3D Vector Output", inputs = {"A"}, inputtypes = {"VECTOR"}, outputs = {}, @@ -67,7 +67,7 @@ FPGAGateActions["vector-output"] = { } FPGAGateActions["vector4-input"] = { - name = "Vector-4 Input", + name = "4D Vector Input", inputs = {}, outputs = {"Out"}, outputtypes = {"VECTOR4"}, @@ -78,7 +78,7 @@ FPGAGateActions["vector4-input"] = { } FPGAGateActions["vector4-output"] = { - name = "Vector-4 Output", + name = "4D Vector Output", inputs = {"A"}, inputtypes = {"VECTOR4"}, outputs = {}, From 998f61f1212360d0f3adf6288b80bb1c6b8d22d0 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 7 Jan 2021 16:36:33 +0100 Subject: [PATCH 032/236] Added execution benchmarking --- lua/entities/gmod_wire_fpga/init.lua | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 6112d999c9..c83d6efee9 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -77,6 +77,9 @@ function ENT:Initialize() self:SetMoveType(MOVETYPE_VPHYSICS) self:SetSolid(SOLID_VPHYSICS) + self.time = 0 + self.timebench = 0 + self.Data = nil self.Inputs = WireLib.CreateInputs(self, {}) @@ -167,6 +170,7 @@ function ENT:Upload(data) MsgC(Color(0, 255, 100), "Uploading to FPGA\n") self.name = data.Name + self.time = 0 self.timebench = 0 self:UpdateOverlay(false) @@ -215,16 +219,26 @@ function ENT:TriggerInput(iname, value) end --- function ENT:Think() +function ENT:Think() + BaseClass.Think(self) + self:NextThink(CurTime()) + + self.timebench = self.timebench * 0.95 + self.time * 0.05 + + self.time = 0 + + self:UpdateOverlay(false) --- self:NextThink(CurTime()) --- return true --- end + return true +end function ENT:Run(changedInputs) print("--------------------") + --Extra + local bench = SysTime() + ----------------------------------------- --PREPARATION ----------------------------------------- @@ -371,6 +385,6 @@ function ENT:Run(changedInputs) end end - - + --keep track of time spent this tick + self.time = self.time + (SysTime() - bench) end \ No newline at end of file From da2b11d21228a585a20551d36eec773f86be5e0c Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 8 Jan 2021 18:31:00 +0100 Subject: [PATCH 033/236] Timed gates now work, and execution interval is adjustable --- lua/entities/gmod_wire_fpga/init.lua | 73 +++++++++++++++++++--------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index c83d6efee9..4de76c8b6d 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -67,7 +67,7 @@ function ENT:UpdateOverlay(clear) else self:SetOverlayData( { name = self.name, - timebench = self.timebench + timebench = self.timebench / (self.ExecutionInterval / FrameTime()) }) end end @@ -77,9 +77,13 @@ function ENT:Initialize() self:SetMoveType(MOVETYPE_VPHYSICS) self:SetSolid(SOLID_VPHYSICS) + self.Debug = false + self.time = 0 self.timebench = 0 + self.ExecutionInterval = FrameTime() + self.Data = nil self.Inputs = WireLib.CreateInputs(self, {}) @@ -96,6 +100,8 @@ function ENT:Initialize() self.OutputTypes = {} self.OutputIds = {} + self.TimedNodes = {} + self.NodeGetsInputFrom = {} self:UpdateOverlay(true) @@ -115,6 +121,7 @@ function ENT:CompileData(data) inputIds = {} outputIds = {} nodeGetsInputFrom = {} + timedNodes = {} for nodeId, node in pairs(data.Nodes) do nodes[nodeId] = { @@ -133,9 +140,14 @@ function ENT:CompileData(data) nodeGetsInputFrom[nodeId] = node.connections - if node.type == "fpga" then - local gate = getGate(node) + --get gate + local gate = getGate(node) + + --timed + if gate.timed then table.insert(timedNodes, nodeId) end + --io + if node.type == "fpga" then if gate.isInput then inputIds[node.ioName] = nodeId table.insert(inputs, node.ioName) @@ -163,11 +175,12 @@ function ENT:CompileData(data) self.OutputIds = outputIds self.NodeGetsInputFrom = nodeGetsInputFrom + self.TimedNodes = timedNodes end function ENT:Upload(data) - MsgC(Color(0, 255, 100), "Uploading to FPGA\n") + --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") self.name = data.Name self.time = 0 @@ -208,7 +221,9 @@ function ENT:Upload(data) end function ENT:Reset() - MsgC(Color(0, 100, 255), "Resetting FPGA\n") + --MsgC(Color(0, 100, 255), "Resetting FPGA\n") + --self.Debug = !self.Debug + --self.ExecutionInterval = 0.1 end function ENT:TriggerInput(iname, value) @@ -221,20 +236,25 @@ end function ENT:Think() BaseClass.Think(self) - self:NextThink(CurTime()) - - self.timebench = self.timebench * 0.95 + self.time * 0.05 + self:NextThink(CurTime()+self.ExecutionInterval) + + --Update timed gates + if not table.IsEmpty(self.TimedNodes) then + self:Run(self.TimedNodes) + end + + --Time benchmarking + self.timebench = self.timebench * 0.95 + self.time * 0.05 self.time = 0 self:UpdateOverlay(false) - return true end -function ENT:Run(changedInputs) - print("--------------------") +function ENT:Run(changedNodes) + --print("--------------------") --Extra local bench = SysTime() @@ -250,7 +270,7 @@ function ENT:Run(changedInputs) end local activeNodesQueue = {} local i = 1 - for k, id in pairs(changedInputs) do + for k, id in pairs(changedNodes) do activeNodesQueue[i] = id activeNodes[id] = true i = i + 1 @@ -272,7 +292,7 @@ function ENT:Run(changedInputs) end end --activeNodes = {0,0,0,1,1,1,1,1,1} - print(table.ToString(activeNodes, "activeNodes", false)) + if self.Debug then print(table.ToString(activeNodes, "activeNodes", false)) end --Initialize nodesInQueue set local nodesInQueue = {} @@ -284,7 +304,7 @@ function ENT:Run(changedInputs) --todo: also add self-triggering gates local nodeQueue = {} local i = 1 - for k, id in pairs(changedInputs) do + for k, id in pairs(changedNodes) do nodeQueue[i] = id nodesInQueue[id] = true i = i + 1 @@ -293,24 +313,28 @@ function ENT:Run(changedInputs) --Initialize nodesVisited set local nodesVisited = {} - --nodeQueue = {changedInputs[1], ... changedInputs[n]} + --nodeQueue = {changedNodes[1], ... changedNodes[n]} --nodesInQueue = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0} --nodesVisited = {} local values = {} - for nodeId, node in pairs(self.Nodes) do - print(nodeId .. table.ToString(node, "", false)) + if self.Debug then + for nodeId, node in pairs(self.Nodes) do + print(nodeId .. table.ToString(node, "", false)) + end end ----------------------------------------- --EXECUTION ----------------------------------------- while not table.IsEmpty(nodeQueue) do - print() - print(table.ToString(nodeQueue, "nodeQueue", false)) - print(table.ToString(nodesInQueue, "nodesInQueue", false)) - print(table.ToString(nodesVisited, "nodesVisited", false)) + if self.Debug then + print() + print(table.ToString(nodeQueue, "nodeQueue", false)) + print(table.ToString(nodesInQueue, "nodesInQueue", false)) + print(table.ToString(nodesVisited, "nodesVisited", false)) + end local nodeId = table.remove(nodeQueue, 1) table.insert(nodesVisited, nodeId) @@ -324,7 +348,7 @@ function ENT:Run(changedInputs) --output logic if gate.isOutput then WireLib.TriggerOutput(self, node.ioName, values[nodeId][1]) - print(node.ioName .. " outputs " .. table.ToString(values[nodeId], "", false)) + if self.Debug then print(node.ioName .. " outputs " .. table.ToString(values[nodeId], "", false)) end continue end @@ -335,6 +359,7 @@ function ENT:Run(changedInputs) local executeLater = false --if input hasnt arrived, send this node to the back of the queue for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do + if not values[nodeId] then values[nodeId] = {} end if not values[nodeId][inputId] then nodeId2 = connection[1] outputNum = connection[2] @@ -354,12 +379,12 @@ function ENT:Run(changedInputs) if executeLater then continue end - print(table.ToString(values[nodeId], "", false)) + if self.Debug then print(table.ToString(values[nodeId], "", false)) end value = {gate.output(self.Gates[nodeId], unpack(values[nodeId]))} end - print(table.ToString(value, "output", false)) + if self.Debug then print(table.ToString(value, "output", false)) end --save value for future executions self.LastGateValues[nodeId] = value From ac7cc479afaa78c7b69a1aa516ac62df609eed9a Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 8 Jan 2021 20:38:45 +0100 Subject: [PATCH 034/236] Added a way to change execution interval in the editor --- lua/entities/gmod_wire_fpga/init.lua | 6 +- lua/wire/client/node_editor/nodeeditor.lua | 73 ++++++++++++++-------- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 4de76c8b6d..b805d03478 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -67,7 +67,7 @@ function ENT:UpdateOverlay(clear) else self:SetOverlayData( { name = self.name, - timebench = self.timebench / (self.ExecutionInterval / FrameTime()) + timebench = self.timebench / (self.ExecutionInterval / self.TickRate) }) end end @@ -82,7 +82,8 @@ function ENT:Initialize() self.time = 0 self.timebench = 0 - self.ExecutionInterval = FrameTime() + self.TickRate = 0.015 + self.ExecutionInterval = 0.015 self.Data = nil @@ -183,6 +184,7 @@ function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") self.name = data.Name + self.ExecutionInterval = math.max(data.ExecutionInterval, self.TickRate) self.time = 0 self.timebench = 0 self:UpdateOverlay(false) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index cd19fe1d21..08fa420d35 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -62,13 +62,20 @@ function Editor:InitComponents() self.C.TopBar = vgui.Create("DPanel", self) self.C.TopBar:Dock(TOP) - self.C.TopBar:SetHeight(24) - self.C.TopBar:DockPadding(5,5,5,5) + self.C.TopBar:SetHeight(36) + self.C.TopBar:DockPadding(5, 18, 5, 4) self.C.TopBar:SetBackgroundColor(Color(170, 174, 179, 255)) + local x = 7 + self.C.NameLabel = vgui.Create("DLabel", self.C.TopBar) + self.C.NameLabel:SetText("Chip Name") + self.C.NameLabel:SizeToContents() + self.C.NameLabel:SetTextColor(Color(255,255,255,255)) + self.C.NameLabel:SetPos(x, 4) self.C.Name = vgui.Create("DTextEntry", self.C.TopBar) self.C.Name:SetEditable(true) self.C.Name:SetSize(140, 20) + x = x + 140 self.C.Name:Dock(LEFT) -- this doesnt work self.C.Name.OnLoseFocus = function (self) @@ -77,6 +84,26 @@ function Editor:InitComponents() end end + x = x + 20 + self.C.ExecutionIntervalLabel = vgui.Create("DLabel", self.C.TopBar) + self.C.ExecutionIntervalLabel:SetText("Execution Interval") + self.C.ExecutionIntervalLabel:SizeToContents() + self.C.ExecutionIntervalLabel:SetTextColor(Color(255,255,255,255)) + self.C.ExecutionIntervalLabel:SetPos(x, 4) + self.C.ExecutionIntervalLabel2 = vgui.Create("DLabel", self.C.TopBar) + self.C.ExecutionIntervalLabel2:SetText("every s") + self.C.ExecutionIntervalLabel2:SizeToContents() + self.C.ExecutionIntervalLabel2:SetTextColor(Color(255,255,255,255)) + self.C.ExecutionIntervalLabel2:SetPos(x, 18) + self.C.ExecutionInterval = vgui.Create("DNumberWang", self.C.TopBar) + self.C.ExecutionInterval:SetInterval(0.01) + self.C.ExecutionInterval:SetMax(1) + self.C.ExecutionInterval:SetMin(0.01) + self.C.ExecutionInterval:SetValue(0.01) + self.C.ExecutionInterval:SetSize(38, 20) + self.C.ExecutionInterval:Dock(LEFT) + self.C.ExecutionInterval:DockMargin(54,0,0,0) + --Gate spawning self.C.Holder = vgui.Create("DPanel", self) self.C.Holder:SetWidth(300) @@ -194,6 +221,7 @@ function Editor:GetData() Nodes = self.Nodes, Position = self.Position, Zoom = self.Zoom, + ExecutionInterval = self.C.ExecutionInterval:GetValue(), UsedInputNames = self.UsedInputNames, UsedOutputNames = self.UsedOutputNames, }, false) @@ -202,35 +230,28 @@ end function Editor:SetData(data) local data = WireLib.von.deserialize(data) -- error check - - self.C.Name:SetValue(data.Name) self.Nodes = data.Nodes - self.Position = data.Position - self.Zoom = data.Zoom - self.UsedInputNames = data.UsedInputNames - self.UsedOutputNames = data.UsedOutputNames + + if data.Name then + self.C.Name:SetValue(data.Name) + else + self.C.Name:SetValue("empty") + end + + if data.ExecutionInterval then + self.C.ExecutionInterval:SetValue(data.ExecutionInterval) + else + self.C.ExecutionInterval:SetValue(0.01) + end + + if data.Position then self.Position = data.Position end + if data.Zoom then self.Zoom = data.Zoom end + if data.UsedInputNames then self.UsedInputNames = data.UsedInputNames end + if data.UsedOutputNames then self.UsedOutputNames = data.UsedOutputNames end end function Editor:ClearData() self.C.Name:SetValue("empty") - -- self.Nodes = {{type = "wire", gate = "floor", x = 0, y = 50, connections = {[1] = {5, 1}}}, - -- {type = "wire", gate = "ceil", x = 0, y = 150, connections = {[1] = {5, 1}}}, - -- {type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {1, 1}, [2] = {2, 1}}}, - -- {type = "wire", gate = "exp", x = 150, y = 100, connections = {[1] = {3, 1}}}, - -- {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, - -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {4, 1}}} - -- } - - -- self.Nodes = {{type = "wire", gate = "+", x = 50, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, - -- {type = "io", gate = "in-number", ioName = "A", x = -100, y = 100, connections = {}}, - -- {type = "io", gate = "out-number", ioName = "Out", x = 200, y = 100, connections = {[1] = {1, 1}}} - -- } - - -- self.Nodes = {{type = "wire", gate = "+", x = 0, y = 100, connections = {[1] = {2, 1}, [2] = {2, 1}}}, - -- {type = "fpga", gate = "normal-input", ioName = "A", x = -50, y = 90, connections = {}}, - -- {type = "fpga", gate = "normal-input", ioName = "B", x = -50, y = 110, connections = {}}, - -- {type = "fpga", gate = "normal-output", ioName = "Out", x = 50, y = 100, connections = {[1] = {1, 1}}} - -- } self.Nodes = {} self.Position = {0, 0} self.Zoom = 1 From d44780508a2d503b264e887396cab9428838d09e Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 06:48:44 +0100 Subject: [PATCH 035/236] Added input output labels in node editor --- lua/wire/client/node_editor/nodeeditor.lua | 74 +++++++++++++++++++--- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 08fa420d35..340e078c6a 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -38,6 +38,7 @@ function Editor:Init() self.C = {} self:InitComponents() + self:InitFonts() self.Nodes = {} @@ -57,6 +58,43 @@ end -- COMPONENTS +function Editor:InitFonts() + surface.CreateFont( "NodeName", { + font = "Arial", + extended = false, + size = 16, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + }) + surface.CreateFont( "IO", { + font = "Arial", + extended = false, + size = 13, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, + }) +end + function Editor:InitComponents() self.C = {} @@ -446,9 +484,6 @@ function Editor:PaintNode(node) if gate.outputs then amountOfOutputs = table.Count(gate.outputs) end - -- if gate.outputtypes then - -- amountOfOutputs = math.max(amountOfOutputs, table.Count(gate.outputtypes)) - -- end local x, y = self:PosToScr(node.x, node.y) @@ -456,28 +491,49 @@ function Editor:PaintNode(node) local ioSize = self.Zoom * self.IOSize -- Inputs + surface.SetFont("IO") + surface.SetTextColor(255, 255, 255) + if gate.inputs then - for k, _ in pairs(gate.inputs) do + for k, inputName in pairs(gate.inputs) do local type = self:GetInputType(gate, k) surface.SetDrawColor(self:GetTypeColor(type)) -- This should rely on a function - surface.DrawRect(x - size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize*2, ioSize) + local nx = x - size/2 - ioSize + local ny = y - ioSize/2 + (k-1) * size + surface.DrawRect(nx, ny, ioSize*2, ioSize) + + local tx, ty = surface.GetTextSize(inputName) + surface.SetTextPos(nx-tx-ioSize*0.3, ny+ioSize/2-ty/2) + surface.DrawText(inputName) end end -- Output if gate.outputs then - for k, _ in pairs(gate.outputs) do + for k, outputName in pairs(gate.outputs) do local type = self:GetOutputType(gate, k) surface.SetDrawColor(self:GetTypeColor(type)) - surface.DrawRect(x + size/2 - ioSize, y - ioSize/2 + (k-1) * size, ioSize*2, ioSize) + local nx = x + size/2 - ioSize + local ny = y - ioSize/2 + (k-1) * size + surface.DrawRect(nx, ny, ioSize*2, ioSize) + + local tx, ty = surface.GetTextSize(outputName) + surface.SetTextPos(nx+ioSize*2.3, ny+ioSize/2-ty/2) + surface.DrawText(outputName) end else local type = self:GetOutputType(gate, 1) surface.SetDrawColor(self:GetTypeColor(type)) - surface.DrawRect(x + size/2 - ioSize, y - ioSize/2, ioSize*2, ioSize) + local nx = x + size/2 - ioSize + local ny = y - ioSize/2 + surface.DrawRect(nx, ny, ioSize*2, ioSize) + + local tx, ty = surface.GetTextSize("Out") + surface.SetTextPos(nx+ioSize*2.3, ny+ioSize/2-ty/2) + surface.DrawText("Out") end -- Body @@ -487,7 +543,7 @@ function Editor:PaintNode(node) surface.DrawRect(x-size/2, y-size/2, size, size * height) -- Name - surface.SetFont("Default") + surface.SetFont("NodeName") surface.SetTextColor(255, 255, 255) local tx, ty = surface.GetTextSize(gate.name) surface.SetTextPos(x-tx/2, y-ty/2-size/1.2) From f036e4e1f87b70376c019fcb2d8d41d735679992 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 07:32:08 +0100 Subject: [PATCH 036/236] Improved execution --- lua/entities/gmod_wire_fpga/init.lua | 163 +++++++++++++-------- lua/wire/client/node_editor/nodeeditor.lua | 2 - 2 files changed, 98 insertions(+), 67 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index b805d03478..701f8c9dbd 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -21,36 +21,27 @@ local function getInputType(gate, inputNum) end end -local function getDefaultValue(node) +DefaultValueForType = { + NORMAL = 0, + VECTOR2 = nil, --no + VECTOR = Vector(0, 0, 0), + VECTOR4 = nil, --no + ANGLE = Angle(0, 0, 0), + STRING = "", + ARRAY = {}, + ENTITY = NULL, + RANGER = nil, + WIRELINK = nil +} + +local function getDefaultValues(node) local gate = getGate(node) values = {} for inputNum, name in pairs(gate.inputs) do local type = getInputType(gate, inputNum) - --default values - local value = nil - if type == "NORMAL" then - value = 0 - elseif type == "VECTOR2" then - elseif type == "VECTOR" then - value = Vector(0, 0, 0) - elseif type == "VECTOR4" then - elseif type == "ANGLE" then - value = Angle(0, 0, 0) - elseif type == "STRING" then - value = "" - elseif type == "ARRAY" then - value = {} - elseif type == "ENTITY" then - value = NULL - elseif type == "RANGER" then - value = nil - elseif type == "WIRELINK" then - value = nil - end - - values[inputNum] = value + values[inputNum] = DefaultValueForType[type] end return values @@ -72,6 +63,9 @@ function ENT:UpdateOverlay(clear) end end +-------------------------------------------------------- +--INIT +-------------------------------------------------------- function ENT:Initialize() self:PhysicsInit(SOLID_VPHYSICS) self:SetMoveType(MOVETYPE_VPHYSICS) @@ -179,7 +173,9 @@ function ENT:CompileData(data) self.TimedNodes = timedNodes end - +-------------------------------------------------------- +--UPLOAD +-------------------------------------------------------- function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") @@ -198,36 +194,84 @@ function ENT:Upload(data) --Initialize gate table self.Gates = {} for nodeId, node in pairs(self.Nodes) do - self.Gates[nodeId] = {} - --reset gate + local gate = getGate(node) + + if gate.reset then + --reset gate + local tempGate = {} + gate.reset(tempGate) + self.Gates[nodeId] = tempGate + else + --empty gate + self.Gates[nodeId] = {} + end end - --Initialize default values - self.LastGateValues = {} + + --Table that contains last input values for every gate + self.Values = {} for nodeId, node in pairs(self.Nodes) do - self.LastGateValues[nodeId] = getDefaultValue(node) + self.Values[nodeId] = getDefaultValues(node) end - --Initialize inputs to default values (and backup lastgatevalue table) + --Initialize inputs to default values self.InputValues = {} for k, iname in pairs(self.InputNames) do local inputNodeId = self.InputIds[iname] local value = self.Inputs[iname].Value self.InputValues[inputNodeId] = value - self.LastGateValues[inputNodeId] = value end self.Data = data - --print(table.ToString(data, "data", true)) - self:Run(self.InputIds) + --First execution needs to be with all nodes, to properly get all the right standby values everywhere + local allNodes = {} + for nodeId, node in pairs(self.Nodes) do + table.insert(allNodes, nodeId) + end + + self:Run(allNodes) end +-------------------------------------------------------- +--RESET +-------------------------------------------------------- function ENT:Reset() --MsgC(Color(0, 100, 255), "Resetting FPGA\n") - --self.Debug = !self.Debug - --self.ExecutionInterval = 0.1 + + --Set gates to default values again + self.Values = {} + for nodeId, node in pairs(self.Nodes) do + self.Values[nodeId] = getDefaultValues(node) + end + + --Reset gate table + self.Gates = {} + for nodeId, node in pairs(self.Nodes) do + local gate = getGate(node) + + if gate.reset then + --reset gate + local tempGate = {} + gate.reset(tempGate) + self.Gates[nodeId] = tempGate + else + --empty gate + self.Gates[nodeId] = {} + end + end + + --Run all nodes again (to properly propagate) + local allNodes = {} + for nodeId, node in pairs(self.Nodes) do + table.insert(allNodes, nodeId) + end + + self:Run(allNodes) end +-------------------------------------------------------- +--EXECUTION TRIGGERING +-------------------------------------------------------- function ENT:TriggerInput(iname, value) --print("Set input " .. iname .. " to " .. value) @@ -235,7 +279,6 @@ function ENT:TriggerInput(iname, value) self:Run({self.InputIds[iname]}) end - function ENT:Think() BaseClass.Think(self) self:NextThink(CurTime()+self.ExecutionInterval) @@ -254,7 +297,9 @@ function ENT:Think() return true end - +-------------------------------------------------------- +--RUNNING +-------------------------------------------------------- function ENT:Run(changedNodes) --print("--------------------") @@ -319,8 +364,6 @@ function ENT:Run(changedNodes) --nodesInQueue = {0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 0, 0} --nodesVisited = {} - local values = {} - if self.Debug then for nodeId, node in pairs(self.Nodes) do print(nodeId .. table.ToString(node, "", false)) @@ -349,8 +392,8 @@ function ENT:Run(changedNodes) --output logic if gate.isOutput then - WireLib.TriggerOutput(self, node.ioName, values[nodeId][1]) - if self.Debug then print(node.ioName .. " outputs " .. table.ToString(values[nodeId], "", false)) end + WireLib.TriggerOutput(self, node.ioName, self.Values[nodeId][1]) + if self.Debug then print(node.ioName .. " outputs " .. table.ToString(self.Values[nodeId], "", false)) end continue end @@ -361,46 +404,36 @@ function ENT:Run(changedNodes) local executeLater = false --if input hasnt arrived, send this node to the back of the queue for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do - if not values[nodeId] then values[nodeId] = {} end - if not values[nodeId][inputId] then - nodeId2 = connection[1] - outputNum = connection[2] - - --if node hasnt been visited yet and its going to be visited - if not nodesVisited[nodeId2] and activeNodes[nodeId2] then - --send this node to the back of the queue (potential infinite looping???) - table.insert(nodeQueue, nodeId) - executeLater = true - break - else - --if input isnt going to arrive, use older value - values[nodeId][inputId] = self.LastGateValues[nodeId2][outputNum] - end + nodeId2 = connection[1] + outputNum = connection[2] + + --if node hasnt been visited yet and its going to be visited + if not nodesVisited[nodeId2] and activeNodes[nodeId2] then + --send this node to the back of the queue (potential infinite looping???) + table.insert(nodeQueue, nodeId) + executeLater = true + break end end - + --skip node if executeLater then continue end - if self.Debug then print(table.ToString(values[nodeId], "", false)) end + if self.Debug then print(table.ToString(self.Values[nodeId], "", false)) end - value = {gate.output(self.Gates[nodeId], unpack(values[nodeId]))} + value = {gate.output(self.Gates[nodeId], unpack(self.Values[nodeId]))} end if self.Debug then print(table.ToString(value, "output", false)) end - --save value for future executions - self.LastGateValues[nodeId] = value - --propergate output value to inputs if node.connections then for outputNum, connections in pairs(node.connections) do for k, connection in pairs(connections) do toNode = connection[1] toInput = connection[2] - if not values[toNode] then values[toNode] = {} end --multiple outputs - values[toNode][toInput] = value[outputNum] + self.Values[toNode][toInput] = value[outputNum] --add connected nodes to queue if nodesInQueue[connection[1]] == false then diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 340e078c6a..7c3509933f 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -760,8 +760,6 @@ function Editor:OnDrawConnectionFinished(x, y) local inputType = self:GetInputType(self:GetGate(inputNode), inputNum) local outputType = self:GetOutputType(self:GetGate(outputNode), self.DrawingConnectionFrom[2]) - print(inputType .. " " .. outputType) - if inputType == outputType then --connect up inputNode.connections[inputNum] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} From 3275e953cf408ea72e50a2608bbed40a7406fcc6 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 08:13:36 +0100 Subject: [PATCH 037/236] Fixed node editor related bugs --- lua/wire/client/node_editor/nodeeditor.lua | 149 +++++++++++---------- todo.txt | 25 ++-- 2 files changed, 94 insertions(+), 80 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 7c3509933f..88320525a3 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -38,13 +38,46 @@ function Editor:Init() self.C = {} self:InitComponents() - self:InitFonts() self.Nodes = {} --MsgC(Color(0, 150, 255), table.ToString(GateActions, "Gate Actions", true)) end +surface.CreateFont( "NodeName", { + font = "Arial", + extended = false, + size = 16, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, +}) +surface.CreateFont( "IO", { + font = "Arial", + extended = false, + size = 13, + weight = 500, + blursize = 0, + scanlines = 0, + antialias = true, + underline = false, + italic = false, + strikeout = false, + symbol = false, + rotary = false, + shadow = false, + additive = false, + outline = false, +}) -- ceil = { -- label = function: 0x01eca99bda28, -- group = "Arithmetic", @@ -58,43 +91,6 @@ end -- COMPONENTS -function Editor:InitFonts() - surface.CreateFont( "NodeName", { - font = "Arial", - extended = false, - size = 16, - weight = 500, - blursize = 0, - scanlines = 0, - antialias = true, - underline = false, - italic = false, - strikeout = false, - symbol = false, - rotary = false, - shadow = false, - additive = false, - outline = false, - }) - surface.CreateFont( "IO", { - font = "Arial", - extended = false, - size = 13, - weight = 500, - blursize = 0, - scanlines = 0, - antialias = true, - underline = false, - italic = false, - strikeout = false, - symbol = false, - rotary = false, - shadow = false, - additive = false, - outline = false, - }) -end - function Editor:InitComponents() self.C = {} @@ -154,7 +150,7 @@ function Editor:InitComponents() --utility - local function FillSubTree(tree, node, temp, type) + local function FillSubTree(editor, tree, node, temp, type) node.Icon:SetImage("icon16/folder.png") local subtree = {} @@ -169,7 +165,6 @@ function Editor:InitComponents() local node2 = node:AddNode(gate.name or "No name found :(") node2.name = gate.name node2.action = action - editor = self function node2:DoClick() editor:CreateNode(type, self.action) end @@ -208,7 +203,7 @@ function Editor:InitComponents() local node = fpgaNode:AddNode(gatetype) node.Icon:SetImage("icon16/folder.png") - FillSubTree(self.C.Tree, node, gatefuncs, "fpga") + FillSubTree(self, self.C.Tree, node, gatefuncs, "fpga") function node:DoClick() self:SetExpanded(not self.m_bExpanded) end @@ -244,7 +239,7 @@ function Editor:InitComponents() local node = wiremodNode:AddNode(gatetype) node.Icon:SetImage("icon16/folder.png") - FillSubTree(self.C.Tree, node, gatefuncs, "wire") + FillSubTree(self, self.C.Tree, node, gatefuncs, "wire") function node:DoClick() self:SetExpanded(not self.m_bExpanded) end @@ -473,6 +468,26 @@ function Editor:GetTypeColor(type) end end +function Editor:PaintInput(x, y, type, name, ioSize) + surface.SetDrawColor(self:GetTypeColor(type)) + + surface.DrawRect(x, y, ioSize*2, ioSize) + + local tx, ty = surface.GetTextSize(name) + surface.SetTextPos(x-tx-ioSize*0.3, y+ioSize/2-ty/2) + surface.DrawText(name) +end + +function Editor:PaintOutput(x, y, type, name, ioSize) + surface.SetDrawColor(self:GetTypeColor(type)) + + surface.DrawRect(x, y, ioSize*2, ioSize) + + local tx, ty = surface.GetTextSize(name) + surface.SetTextPos(x+ioSize*2.3, y+ioSize/2-ty/2) + surface.DrawText(name) +end + function Editor:PaintNode(node) local gate = self:GetGate(node) @@ -495,45 +510,27 @@ function Editor:PaintNode(node) surface.SetTextColor(255, 255, 255) if gate.inputs then - for k, inputName in pairs(gate.inputs) do - local type = self:GetInputType(gate, k) - surface.SetDrawColor(self:GetTypeColor(type)) - -- This should rely on a function + for inputNum, inputName in pairs(gate.inputs) do local nx = x - size/2 - ioSize - local ny = y - ioSize/2 + (k-1) * size - surface.DrawRect(nx, ny, ioSize*2, ioSize) - - local tx, ty = surface.GetTextSize(inputName) - surface.SetTextPos(nx-tx-ioSize*0.3, ny+ioSize/2-ty/2) - surface.DrawText(inputName) + local ny = y - ioSize/2 + (inputNum-1) * size + + self:PaintInput(nx, ny, self:GetInputType(gate, inputNum), inputName, ioSize) end end -- Output if gate.outputs then - for k, outputName in pairs(gate.outputs) do - local type = self:GetOutputType(gate, k) - surface.SetDrawColor(self:GetTypeColor(type)) - + for outputNum, outputName in pairs(gate.outputs) do local nx = x + size/2 - ioSize - local ny = y - ioSize/2 + (k-1) * size - surface.DrawRect(nx, ny, ioSize*2, ioSize) - - local tx, ty = surface.GetTextSize(outputName) - surface.SetTextPos(nx+ioSize*2.3, ny+ioSize/2-ty/2) - surface.DrawText(outputName) + local ny = y - ioSize/2 + (outputNum-1) * size + + self:PaintOutput(nx, ny, self:GetOutputType(gate, outputNum), outputName, ioSize) end else - local type = self:GetOutputType(gate, 1) - surface.SetDrawColor(self:GetTypeColor(type)) - local nx = x + size/2 - ioSize local ny = y - ioSize/2 - surface.DrawRect(nx, ny, ioSize*2, ioSize) - - local tx, ty = surface.GetTextSize("Out") - surface.SetTextPos(nx+ioSize*2.3, ny+ioSize/2-ty/2) - surface.DrawText("Out") + + self:PaintOutput(nx, ny, self:GetOutputType(gate, 1), "Out", ioSize) end -- Body @@ -548,6 +545,18 @@ function Editor:PaintNode(node) local tx, ty = surface.GetTextSize(gate.name) surface.SetTextPos(x-tx/2, y-ty/2-size/1.2) surface.DrawText(gate.name) + + -- Input / value + if node.ioName then + local tx, ty = surface.GetTextSize(node.ioName) + surface.SetTextPos(x-tx/2, y-ty/2+size/1.2) + surface.DrawText(node.ioName) + elseif node.value then + local s = tostring(node.value) + local tx, ty = surface.GetTextSize(s) + surface.SetTextPos(x-tx/2, y-ty/2+size/1.2) + surface.DrawText(s) + end end function Editor:PaintNodes() diff --git a/todo.txt b/todo.txt index 4cbff6f942..3f76bb4708 100644 --- a/todo.txt +++ b/todo.txt @@ -1,21 +1,26 @@ FPGA Entity: Features: + Show more info (peak use, average use) + Limit usage + Check for errors during compilation + Improve execution + Optimize execution - Bugs: - Test using chips with multiple outputs - Test to make sure that order is correct +FPGA Tool: + Add a cool animation to the toolgun -FPGA Editor: - Features: - Shortcuts? + FPGA Editor: + Features: + Shortcuts? - Bugs: - Saving a file with capital letter fucks it up + Bugs: + Saving a file with capital letter fucks it up + sometimes nodes cant be removed - nice to have: - remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred + nice to have: + remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred FPGA Gates: From a0526bc3643fc9c6b638819a5df18062cecb7c09 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 08:35:13 +0100 Subject: [PATCH 038/236] Made node grabbing a lot nicer --- lua/wire/client/node_editor/nodeeditor.lua | 55 +++++++++++++++++----- lua/wire/fpga_gates/constants.lua | 9 ++++ 2 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 lua/wire/fpga_gates/constants.lua diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 88320525a3..2392533fc7 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -1,10 +1,24 @@ local Editor = {} +DefaultValueForType = { + NORMAL = 0, + VECTOR2 = nil, --no + VECTOR = Vector(0, 0, 0), + VECTOR4 = nil, --no + ANGLE = Angle(0, 0, 0), + STRING = "", + ARRAY = {}, + ENTITY = NULL, + RANGER = nil, + WIRELINK = nil +} + function Editor:Init() self.Position = {0, 0} self.Zoom = 1 self.DraggingWorld = false - self.DraggingGate = nil + self.DraggingNode = nil + self.DraggingOffset = {0, 0} self.DrawingConnection = false self.DrawingFromInput = false @@ -344,10 +358,23 @@ function Editor:GetNodeAt(x, y) local gx, gy = self:ScrToPos(x, y) for k, node in pairs(self.Nodes) do + local gate = self:GetGate(node) + + local amountOfInputs = 0 + if gate.inputs then + amountOfInputs = table.Count(gate.inputs) + end + local amountOfOutputs = 1 + if gate.outputs then + amountOfOutputs = table.Count(gate.outputs) + end + + local height = math.max(amountOfInputs, amountOfOutputs) + if gx < node.x - self.GateSize/2 then continue end if gx > node.x + self.GateSize/2 then continue end if gy < node.y - self.GateSize/2 then continue end - if gy > node.y + self.GateSize/2 then continue end + if gy > node.y - self.GateSize/2 + self.GateSize*height then continue end return k end @@ -546,11 +573,12 @@ function Editor:PaintNode(node) surface.SetTextPos(x-tx/2, y-ty/2-size/1.2) surface.DrawText(gate.name) - -- Input / value + -- Input if node.ioName then local tx, ty = surface.GetTextSize(node.ioName) surface.SetTextPos(x-tx/2, y-ty/2+size/1.2) surface.DrawText(node.ioName) + -- Constant elseif node.value then local s = tostring(node.value) local tx, ty = surface.GetTextSize(s) @@ -584,8 +612,8 @@ function Editor:Paint() if self.DraggingNode then local x, y = self:CursorPos() local gx, gy = self:ScrToPos(x, y) - self.Nodes[self.DraggingNode].x = gx - self.Nodes[self.DraggingNode].y = gy + self.Nodes[self.DraggingNode].x = gx + self.DraggingOffset[1] + self.Nodes[self.DraggingNode].y = gy + self.DraggingOffset[2] end -- drawing a connection if self.DrawingConnection then @@ -692,6 +720,9 @@ function Editor:CreateNode(type, gate) node.ioName = self:GetInputName() elseif gateInfo.isOutput then node.ioName = self:GetOutputName() + elseif gateInfo.isConstant then + local type = self:GetOutputType(gateInfo, 1) + node.value = DefaultValueForType[type] end print("Created " .. table.ToString(node, "node", false)) @@ -728,13 +759,15 @@ function Editor:OnMousePressed(code) local x, y = self:CursorPos() --NODE DRAGGING - local node = self:GetNodeAt(x, y) - if node then - self.DraggingNode = node + local nodeId = self:GetNodeAt(x, y) + if nodeId then + self.DraggingNode = nodeId + local gx, gy = self:ScrToPos(x, y) + self.DraggingOffset = {self.Nodes[nodeId].x - gx, self.Nodes[nodeId].y - gy} + else + --CONNECTION DRAWING + self:BeginDrawingConnection(x, y) end - - --CONNECTION DRAWING - self:BeginDrawingConnection(x, y) elseif code == MOUSE_RIGHT then -- PLANE DRAGGING self.DraggingWorld = true diff --git a/lua/wire/fpga_gates/constants.lua b/lua/wire/fpga_gates/constants.lua new file mode 100644 index 0000000000..67ac4eb25f --- /dev/null +++ b/lua/wire/fpga_gates/constants.lua @@ -0,0 +1,9 @@ +FPGAGateActions("Constant Values") + +FPGAGateActions["normal-constant"] = { + name = "Normal Constant", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"NORMAL"}, + isConstant = true +} \ No newline at end of file From 3d848335df428cb75c16572812c02baa7ffd4ba9 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 09:44:36 +0100 Subject: [PATCH 039/236] Inputs and outputs can now be named in the editor --- lua/entities/gmod_wire_fpga/init.lua | 2 + lua/wire/client/node_editor/nodeeditor.lua | 59 ++++++++++++++++++++-- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 701f8c9dbd..1a158fdf47 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -400,6 +400,8 @@ function ENT:Run(changedNodes) --gate value logic if gate.isInput then value = {self.InputValues[nodeId]} + elseif gate.isConstant then + value = {node.value} else local executeLater = false --if input hasnt arrived, send this node to the back of the queue diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 2392533fc7..d46db23dc7 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -841,13 +841,66 @@ function Editor:OnKeyCodePressed(code) if code == KEY_X then --Delete - local node = self:GetNodeAt(x, y) - if node then - self:DeleteNode(node) + local nodeId = self:GetNodeAt(x, y) + if nodeId then + self:DeleteNode(nodeId) + end + elseif code == KEY_D then + --Modify + local nodeId = self:GetNodeAt(x, y) + if nodeId then + local node = self.Nodes[nodeId] + local gate = self:GetGate(node) + + if gate.isInput or gate.isOutput then + self:OpenIONamingWindow(node, x, y) + end end end end +--EXTRA WINDOWS +function Editor:CreateIONamingWindow() + self.IONamingWindow = vgui.Create("DFrame", self) + local pnl = self.IONamingWindow + pnl:SetSize(200, 55) + pnl:ShowCloseButton(true) + pnl:SetDeleteOnClose(false) + pnl:MakePopup() + pnl:SetVisible(false) + pnl:SetTitle("Name input/output") + pnl:SetScreenLock(true) + do + local old = pnl.Close + function pnl.Close() + self.ForceDrawCursor = false + old(pnl) + end + end + + self.IONamingNameEntry = vgui.Create("DTextEntry", pnl) + --FindEntry:SetPos(30, 4) + self.IONamingNameEntry:Dock(BOTTOM) + self.IONamingNameEntry:SetSize(175, 20) + self.IONamingNameEntry:RequestFocus() +end + +function Editor:OpenIONamingWindow(node, x, y) + if not self.IONamingWindow then self:CreateIONamingWindow() end + self.IONamingWindow:SetVisible(true) + self.IONamingWindow:MakePopup() -- This will move it above the E2 editor if it is behind it. + self.ForceDrawCursor = true + + local px, py = self.parentpanel:GetPos() + self.IONamingWindow:SetPos(px+x+80, py+y+30) + + self.IONamingNameEntry:SetValue(node.ioName) + self.IONamingNameEntry.OnEnter = function(pnl) + node.ioName = pnl:GetValue() + pnl:RequestFocus() + pnl:GetParent():Close() + end +end vgui.Register("FPGAEditor", Editor, "Panel"); \ No newline at end of file From 0d66614b3537a8cf5fd8d6eac6fe44af9771ddfd Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 10:21:26 +0100 Subject: [PATCH 040/236] Added normal constants, and made them work during execution --- lua/entities/gmod_wire_fpga/init.lua | 26 ++++++---- lua/wire/client/node_editor/nodeeditor.lua | 55 +++++++++++++++++++++- 2 files changed, 71 insertions(+), 10 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 1a158fdf47..dfbfd21a7f 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -123,6 +123,7 @@ function ENT:CompileData(data) type = node.type, gate = node.gate, ioName = node.ioName, + value = node.value, } for input, connection in pairs(node.connections) do fromNode = connection[1] @@ -373,7 +374,11 @@ function ENT:Run(changedNodes) ----------------------------------------- --EXECUTION ----------------------------------------- + local calculations = 0 while not table.IsEmpty(nodeQueue) do + calculations = calculations + 1 + if calculations > 10000 then break end + if self.Debug then print() print(table.ToString(nodeQueue, "nodeQueue", false)) @@ -382,7 +387,6 @@ function ENT:Run(changedNodes) end local nodeId = table.remove(nodeQueue, 1) - table.insert(nodesVisited, nodeId) local node = self.Nodes[nodeId] --print(table.ToString(node.connections, "node.connections", false)) @@ -390,13 +394,6 @@ function ENT:Run(changedNodes) --get gate local gate = getGate(node) - --output logic - if gate.isOutput then - WireLib.TriggerOutput(self, node.ioName, self.Values[nodeId][1]) - if self.Debug then print(node.ioName .. " outputs " .. table.ToString(self.Values[nodeId], "", false)) end - continue - end - --gate value logic if gate.isInput then value = {self.InputValues[nodeId]} @@ -422,11 +419,22 @@ function ENT:Run(changedNodes) if self.Debug then print(table.ToString(self.Values[nodeId], "", false)) end - value = {gate.output(self.Gates[nodeId], unpack(self.Values[nodeId]))} + --output logic + if gate.isOutput then + WireLib.TriggerOutput(self, node.ioName, self.Values[nodeId][1]) + if self.Debug then print(node.ioName .. " outputs " .. table.ToString(self.Values[nodeId], "", false)) end + continue + else + --normal gates + value = {gate.output(self.Gates[nodeId], unpack(self.Values[nodeId]))} + end end if self.Debug then print(table.ToString(value, "output", false)) end + --for future reference, we've visited this node + nodesVisited[nodeId] = true + --propergate output value to inputs if node.connections then for outputNum, connections in pairs(node.connections) do diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index d46db23dc7..c9a6c985fb 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -854,13 +854,14 @@ function Editor:OnKeyCodePressed(code) if gate.isInput or gate.isOutput then self:OpenIONamingWindow(node, x, y) + elseif gate.isConstant then + self:OpenConstantSetWindow(node, x, y, gate.outputtypes[1]) end end end end --EXTRA WINDOWS - function Editor:CreateIONamingWindow() self.IONamingWindow = vgui.Create("DFrame", self) local pnl = self.IONamingWindow @@ -903,4 +904,56 @@ function Editor:OpenIONamingWindow(node, x, y) end end +function Editor:CreateConstantSetWindow() + self.ConstantSetWindow = vgui.Create("DFrame", self) + local pnl = self.ConstantSetWindow + pnl:SetSize(200, 55) + pnl:ShowCloseButton(true) + pnl:SetDeleteOnClose(false) + pnl:MakePopup() + pnl:SetVisible(false) + pnl:SetTitle("Set constant value") + pnl:SetScreenLock(true) + + + self.ConstantSetNormal = vgui.Create("DNumberWang", pnl) + self.ConstantSetNormal:Dock(BOTTOM) + self.ConstantSetNormal:SetSize(175, 20) + self.ConstantSetNormal:SetVisible(false) + self.ConstantSetString = vgui.Create("DTextEntry", pnl) + self.ConstantSetString:Dock(BOTTOM) + self.ConstantSetString:SetSize(175, 20) + self.ConstantSetString:SetVisible(false) + + + do + local old = pnl.Close + function pnl.Close() + self.ForceDrawCursor = false + old(pnl) + end + end +end + +function Editor:OpenConstantSetWindow(node, x, y, type) + if not self.ConstantSetWindow then self:CreateConstantSetWindow() end + self.ConstantSetWindow:SetVisible(true) + self.ConstantSetWindow:MakePopup() -- This will move it above the E2 editor if it is behind it. + self.ForceDrawCursor = true + + local px, py = self.parentpanel:GetPos() + self.ConstantSetWindow:SetPos(px+x+80, py+y+30) + + if type == "NORMAL" then + self.ConstantSetNormal:SetVisible(true) + self.ConstantSetNormal:SetValue(node.value) + self.ConstantSetNormal.OnEnter = function(pnl) + node.value = pnl:GetValue() + pnl:RequestFocus() + pnl:SetVisible(false) + pnl:GetParent():Close() + end + end +end + vgui.Register("FPGAEditor", Editor, "Panel"); \ No newline at end of file From b4da8117f4bbdc355188856289624088d352cb50 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 11:02:26 +0100 Subject: [PATCH 041/236] Added all constant values --- lua/wire/client/node_editor/nodeeditor.lua | 39 +++++++++++++++++++++- lua/wire/fpga_gates/constants.lua | 24 +++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index c9a6c985fb..a41abb6395 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -925,7 +925,6 @@ function Editor:CreateConstantSetWindow() self.ConstantSetString:SetSize(175, 20) self.ConstantSetString:SetVisible(false) - do local old = pnl.Close function pnl.Close() @@ -935,6 +934,11 @@ function Editor:CreateConstantSetWindow() end end +local function validateVector(string) + local x,y,z = string.match(string, "^ *([^%s,]+) *, *([^%s,]+) *, *([^%s,]+) *$") + return tonumber(x) ~= nil and tonumber(y) ~= nil and tonumber(z) ~= nil, x, y, z +end + function Editor:OpenConstantSetWindow(node, x, y, type) if not self.ConstantSetWindow then self:CreateConstantSetWindow() end self.ConstantSetWindow:SetVisible(true) @@ -953,6 +957,39 @@ function Editor:OpenConstantSetWindow(node, x, y, type) pnl:SetVisible(false) pnl:GetParent():Close() end + elseif type == "STRING" then + self.ConstantSetString:SetVisible(true) + self.ConstantSetString:SetValue(node.value) + self.ConstantSetString.OnEnter = function(pnl) + node.value = pnl:GetValue() + pnl:RequestFocus() + pnl:SetVisible(false) + pnl:GetParent():Close() + end + elseif type == "VECTOR" then + self.ConstantSetString:SetVisible(true) + self.ConstantSetString:SetValue(node.value.x .. ", " .. node.value.y .. ", " .. node.value.z) + self.ConstantSetString.OnEnter = function(pnl) + valid, x, y, z = validateVector(pnl:GetValue()) + if valid then + node.value = Vector(x, y, z) + pnl:RequestFocus() + pnl:SetVisible(false) + pnl:GetParent():Close() + end + end + elseif type == "ANGLE" then + self.ConstantSetString:SetVisible(true) + self.ConstantSetString:SetValue(node.value.p .. ", " .. node.value.y .. ", " .. node.value.r) + self.ConstantSetString.OnEnter = function(pnl) + valid, p, y, r = validateVector(pnl:GetValue()) + if valid then + node.value = Angle(p, y, r) + pnl:RequestFocus() + pnl:SetVisible(false) + pnl:GetParent():Close() + end + end end end diff --git a/lua/wire/fpga_gates/constants.lua b/lua/wire/fpga_gates/constants.lua index 67ac4eb25f..f2f0d5936a 100644 --- a/lua/wire/fpga_gates/constants.lua +++ b/lua/wire/fpga_gates/constants.lua @@ -6,4 +6,28 @@ FPGAGateActions["normal-constant"] = { outputs = {"Out"}, outputtypes = {"NORMAL"}, isConstant = true +} + +FPGAGateActions["vector-constant"] = { + name = "3D Vector Constant", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"VECTOR"}, + isConstant = true +} + +FPGAGateActions["angle-constant"] = { + name = "Angle Constant", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"ANGLE"}, + isConstant = true +} + +FPGAGateActions["string-constant"] = { + name = "String Constant", + inputs = {}, + outputs = {"Out"}, + outputtypes = {"STRING"}, + isConstant = true } \ No newline at end of file From f0268a3366ac4b1f8978f854025adcc275b500bc Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 11:55:34 +0100 Subject: [PATCH 042/236] Added infinite recursion protection --- lua/entities/gmod_wire_fpga/cl_init.lua | 47 +++++++++++++++++----- lua/entities/gmod_wire_fpga/init.lua | 29 ++++++++++--- lua/wire/client/node_editor/nodeeditor.lua | 4 +- todo.txt | 6 +++ 4 files changed, 70 insertions(+), 16 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/cl_init.lua b/lua/entities/gmod_wire_fpga/cl_init.lua index d5d1cf1dc2..2ce9032d80 100644 --- a/lua/entities/gmod_wire_fpga/cl_init.lua +++ b/lua/entities/gmod_wire_fpga/cl_init.lua @@ -6,15 +6,29 @@ function ENT:GetWorldTipBodySize() local w_total,h_total = surface.GetTextSize(data.name) - local timebench = data.timebench + local infiniteLoop = data.infiniteLoop - -- cpu time text - local str = string.format("cpu time: %ius", timebench * 1000000) + if infiniteLoop then + local str = "Halted (inf. recursion)" + local w,h = surface.GetTextSize(str) + w_total = math.max(w_total, w) + h_total = h_total + h + 10 + end + + local timebench = data.timebench + local timebenchPeak = data.timebenchPeak + -- cpu time text + local str = string.format("cpu time: %ius", timebenchPeak * 1000000) + local w,h = surface.GetTextSize(str) + w_total = math.max(w_total, w) + h_total = h_total + h + 10 + + local str = string.format("avg. cpu time: %ius", timebench * 1000000) local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) - h_total = h_total + h + 10 - + h_total = h_total + h + 10 + return w_total, h_total end @@ -24,7 +38,10 @@ function ENT:DrawWorldTipBody( pos ) local name = data.name - local white = Color(255,255,255,255) + local white = Color(255,255,255,255) + local error = Color(255,0,0,255) + local cputime = Color(150,150,255,255) + local cputimeavg = Color(100,255,150,255) local black = Color(0,0,0,255) local w_total, yoffset = 0, pos.min.y @@ -46,12 +63,24 @@ function ENT:DrawWorldTipBody( pos ) surface.SetDrawColor(black) surface.DrawLine(pos.min.x, yoffset, pos.max.x, yoffset) + + -- Error message + if data.infiniteLoop then + local str = "Halted (inf. recursion)" + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, error, TEXT_ALIGN_CENTER) + yoffset = yoffset + 27 + end + ------------------- -- prfcount/benchmarking/etc ------------------- - local timebench = data.timebench + local timebench = data.timebench + local timebenchPeak = data.timebenchPeak + -- cpu peak time text + local str = string.format("cpu time: %ius", timebenchPeak * 1000000) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, cputime, TEXT_ALIGN_CENTER) -- cpu time text - local str = string.format("cpu time: %ius", timebench * 1000000) - draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, white, TEXT_ALIGN_CENTER) + local str = string.format("avg. cpu time: %ius", timebench * 1000000) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8 + 27, cputimeavg, TEXT_ALIGN_CENTER) end \ No newline at end of file diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index dfbfd21a7f..5d39707394 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -53,12 +53,16 @@ function ENT:UpdateOverlay(clear) if clear then self:SetOverlayData( { name = "(none)", - timebench = 0 + timebench = 0, + timebenchPeak = 0, + infiniteLoop = false, }) else self:SetOverlayData( { name = self.name, - timebench = self.timebench / (self.ExecutionInterval / self.TickRate) + timebench = self.timebench / (self.ExecutionInterval / self.TickRate), + timebenchPeak = self.time, + infiniteLoop = self.InfiniteLoop, }) end end @@ -78,6 +82,7 @@ function ENT:Initialize() self.TickRate = 0.015 self.ExecutionInterval = 0.015 + self.InfiniteLoop = false self.Data = nil @@ -239,6 +244,8 @@ end function ENT:Reset() --MsgC(Color(0, 100, 255), "Resetting FPGA\n") + self.InfiniteLoop = false + --Set gates to default values again self.Values = {} for nodeId, node in pairs(self.Nodes) do @@ -292,9 +299,9 @@ function ENT:Think() --Time benchmarking self.timebench = self.timebench * 0.95 + self.time * 0.05 - self.time = 0 - + self:UpdateOverlay(false) + self.time = 0 return true end @@ -375,9 +382,10 @@ function ENT:Run(changedNodes) --EXECUTION ----------------------------------------- local calculations = 0 - while not table.IsEmpty(nodeQueue) do + local loopDetectionNodeId = nil + while not table.IsEmpty(nodeQueue) and not self.InfiniteLoop do calculations = calculations + 1 - if calculations > 10000 then break end + if calculations > 50 then break end if self.Debug then print() @@ -400,6 +408,11 @@ function ENT:Run(changedNodes) elseif gate.isConstant then value = {node.value} else + if nodeId == loopDetectionNodeId then + --infinite loop... + self.InfiniteLoop = true + end + local executeLater = false --if input hasnt arrived, send this node to the back of the queue for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do @@ -411,11 +424,15 @@ function ENT:Run(changedNodes) --send this node to the back of the queue (potential infinite looping???) table.insert(nodeQueue, nodeId) executeLater = true + if loopDetectionNodeId == nil then + loopDetectionNodeId = nodeId + end break end end --skip node if executeLater then continue end + loopDetectionNodeId = nil if self.Debug then print(table.ToString(self.Values[nodeId], "", false)) end diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index a41abb6395..7ea5b234cd 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -697,6 +697,8 @@ end function Editor:FreeName(name) local type = string.sub(name, 1, 1) local index = string.sub(name, 2, -1) + + if tonumber(index) == nil then return end --print("freeing " .. type .. tonumber(index)) if type == "I" then self.UsedInputNames[tonumber(index)] = false @@ -942,7 +944,7 @@ end function Editor:OpenConstantSetWindow(node, x, y, type) if not self.ConstantSetWindow then self:CreateConstantSetWindow() end self.ConstantSetWindow:SetVisible(true) - self.ConstantSetWindow:MakePopup() -- This will move it above the E2 editor if it is behind it. + self.ConstantSetWindow:MakePopup() -- This will move it above the FPGA editor if it is behind it. self.ForceDrawCursor = true local px, py = self.parentpanel:GetPos() diff --git a/todo.txt b/todo.txt index 3f76bb4708..c7b0a1996c 100644 --- a/todo.txt +++ b/todo.txt @@ -7,6 +7,11 @@ FPGA Entity: Improve execution Optimize execution + Loops dont work (memory output feeds into memory input) + Update: Loops now get halted, but there should still be a way to make loops (last value gate?) + Maybe add the various "luxuries" that e2 have (changed and last notably) + Should these have wildcard types? + FPGA Tool: Add a cool animation to the toolgun @@ -21,6 +26,7 @@ FPGA Tool: nice to have: remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred + create input, rename, remove. name doesnt get freed up FPGA Gates: From 9e5d11010cb2f956c480ac8f243cdd44917992a0 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 9 Jan 2021 23:02:45 +0100 Subject: [PATCH 043/236] Update todo.txt --- todo.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/todo.txt b/todo.txt index c7b0a1996c..686113ae60 100644 --- a/todo.txt +++ b/todo.txt @@ -19,6 +19,9 @@ FPGA Tool: FPGA Editor: Features: Shortcuts? + Grid + Mark selection, move all gates (or delete all) + copy paste (with compatible with selection) Bugs: Saving a file with capital letter fucks it up From fcaf7fb4c9a90101cde940367b79a78983698e3f Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 13:35:58 +0100 Subject: [PATCH 044/236] Attempted to implement "last" gate. all code commented out for future use --- lua/entities/gmod_wire_fpga/init.lua | 1 + lua/wire/client/node_editor/nodeeditor.lua | 93 +++++++++------------- lua/wire/fpga_gates/execution.lua | 31 ++++++++ todo.txt | 8 +- 4 files changed, 75 insertions(+), 58 deletions(-) create mode 100644 lua/wire/fpga_gates/execution.lua diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 5d39707394..448e84bc43 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -326,6 +326,7 @@ function ENT:Run(changedNodes) local activeNodesQueue = {} local i = 1 for k, id in pairs(changedNodes) do + --if self.Nodes[id].neverActive then continue end activeNodesQueue[i] = id activeNodes[id] = true i = i + 1 diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 7ea5b234cd..06bc9b9380 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -13,6 +13,28 @@ DefaultValueForType = { WIRELINK = nil } +TypeColor = { + NORMAL = Color(190, 190, 255, 255), --Very light blue nearing white + VECTOR2 = Color(150, 255, 255, 255), --Light blue + VECTOR = Color(70, 160, 255, 255), --Blue + VECTOR4 = Color(0, 50, 255, 255), --Dark blue + ANGLE = Color(100, 200, 100, 255), --Light green + STRING = Color(250, 160, 90, 255), --Orange + ARRAY = Color(20, 110, 20, 255), --Dark green + ENTITY = Color(255, 100, 100, 255), --Dark red + RANGER = Color(130, 100, 60, 255), --Brown + WIRELINK = Color(200, 80, 200, 255), --Deep purple +} + +WildColor = { + Color(255, 0, 0, 255), + Color(255, 127, 0, 255), + Color(255, 255, 0, 255), + Color(0, 255, 0, 255), + Color(0, 0, 255, 255), + Color(75, 0, 130, 255), +} + function Editor:Init() self.Position = {0, 0} self.Zoom = 1 @@ -35,18 +57,6 @@ function Editor:Init() self.NodeColor = Color(100, 100, 100, 255) self.ConnectionColor = Color(200, 200, 200, 255) - self.NormalColor = Color(190, 190, 255, 255) --Very light blue nearing white - self.Vector2Color = Color(150, 255, 255, 255) --Light blue - self.VectorColor = Color(70, 160, 255, 255) --Blue - self.Vector4Color = Color(0, 50, 255, 255) --Dark blue - self.AngleColor = Color(100, 200, 100, 255) --Light green - self.StringColor = Color(250, 160, 90, 255) --Orange - - self.ArrayColor = Color(20, 110, 20, 255) --Dark green - self.EntityColor = Color(255, 100, 100, 255) --Dark red - self.RangerColor = Color(130, 100, 60, 255) --Brown - self.WirelinkColor = Color(200, 80, 200, 255) --Deep purple - self.UsedInputNames = {} self.UsedOutputNames = {} @@ -92,19 +102,8 @@ surface.CreateFont( "IO", { additive = false, outline = false, }) --- ceil = { --- label = function: 0x01eca99bda28, --- group = "Arithmetic", --- is_banned = false, --- name = "Ceiling (Round up)", --- output = function: 0x01eca99bd9f8, --- inputs = { --- "A", --- }, --- }, -- COMPONENTS - function Editor:InitComponents() self.C = {} @@ -469,35 +468,16 @@ function Editor:PaintConnections() end end -function Editor:GetTypeColor(type) - if type == "NORMAL" then - return self.NormalColor - elseif type == "VECTOR2" then - return self.Vector2Color - elseif type == "VECTOR" then - return self.VectorColor - elseif type == "VECTOR4" then - return self.Vector4Color - elseif type == "ANGLE" then - return self.AngleColor - elseif type == "STRING" then - return self.StringColor - elseif type == "ARRAY" then - return self.ArrayColor - elseif type == "ENTITY" then - return self.EntityColor - elseif type == "RANGER" then - return self.RangerColor - elseif type == "WIRELINK" then - return self.WirelinkColor - else - return Color(0,0,0,255) - end -end - function Editor:PaintInput(x, y, type, name, ioSize) - surface.SetDrawColor(self:GetTypeColor(type)) - + -- if type == "WILD" then + -- local i = 1 + -- for k, color in pairs(WildColor) do + -- surface.SetDrawColor(color) + -- surface.DrawRect(x, y + ioSize/6 * i, ioSize*2, ioSize/6) + -- i = i + 1 + -- end + -- else + surface.SetDrawColor(TypeColor[type]) surface.DrawRect(x, y, ioSize*2, ioSize) local tx, ty = surface.GetTextSize(name) @@ -506,8 +486,11 @@ function Editor:PaintInput(x, y, type, name, ioSize) end function Editor:PaintOutput(x, y, type, name, ioSize) - surface.SetDrawColor(self:GetTypeColor(type)) - + -- if type == "LINKED" then + -- surface.SetDrawColor(TypeColor["NORMAL"]) + -- surface.DrawRect(x, y, ioSize*2, ioSize) + -- else + surface.SetDrawColor(TypeColor[type]) surface.DrawRect(x, y, ioSize*2, ioSize) local tx, ty = surface.GetTextSize(name) @@ -804,7 +787,7 @@ function Editor:OnDrawConnectionFinished(x, y) local inputType = self:GetInputType(self:GetGate(inputNode), inputNum) local outputType = self:GetOutputType(self:GetGate(outputNode), self.DrawingConnectionFrom[2]) - if inputType == outputType then + if inputType == outputType or inputType == "WILD" then --connect up inputNode.connections[inputNum] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} end @@ -820,7 +803,7 @@ function Editor:OnDrawConnectionFinished(x, y) local inputType = self:GetInputType(self:GetGate(inputNode), self.DrawingConnectionFrom[2]) local outputType = self:GetOutputType(self:GetGate(outputNode), outputNum) - if inputType == outputType then + if inputType == outputType or inputType == "WILD" then --connect up inputNode.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputNum} end diff --git a/lua/wire/fpga_gates/execution.lua b/lua/wire/fpga_gates/execution.lua new file mode 100644 index 0000000000..dee61f9552 --- /dev/null +++ b/lua/wire/fpga_gates/execution.lua @@ -0,0 +1,31 @@ +FPGAGateActions("Execution") + +-- FPGAGateActions["execution-last-wild"] = { +-- name = "Last", +-- inputs = {"A"}, +-- inputtypes = {"WILD"}, +-- outputs = {"Out"}, +-- outputtypes = {"LINKED"}, +-- neverActive = true, +-- output = function(gate) +-- return gate.value +-- end, +-- postCycle = function(gate, value) +-- gate.value = value +-- end, +-- } + +-- FPGAGateActions["execution-last-normal"] = { +-- name = "Normal Last", +-- inputs = {"A"}, +-- inputtypes = {"NORMAL"}, +-- outputs = {"Out"}, +-- outputtypes = {"NORMAL"}, +-- neverActive = true, +-- output = function(gate, value) +-- return gate.value +-- end, +-- postCycle = function(gate) +-- gate.value = gate.memory +-- end, +-- } \ No newline at end of file diff --git a/todo.txt b/todo.txt index 686113ae60..80624f4ae1 100644 --- a/todo.txt +++ b/todo.txt @@ -9,8 +9,7 @@ FPGA Entity: Loops dont work (memory output feeds into memory input) Update: Loops now get halted, but there should still be a way to make loops (last value gate?) - Maybe add the various "luxuries" that e2 have (changed and last notably) - Should these have wildcard types? + FPGA Tool: @@ -33,4 +32,7 @@ FPGA Tool: FPGA Gates: - \ No newline at end of file + Maybe add the various "luxuries" that e2 have (changed and last notably) + Should these have wildcard types? + (this is pretty fucking hard???) + figure out logic of how exactly a "last" gate should work, since its pretty complicated \ No newline at end of file From d484ddeb7f1cdd7befeef43c9cecf8ad339f2473 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 14:30:48 +0100 Subject: [PATCH 045/236] Made error messages better --- lua/entities/gmod_wire_fpga/cl_init.lua | 30 +++++++++---------- lua/entities/gmod_wire_fpga/init.lua | 40 ++++++++++++++++++++----- 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/cl_init.lua b/lua/entities/gmod_wire_fpga/cl_init.lua index 2ce9032d80..84ca9e9073 100644 --- a/lua/entities/gmod_wire_fpga/cl_init.lua +++ b/lua/entities/gmod_wire_fpga/cl_init.lua @@ -6,10 +6,8 @@ function ENT:GetWorldTipBodySize() local w_total,h_total = surface.GetTextSize(data.name) - local infiniteLoop = data.infiniteLoop - - if infiniteLoop then - local str = "Halted (inf. recursion)" + if data.errorMessage then + local str = data.errorMessage local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) h_total = h_total + h + 10 @@ -22,12 +20,12 @@ function ENT:GetWorldTipBodySize() local str = string.format("cpu time: %ius", timebenchPeak * 1000000) local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) - h_total = h_total + h + 10 + h_total = h_total + h + 5 local str = string.format("avg. cpu time: %ius", timebench * 1000000) local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) - h_total = h_total + h + 10 + h_total = h_total + h + 5 return w_total, h_total end @@ -57,20 +55,20 @@ function ENT:DrawWorldTipBody( pos ) draw.DrawText(name, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 10, white, TEXT_ALIGN_CENTER) render.SetScissorRect(0, 0, ScrW(), ScrH(), false) - w_total = math.max(w_total, w) - yoffset = yoffset + h - - surface.SetDrawColor(black) - surface.DrawLine(pos.min.x, yoffset, pos.max.x, yoffset) - + w_total = math.max(w_total, w) + yoffset = yoffset + 25 -- Error message - if data.infiniteLoop then - local str = "Halted (inf. recursion)" + if data.errorMessage then + local str = "("..data.errorMessage..")" draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, error, TEXT_ALIGN_CENTER) - yoffset = yoffset + 27 + yoffset = yoffset + 30 end + --Line + surface.SetDrawColor(black) + surface.DrawLine(pos.min.x, yoffset, pos.max.x, yoffset) + ------------------- -- prfcount/benchmarking/etc ------------------- @@ -82,5 +80,5 @@ function ENT:DrawWorldTipBody( pos ) draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, cputime, TEXT_ALIGN_CENTER) -- cpu time text local str = string.format("avg. cpu time: %ius", timebench * 1000000) - draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8 + 27, cputimeavg, TEXT_ALIGN_CENTER) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8 + 25, cputimeavg, TEXT_ALIGN_CENTER) end \ No newline at end of file diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 448e84bc43..f68be23b7c 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -55,18 +55,27 @@ function ENT:UpdateOverlay(clear) name = "(none)", timebench = 0, timebenchPeak = 0, - infiniteLoop = false, + errorMessage = nil, }) else self:SetOverlayData( { name = self.name, timebench = self.timebench / (self.ExecutionInterval / self.TickRate), timebenchPeak = self.time, - infiniteLoop = self.InfiniteLoop, + errorMessage = self.errorMessage, }) end end +function ENT:Error(message, overlay) + self:SetColor(Color(255, 0, 0, self:GetColor().a)) + self.error = true + self.errorMessage = overlay + self:UpdateOverlay(false) + + WireLib.ClientError(message, WireLib.GetOwner(self)) +end + -------------------------------------------------------- --INIT -------------------------------------------------------- @@ -79,10 +88,11 @@ function ENT:Initialize() self.time = 0 self.timebench = 0 + self.error = false + self.errorMessage = nil self.TickRate = 0.015 self.ExecutionInterval = 0.015 - self.InfiniteLoop = false self.Data = nil @@ -108,6 +118,10 @@ function ENT:Initialize() --self:SetColor(Color(255, 0, 0, self:GetColor().a)) end +function ENT:ValidateData(data) + return true +end + -- Node 'compiler' -- Flip connections, generate input output tabels function ENT:CompileData(data) @@ -191,6 +205,16 @@ function ENT:Upload(data) self.timebench = 0 self:UpdateOverlay(false) + --validate + local valid = self:ValidateData(data) + if not valid then + self:Error("FPGA: Failed to validate on server", "Failed to validate") + self.Inputs = WireLib.AdjustSpecialInputs(self, {}, {}, "") + self.Outputs = WireLib.AdjustSpecialOutputs(self, {}, {}, "") + return + end + + --compile self:CompileData(data) @@ -243,8 +267,7 @@ end -------------------------------------------------------- function ENT:Reset() --MsgC(Color(0, 100, 255), "Resetting FPGA\n") - - self.InfiniteLoop = false + if self.error then return end --Set gates to default values again self.Values = {} @@ -288,6 +311,8 @@ function ENT:TriggerInput(iname, value) end function ENT:Think() + if self.error then return end + BaseClass.Think(self) self:NextThink(CurTime()+self.ExecutionInterval) @@ -384,7 +409,7 @@ function ENT:Run(changedNodes) ----------------------------------------- local calculations = 0 local loopDetectionNodeId = nil - while not table.IsEmpty(nodeQueue) and not self.InfiniteLoop do + while not table.IsEmpty(nodeQueue) do calculations = calculations + 1 if calculations > 50 then break end @@ -411,7 +436,8 @@ function ENT:Run(changedNodes) else if nodeId == loopDetectionNodeId then --infinite loop... - self.InfiniteLoop = true + self:Error("FPGA: Execution stuck in infinite loop", "Infinite loop") + break end local executeLater = false From bdd3ca2abf0d4bc893af8b9ada22f57977db6934 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 14:47:04 +0100 Subject: [PATCH 046/236] Fixed client overlay --- lua/entities/gmod_wire_fpga/cl_init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/cl_init.lua b/lua/entities/gmod_wire_fpga/cl_init.lua index 84ca9e9073..794e3640c2 100644 --- a/lua/entities/gmod_wire_fpga/cl_init.lua +++ b/lua/entities/gmod_wire_fpga/cl_init.lua @@ -20,12 +20,12 @@ function ENT:GetWorldTipBodySize() local str = string.format("cpu time: %ius", timebenchPeak * 1000000) local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) - h_total = h_total + h + 5 + h_total = h_total + h + 10 local str = string.format("avg. cpu time: %ius", timebench * 1000000) local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) - h_total = h_total + h + 5 + h_total = h_total + h + 10 return w_total, h_total end @@ -56,12 +56,12 @@ function ENT:DrawWorldTipBody( pos ) render.SetScissorRect(0, 0, ScrW(), ScrH(), false) w_total = math.max(w_total, w) - yoffset = yoffset + 25 + yoffset = yoffset + h -- Error message if data.errorMessage then local str = "("..data.errorMessage..")" - draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, error, TEXT_ALIGN_CENTER) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset, error, TEXT_ALIGN_CENTER) yoffset = yoffset + 30 end From ff17cbb11fa3fdecc271736333f72ace462d1d6f Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 15:15:36 +0100 Subject: [PATCH 047/236] Added before-compilation validation on serverside --- lua/entities/gmod_wire_fpga/init.lua | 81 +++++++++++++++++++++++++--- todo.txt | 11 +++- 2 files changed, 85 insertions(+), 7 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index f68be23b7c..56bbe0eefb 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -21,6 +21,14 @@ local function getInputType(gate, inputNum) end end +local function getOutputType(gate, outputNum) + if gate.outputtypes then + return gate.outputtypes[outputNum] or "NORMAL" + else + return "NORMAL" + end +end + DefaultValueForType = { NORMAL = 0, VECTOR2 = nil, --no @@ -119,7 +127,60 @@ function ENT:Initialize() end function ENT:ValidateData(data) - return true + --Check if nodes are even there + if not data.Nodes then return "missing nodes" end + + --Check that gates exist + --Check if gate is banned + --Check that there are no duplicate input names, or duplicate output names + local connections = {} --Make connection table for later use + local inputNames = {} + local outputNames = {} + for nodeId, node in pairs(data.Nodes) do + local gate = getGate(node) + + if gate == nil then return "invalid gate" end + if gate.is_banned then return "banned gate" end + + if gate.isInput then + if not node.ioName then return "missing input name" end + if inputNames[node.ioName] then return "duplicate input name" end + inputNames[node.ioName] = true + elseif gate.isOutput then + if not node.ioName then return "missing output name" end + if outputNames[node.ioName] then return "duplicate output name" end + outputNames[node.ioName] = true + end + + connections[nodeId] = node.connections + end + + --Check for out of bounds input/output + --Type Check + --Check that connections are valid (that the destination node exists) + for nodeId, nodeConnections in pairs(connections) do + local inGate = getGate(data.Nodes[nodeId]) + + for inputNum, connection in pairs(nodeConnections) do + local outNode = data.Nodes[connection[1]] + if not outNode then return "connection exists to invalid node" end + local outGate = getGate(outNode) + + --bound check + if inputNum < 1 or inputNum > #inGate.inputs then return "connection on nonexistant input" end + if outGate.outputs then + if connection[2] < 1 or connection[2] > #outGate.outputs then return "connection on nonexistant output" end + else + if connection[2] != 1 then return "connection on nonexistant output" end + end + + --type check + if getInputType(inGate, inputNum) != getOutputType(outGate, outputNum) then return "type mismatch between input and output" end + end + end + + --no errors + return nil end -- Node 'compiler' @@ -199,16 +260,24 @@ end function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") - self.name = data.Name - self.ExecutionInterval = math.max(data.ExecutionInterval, self.TickRate) + if data.Name then + self.name = data.Name + else + self.name = "(corrupt)" + end + if data.ExecutionInterval then + self.ExecutionInterval = math.max(data.ExecutionInterval, self.TickRate) + else + self.ExecutionInterval = 0.1 + end self.time = 0 self.timebench = 0 self:UpdateOverlay(false) --validate - local valid = self:ValidateData(data) - if not valid then - self:Error("FPGA: Failed to validate on server", "Failed to validate") + local invalid = self:ValidateData(data) + if invalid then + self:Error("FPGA: Failed to validate on server, "..invalid, "Failed to validate") self.Inputs = WireLib.AdjustSpecialInputs(self, {}, {}, "") self.Outputs = WireLib.AdjustSpecialOutputs(self, {}, {}, "") return diff --git a/todo.txt b/todo.txt index 80624f4ae1..73a0244f90 100644 --- a/todo.txt +++ b/todo.txt @@ -2,13 +2,22 @@ FPGA Entity: Features: Show more info (peak use, average use) Limit usage - Check for errors during compilation Improve execution Optimize execution Loops dont work (memory output feeds into memory input) Update: Loops now get halted, but there should still be a way to make loops (last value gate?) + infinite loop detection is fucked + + Check for errors during compilation + Check that gates exist + Check for out of bounds input/output + Type Check + Check that connections are valid (that the destination node exists) + + + Check if gate is banned..? From 22ef11374ad0832016fe29945ba49466905dcd5c Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 15:20:31 +0100 Subject: [PATCH 048/236] Fixed infinite loop detection --- lua/entities/gmod_wire_fpga/init.lua | 7 ++++--- todo.txt | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 56bbe0eefb..34529382b4 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -277,7 +277,7 @@ function ENT:Upload(data) --validate local invalid = self:ValidateData(data) if invalid then - self:Error("FPGA: Failed to validate on server, "..invalid, "Failed to validate") + self:Error("FPGA: Failed to validate on server, "..invalid, "failed to validate") self.Inputs = WireLib.AdjustSpecialInputs(self, {}, {}, "") self.Outputs = WireLib.AdjustSpecialOutputs(self, {}, {}, "") return @@ -505,7 +505,7 @@ function ENT:Run(changedNodes) else if nodeId == loopDetectionNodeId then --infinite loop... - self:Error("FPGA: Execution stuck in infinite loop", "Infinite loop") + self:Error("FPGA: Execution stuck in infinite loop", "infinite loop") break end @@ -528,7 +528,6 @@ function ENT:Run(changedNodes) end --skip node if executeLater then continue end - loopDetectionNodeId = nil if self.Debug then print(table.ToString(self.Values[nodeId], "", false)) end @@ -543,6 +542,8 @@ function ENT:Run(changedNodes) end end + loopDetectionNodeId = nil + if self.Debug then print(table.ToString(value, "output", false)) end --for future reference, we've visited this node diff --git a/todo.txt b/todo.txt index 73a0244f90..02160b81f3 100644 --- a/todo.txt +++ b/todo.txt @@ -8,7 +8,6 @@ FPGA Entity: Loops dont work (memory output feeds into memory input) Update: Loops now get halted, but there should still be a way to make loops (last value gate?) - infinite loop detection is fucked Check for errors during compilation Check that gates exist From 4b2f843ca1dcfb09deaef5433fdb526e033010ce Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 15:46:20 +0100 Subject: [PATCH 049/236] Added cpu time limits --- lua/entities/gmod_wire_fpga/init.lua | 26 ++++++++++++++++++++++++++ lua/entities/gmod_wire_fpga/shared.lua | 5 ++++- todo.txt | 9 +++------ 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 34529382b4..7d24f8b259 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -55,6 +55,25 @@ local function getDefaultValues(node) return values end +--CONVAR +fpga_quota_avg = nil +fpga_quota_spike = nil + +do + local wire_fpga_quota_avg = GetConVar("wire_fpga_quota_avg") + local wire_fpga_quota_spike = GetConVar("wire_fpga_quota_spike") + + local function updateQuotas() + fpga_quota_avg = wire_fpga_quota_avg:GetInt() * 0.000001 + fpga_quota_spike = wire_fpga_quota_spike:GetInt() * 0.000001 + end + + cvars.AddChangeCallback("wire_fpga_quota_avg", updateQuotas) + cvars.AddChangeCallback("wire_fpga_quota_spike", updateQuotas) + updateQuotas() +end + + function ENT:UpdateOverlay(clear) @@ -394,6 +413,13 @@ function ENT:Think() --Time benchmarking self.timebench = self.timebench * 0.95 + self.time * 0.05 + --Limiting + if self.timebench > fpga_quota_avg then + self:Error("FPGA: Exceeded average cpu time limit", "avg cpu time limit exceeded") + elseif self.time > fpga_quota_spike then + self:Error("FPGA: Exceeded spike cpu time limit", "spike cpu time limit exceeded") + end + self:UpdateOverlay(false) self.time = 0 return true diff --git a/lua/entities/gmod_wire_fpga/shared.lua b/lua/entities/gmod_wire_fpga/shared.lua index afe48bc447..b2c45714be 100644 --- a/lua/entities/gmod_wire_fpga/shared.lua +++ b/lua/entities/gmod_wire_fpga/shared.lua @@ -6,4 +6,7 @@ ENT.Contact = "https://steamcommunity.com/id/lysdal1234/" ENT.Purpose = "" ENT.Instructions = "" -ENT.WireDebugName = "FPGA" \ No newline at end of file +ENT.WireDebugName = "FPGA" + +CreateConVar("wire_fpga_quota_avg", "2000", {FCVAR_REPLICATED}) +CreateConVar("wire_fpga_quota_spike", "5000", {FCVAR_REPLICATED}) \ No newline at end of file diff --git a/todo.txt b/todo.txt index 02160b81f3..3be2b201be 100644 --- a/todo.txt +++ b/todo.txt @@ -1,21 +1,18 @@ FPGA Entity: Features: - Show more info (peak use, average use) - Limit usage - Improve execution Optimize execution Loops dont work (memory output feeds into memory input) Update: Loops now get halted, but there should still be a way to make loops (last value gate?) - Check for errors during compilation + + Test: + Check for errors during compilation (Hasnt been tested, but is implemented now) Check that gates exist Check for out of bounds input/output Type Check Check that connections are valid (that the destination node exists) - - Check if gate is banned..? From 407c3a9adcb6ee53969e2648ee2b9249da7b70aa Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 16:05:50 +0100 Subject: [PATCH 050/236] Improved editor node creation a bit --- lua/wire/client/node_editor/nodeeditor.lua | 20 ++++++++++++++++---- todo.txt | 3 +-- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 06bc9b9380..50c450e4c2 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -50,6 +50,8 @@ function Editor:Init() self.LastMousePos = {0, 0} self.MouseDown = false + self.SelectedGateInMenu = nil + self.GateSize = 5 self.IOSize = 2 @@ -179,7 +181,8 @@ function Editor:InitComponents() node2.name = gate.name node2.action = action function node2:DoClick() - editor:CreateNode(type, self.action) + --editor:CreateNode(type, self.action) + editor.SelectedGateInMenu = {type = type, gate = self.action} end node2.Icon:SetImage("icon16/newspaper.png") end @@ -690,12 +693,12 @@ function Editor:FreeName(name) end end -function Editor:CreateNode(type, gate) +function Editor:CreateNode(type, gate, x, y) node = { type = type, gate = gate, - x = self.Position[1], - y = self.Position[2], + x = x, + y = y, connections = {} } @@ -830,6 +833,15 @@ function Editor:OnKeyCodePressed(code) if nodeId then self:DeleteNode(nodeId) end + elseif code == KEY_C then + --Create + if self.SelectedGateInMenu then + local gx, gy = self:ScrToPos(x, y) + self:CreateNode(self.SelectedGateInMenu.type, + self.SelectedGateInMenu.gate, + gx, + gy) + end elseif code == KEY_D then --Modify local nodeId = self:GetNodeAt(x, y) diff --git a/todo.txt b/todo.txt index 3be2b201be..6954dbe399 100644 --- a/todo.txt +++ b/todo.txt @@ -3,8 +3,7 @@ FPGA Entity: Improve execution Optimize execution - Loops dont work (memory output feeds into memory input) - Update: Loops now get halted, but there should still be a way to make loops (last value gate?) + Add mechanism such that loops are possible Test: From f1d524be7b6b25dc82f5c839697637864058616d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 11 Jan 2021 16:56:42 +0100 Subject: [PATCH 051/236] Update nodeeditor.lua --- lua/wire/client/node_editor/nodeeditor.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 50c450e4c2..5f60c1fc15 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -713,13 +713,13 @@ function Editor:CreateNode(type, gate, x, y) node.value = DefaultValueForType[type] end - print("Created " .. table.ToString(node, "node", false)) + --print("Created " .. table.ToString(node, "node", false)) table.insert(self.Nodes, node) end function Editor:DeleteNode(nodeId) - print("Deleted " .. nodeId) + --print("Deleted " .. nodeId) --remove all connections to this node for k1, node in pairs(self.Nodes) do From 6f441477825b75553260a11b9eb50ee05ffb0d5b Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Tue, 12 Jan 2021 18:19:32 +0100 Subject: [PATCH 052/236] Made error handling better --- lua/entities/gmod_wire_fpga/init.lua | 43 +++++++++++++++++++--------- lua/wire/stools/fpga.lua | 3 +- todo.txt | 4 +++ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 7d24f8b259..75e7c5d4fa 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -89,18 +89,26 @@ function ENT:UpdateOverlay(clear) name = self.name, timebench = self.timebench / (self.ExecutionInterval / self.TickRate), timebenchPeak = self.time, - errorMessage = self.errorMessage, + errorMessage = self.ErrorMessage, }) end end -function ENT:Error(message, overlay) +function ENT:ThrowCompileError(message, overlay) self:SetColor(Color(255, 0, 0, self:GetColor().a)) - self.error = true - self.errorMessage = overlay + self.CompileError = true + self.ErrorMessage = overlay self:UpdateOverlay(false) - WireLib.ClientError(message, WireLib.GetOwner(self)) + WireLib.ClientError("FPGA: Compilation error - " .. message, WireLib.GetOwner(self)) +end +function ENT:ThrowExecutionError(message, overlay) + self:SetColor(Color(255, 0, 0, self:GetColor().a)) + self.ExecutionError = true + self.ErrorMessage = overlay + self:UpdateOverlay(false) + + WireLib.ClientError("FPGA: Execution error - " .. message, WireLib.GetOwner(self)) end -------------------------------------------------------- @@ -115,8 +123,11 @@ function ENT:Initialize() self.time = 0 self.timebench = 0 - self.error = false - self.errorMessage = nil + + self.Uploaded = false + self.ExecutionError = false + self.CompileError = false + self.ErrorMessage = nil self.TickRate = 0.015 self.ExecutionInterval = 0.015 @@ -279,6 +290,9 @@ end function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") + self.CompileError = false + self.ExecutionError = false + if data.Name then self.name = data.Name else @@ -296,7 +310,7 @@ function ENT:Upload(data) --validate local invalid = self:ValidateData(data) if invalid then - self:Error("FPGA: Failed to validate on server, "..invalid, "failed to validate") + self:ThrowCompileError("failed to validate on server, "..invalid, "failed to validate") self.Inputs = WireLib.AdjustSpecialInputs(self, {}, {}, "") self.Outputs = WireLib.AdjustSpecialOutputs(self, {}, {}, "") return @@ -341,6 +355,8 @@ function ENT:Upload(data) self.Data = data + self.Uploaded = true + --First execution needs to be with all nodes, to properly get all the right standby values everywhere local allNodes = {} for nodeId, node in pairs(self.Nodes) do @@ -355,7 +371,8 @@ end -------------------------------------------------------- function ENT:Reset() --MsgC(Color(0, 100, 255), "Resetting FPGA\n") - if self.error then return end + if self.CompilationError or not self.Uploaded then return end + self.ExecutionError = false --Set gates to default values again self.Values = {} @@ -399,7 +416,7 @@ function ENT:TriggerInput(iname, value) end function ENT:Think() - if self.error then return end + if self.CompilationError or self.ExecutionError or not self.Uploaded then return end BaseClass.Think(self) self:NextThink(CurTime()+self.ExecutionInterval) @@ -415,9 +432,9 @@ function ENT:Think() --Limiting if self.timebench > fpga_quota_avg then - self:Error("FPGA: Exceeded average cpu time limit", "avg cpu time limit exceeded") + self:ThrowExecutionError("exceeded average cpu time limit", "avg cpu time limit exceeded") elseif self.time > fpga_quota_spike then - self:Error("FPGA: Exceeded spike cpu time limit", "spike cpu time limit exceeded") + self:ThrowExecutionError("exceeded spike cpu time limit", "spike cpu time limit exceeded") end self:UpdateOverlay(false) @@ -531,7 +548,7 @@ function ENT:Run(changedNodes) else if nodeId == loopDetectionNodeId then --infinite loop... - self:Error("FPGA: Execution stuck in infinite loop", "infinite loop") + self:ThrowExecutionError("stuck in infinite loop", "infinite loop") break end diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index de29e363f8..e86378e423 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -93,7 +93,8 @@ if CLIENT then WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) return end - + + if not data and not FPGA_Editor then return end data = data or FPGA_Editor:GetData() net.Start("FPGA_Upload") diff --git a/todo.txt b/todo.txt index 6954dbe399..af1df78092 100644 --- a/todo.txt +++ b/todo.txt @@ -19,6 +19,10 @@ FPGA Entity: FPGA Tool: Add a cool animation to the toolgun + Download from chip + + Be able to upload bigger than 64kb files + FPGA Editor: Features: Shortcuts? From 0d597eb850bc684b65e2cae7a91bcb6b1611d1f1 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Tue, 12 Jan 2021 18:28:55 +0100 Subject: [PATCH 053/236] Revised input output name delegation --- lua/entities/gmod_wire_fpga/cl_init.lua | 2 +- lua/wire/client/node_editor/nodeeditor.lua | 57 ++++++---------------- todo.txt | 2 - 3 files changed, 15 insertions(+), 46 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/cl_init.lua b/lua/entities/gmod_wire_fpga/cl_init.lua index 794e3640c2..c5529ba209 100644 --- a/lua/entities/gmod_wire_fpga/cl_init.lua +++ b/lua/entities/gmod_wire_fpga/cl_init.lua @@ -30,7 +30,7 @@ function ENT:GetWorldTipBodySize() return w_total, h_total end -function ENT:DrawWorldTipBody( pos ) +function ENT:DrawWorldTipBody(pos) local data = self:GetOverlayData() if not data then return end diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 5f60c1fc15..e4f29afa80 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -59,9 +59,6 @@ function Editor:Init() self.NodeColor = Color(100, 100, 100, 255) self.ConnectionColor = Color(200, 200, 200, 255) - self.UsedInputNames = {} - self.UsedOutputNames = {} - self.C = {} self:InitComponents() @@ -271,8 +268,6 @@ function Editor:GetData() Position = self.Position, Zoom = self.Zoom, ExecutionInterval = self.C.ExecutionInterval:GetValue(), - UsedInputNames = self.UsedInputNames, - UsedOutputNames = self.UsedOutputNames, }, false) end @@ -295,8 +290,14 @@ function Editor:SetData(data) if data.Position then self.Position = data.Position end if data.Zoom then self.Zoom = data.Zoom end - if data.UsedInputNames then self.UsedInputNames = data.UsedInputNames end - if data.UsedOutputNames then self.UsedOutputNames = data.UsedOutputNames end + + self.InputNameCounter = 0 + self.OutputNameCounter = 0 + for k, node in pairs(self.Nodes) do + local gate = self:GetGate(node) + if gate.isInput then self.InputNameCounter = self.InputNameCounter + 1 end + if gate.isOutput then self.OutputNameCounter = self.OutputNameCounter + 1 end + end end function Editor:ClearData() @@ -304,8 +305,6 @@ function Editor:ClearData() self.Nodes = {} self.Position = {0, 0} self.Zoom = 1 - self.UsedInputNames = {} - self.UsedOutputNames = {} end @@ -661,36 +660,13 @@ function Editor:BeginDrawingConnection(x, y) end function Editor:GetInputName() - local i = 1 - while self.UsedInputNames[i] do - i = i + 1 - end - self.UsedInputNames[i] = true - - return "I" .. i + self.InputNameCounter = self.InputNameCounter + 1 + return "In" .. self.InputNameCounter end function Editor:GetOutputName() - local i = 1 - while self.UsedOutputNames[i] do - i = i + 1 - end - self.UsedOutputNames[i] = true - - return "O" .. i -end - -function Editor:FreeName(name) - local type = string.sub(name, 1, 1) - local index = string.sub(name, 2, -1) - - if tonumber(index) == nil then return end - --print("freeing " .. type .. tonumber(index)) - if type == "I" then - self.UsedInputNames[tonumber(index)] = false - elseif type == "O" then - self.UsedOutputNames[tonumber(index)] = false - end + self.OutputNameCounter = self.OutputNameCounter + 1 + return "Out" .. self.OutputNameCounter end function Editor:CreateNode(type, gate, x, y) @@ -730,11 +706,6 @@ function Editor:DeleteNode(nodeId) end end - --clear name, if it used one - if self.Nodes[nodeId].ioName then - self:FreeName(self.Nodes[nodeId].ioName) - end - --finally remove node self.Nodes[nodeId] = nil end @@ -790,7 +761,7 @@ function Editor:OnDrawConnectionFinished(x, y) local inputType = self:GetInputType(self:GetGate(inputNode), inputNum) local outputType = self:GetOutputType(self:GetGate(outputNode), self.DrawingConnectionFrom[2]) - if inputType == outputType or inputType == "WILD" then + if inputType == outputType then --connect up inputNode.connections[inputNum] = {self.DrawingConnectionFrom[1], self.DrawingConnectionFrom[2]} end @@ -806,7 +777,7 @@ function Editor:OnDrawConnectionFinished(x, y) local inputType = self:GetInputType(self:GetGate(inputNode), self.DrawingConnectionFrom[2]) local outputType = self:GetOutputType(self:GetGate(outputNode), outputNum) - if inputType == outputType or inputType == "WILD" then + if inputType == outputType then --connect up inputNode.connections[self.DrawingConnectionFrom[2]] = {nodeId, outputNum} end diff --git a/todo.txt b/todo.txt index af1df78092..de67319640 100644 --- a/todo.txt +++ b/todo.txt @@ -35,8 +35,6 @@ FPGA Tool: sometimes nodes cant be removed nice to have: - remove data.UsedInputNames and data.UsedOutputNames from savedata, they can be inferred - create input, rename, remove. name doesnt get freed up FPGA Gates: From 4520c7dd223d590620fa533308b3109486d7a1c6 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Tue, 12 Jan 2021 18:52:01 +0100 Subject: [PATCH 054/236] Added help text for when there is no nodes --- lua/wire/client/node_editor/nodeeditor.lua | 37 ++++++++++++++++++---- lua/wire/fpga_gates/io.lua | 2 +- todo.txt | 1 + 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index e4f29afa80..f242788133 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -36,8 +36,6 @@ WildColor = { } function Editor:Init() - self.Position = {0, 0} - self.Zoom = 1 self.DraggingWorld = false self.DraggingNode = nil self.DraggingOffset = {0, 0} @@ -62,8 +60,6 @@ function Editor:Init() self.C = {} self:InitComponents() - self.Nodes = {} - --MsgC(Color(0, 150, 255), table.ToString(GateActions, "Gate Actions", true)) end @@ -304,8 +300,9 @@ function Editor:ClearData() self.C.Name:SetValue("empty") self.Nodes = {} self.Position = {0, 0} - self.Zoom = 1 - + self.Zoom = 5 + self.InputNameCounter = 0 + self.OutputNameCounter = 0 end function Editor:GetName() @@ -578,6 +575,29 @@ function Editor:PaintNodes() end end +function Editor:PaintHelp() + local x, y = self:PosToScr(0, 0) + + surface.SetFont("Default") + surface.SetTextColor(255, 255, 255) + + local helpText = [[To create a node, chose a gate from the menu and click 'C' + Drag around the plane with right mouse button + Connect inputs and outputs by clicking on either, and dragging to the other + 'X' deletes the node under the cursor + 'D' configures the node under the cursor (input/output names, constant values) + + To create inputs and outputs for the FPGA, use the gates found in 'FPGA/Input & Output' + ]] + + for line in helpText:gmatch("([^\n]*)\n?") do + local tx, ty = surface.GetTextSize(line) + surface.SetTextPos(x-tx/2, y-ty/2) + surface.DrawText(line) + y = y + ty + end +end + function Editor:Paint() surface.SetDrawColor(self.BackgroundColor) surface.DrawRect(0, 0, self:GetWide()-290, self:GetTall()) @@ -585,6 +605,10 @@ function Editor:Paint() self:PaintNodes() self:PaintConnections() + if #self.Nodes == 0 then + self:PaintHelp() + end + self:PaintDebug() -- moving the plane @@ -618,7 +642,6 @@ function Editor:Paint() self.LastMousePos = {x, y} end - function Editor:PaintDebug() surface.SetFont("Default") surface.SetTextColor(255, 255, 255) diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index 6d68b44015..ccadacd0c3 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -1,4 +1,4 @@ -FPGAGateActions("Input / Output") +FPGAGateActions("Input & Output") FPGAGateActions["normal-input"] = { name = "Normal Input", diff --git a/todo.txt b/todo.txt index de67319640..2fffada4e7 100644 --- a/todo.txt +++ b/todo.txt @@ -35,6 +35,7 @@ FPGA Tool: sometimes nodes cant be removed nice to have: + Improve the guide on how to use FPGA Gates: From edfb22ac422196e19d40aa8133d8c77f0937863d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Tue, 12 Jan 2021 19:03:03 +0100 Subject: [PATCH 055/236] Improved top bar color a bit --- lua/wire/client/node_editor/nodeeditor.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index f242788133..110d28f5a3 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -106,7 +106,10 @@ function Editor:InitComponents() self.C.TopBar:Dock(TOP) self.C.TopBar:SetHeight(36) self.C.TopBar:DockPadding(5, 18, 5, 4) - self.C.TopBar:SetBackgroundColor(Color(170, 174, 179, 255)) + self.C.TopBar:SetBackgroundColor(Color(176.5, 180, 185, 255)) + --155, 159, 163 + + --157, 161, 165 local x = 7 self.C.NameLabel = vgui.Create("DLabel", self.C.TopBar) From 9191d225950947f7cad7a59a7bcb99599a1c6ce9 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 13 Jan 2021 01:16:04 +0100 Subject: [PATCH 056/236] Update nodeeditor.lua --- lua/wire/client/node_editor/nodeeditor.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 110d28f5a3..54e5fcc940 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -107,9 +107,6 @@ function Editor:InitComponents() self.C.TopBar:SetHeight(36) self.C.TopBar:DockPadding(5, 18, 5, 4) self.C.TopBar:SetBackgroundColor(Color(176.5, 180, 185, 255)) - --155, 159, 163 - - --157, 161, 165 local x = 7 self.C.NameLabel = vgui.Create("DLabel", self.C.TopBar) From 057d90f85d6349e07c1d6c6bc5f2b4050465967c Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 13 Jan 2021 19:29:02 +0100 Subject: [PATCH 057/236] Update todo.txt --- todo.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/todo.txt b/todo.txt index 2fffada4e7..5e63e26b91 100644 --- a/todo.txt +++ b/todo.txt @@ -5,6 +5,9 @@ FPGA Entity: Add mechanism such that loops are possible + Bugs: + Apply force doesnt work (gate model wrong, GetPlayer()) + Test: Check for errors during compilation (Hasnt been tested, but is implemented now) From c2c0ebc9cbb33f5870f6de738aa0c442d07666df Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 18 Jan 2021 00:04:17 +0100 Subject: [PATCH 058/236] Apply force gates now work --- lua/entities/gmod_wire_fpga/init.lua | 39 ++++++++++++++++++---------- todo.txt | 10 ++++++- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 75e7c5d4fa..b971a25877 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -195,6 +195,7 @@ function ENT:ValidateData(data) local outNode = data.Nodes[connection[1]] if not outNode then return "connection exists to invalid node" end local outGate = getGate(outNode) + local outputNum = connection[2] --bound check if inputNum < 1 or inputNum > #inGate.inputs then return "connection on nonexistant input" end @@ -205,7 +206,9 @@ function ENT:ValidateData(data) end --type check - if getInputType(inGate, inputNum) != getOutputType(outGate, outputNum) then return "type mismatch between input and output" end + if getInputType(inGate, inputNum) != getOutputType(outGate, outputNum) then + return "type mismatch between input and output " .. inGate.name .. " ["..getInputType(inGate, inputNum).."]" .. " and " .. outGate.name .. " ["..getOutputType(outGate, outputNum).."]" + end end end @@ -289,7 +292,9 @@ end -------------------------------------------------------- function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") - + print(table.ToString(data, "data", true)) + + self.CompileError = false self.ExecutionError = false @@ -323,20 +328,22 @@ function ENT:Upload(data) self.Inputs = WireLib.AdjustSpecialInputs(self, self.InputNames, self.InputTypes, "") self.Outputs = WireLib.AdjustSpecialOutputs(self, self.OutputNames, self.OutputTypes, "") + + --Functions for gates + local owner = self:GetPlayer() --Initialize gate table self.Gates = {} for nodeId, node in pairs(self.Nodes) do local gate = getGate(node) + local tempGate = {} + function tempGate:GetPlayer() + return owner + end if gate.reset then - --reset gate - local tempGate = {} gate.reset(tempGate) - self.Gates[nodeId] = tempGate - else - --empty gate - self.Gates[nodeId] = {} end + self.Gates[nodeId] = tempGate end --Table that contains last input values for every gate @@ -366,6 +373,8 @@ function ENT:Upload(data) self:Run(allNodes) end + + -------------------------------------------------------- --RESET -------------------------------------------------------- @@ -380,20 +389,22 @@ function ENT:Reset() self.Values[nodeId] = getDefaultValues(node) end + --Functions for gates + local owner = self:GetPlayer() + print(owner) --Reset gate table self.Gates = {} for nodeId, node in pairs(self.Nodes) do local gate = getGate(node) + local tempGate = {} + function tempGate:GetPlayer() + return owner + end if gate.reset then - --reset gate - local tempGate = {} gate.reset(tempGate) - self.Gates[nodeId] = tempGate - else - --empty gate - self.Gates[nodeId] = {} end + self.Gates[nodeId] = tempGate end --Run all nodes again (to properly propagate) diff --git a/todo.txt b/todo.txt index 5e63e26b91..f2ec014f82 100644 --- a/todo.txt +++ b/todo.txt @@ -5,8 +5,13 @@ FPGA Entity: Add mechanism such that loops are possible + Adv. Dupe + + HiSpeed links (memory gates?) + String to memory and opposite + Bugs: - Apply force doesnt work (gate model wrong, GetPlayer()) + Multiply gate needs all inputs connected Test: @@ -16,7 +21,9 @@ FPGA Entity: Type Check Check that connections are valid (that the destination node exists) Check if gate is banned..? + more clear error messages, just for debugging + FPGA Tool: @@ -32,6 +39,7 @@ FPGA Tool: Grid Mark selection, move all gates (or delete all) copy paste (with compatible with selection) + Undo Bugs: Saving a file with capital letter fucks it up From bd96ea3260d45d71683a34520d8381893470c4db Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Mon, 18 Jan 2021 00:06:49 +0100 Subject: [PATCH 059/236] Resetting now removes errors --- lua/entities/gmod_wire_fpga/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index b971a25877..94bf335334 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -381,7 +381,9 @@ end function ENT:Reset() --MsgC(Color(0, 100, 255), "Resetting FPGA\n") if self.CompilationError or not self.Uploaded then return end + self:SetColor(Color(255, 255, 255, self:GetColor().a)) self.ExecutionError = false + self.ErrorMessage = nil --Set gates to default values again self.Values = {} From 1dabd4f785a2a96f71e099e3b1a1fe081fd9aee7 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 22 Jan 2021 00:29:47 +0100 Subject: [PATCH 060/236] Added support for compact gates --- lua/entities/gmod_wire_fpga/init.lua | 17 +++++++++++++++-- todo.txt | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 94bf335334..e76fcd0aad 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -554,6 +554,8 @@ function ENT:Run(changedNodes) local gate = getGate(node) --gate value logic + local value + if gate.isInput then value = {self.InputValues[nodeId]} elseif gate.isConstant then @@ -593,8 +595,19 @@ function ENT:Run(changedNodes) if self.Debug then print(node.ioName .. " outputs " .. table.ToString(self.Values[nodeId], "", false)) end continue else - --normal gates - value = {gate.output(self.Gates[nodeId], unpack(self.Values[nodeId]))} + --compact gates only calculate with connected inputs + if gate.compact_inputs then + --find connected inputs, and assign current values + activeValues = {} + for inputNum, _ in pairs(self.Data.Nodes[nodeId].connections) do + table.insert(activeValues, self.Values[nodeId][inputNum]) + end + + value = {gate.output(self.Gates[nodeId], unpack(activeValues))} + else + --normal gates + value = {gate.output(self.Gates[nodeId], unpack(self.Values[nodeId]))} + end end end diff --git a/todo.txt b/todo.txt index f2ec014f82..27d429fd0c 100644 --- a/todo.txt +++ b/todo.txt @@ -11,7 +11,7 @@ FPGA Entity: String to memory and opposite Bugs: - Multiply gate needs all inputs connected + Clear errors on upload Test: From a806df41ba6b4027fd4ff3dceab5ac268cbbe785 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 22 Jan 2021 00:42:09 +0100 Subject: [PATCH 061/236] Chip clears errors on uploads now --- lua/entities/gmod_wire_fpga/cl_init.lua | 14 +++++++------- lua/entities/gmod_wire_fpga/init.lua | 3 +++ todo.txt | 3 +-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/cl_init.lua b/lua/entities/gmod_wire_fpga/cl_init.lua index c5529ba209..dac62abe61 100644 --- a/lua/entities/gmod_wire_fpga/cl_init.lua +++ b/lua/entities/gmod_wire_fpga/cl_init.lua @@ -22,7 +22,7 @@ function ENT:GetWorldTipBodySize() w_total = math.max(w_total, w) h_total = h_total + h + 10 - local str = string.format("avg. cpu time: %ius", timebench * 1000000) + local str = string.format("peak cpu time: %ius", timebench * 1000000) local w,h = surface.GetTextSize(str) w_total = math.max(w_total, w) h_total = h_total + h + 10 @@ -39,7 +39,7 @@ function ENT:DrawWorldTipBody(pos) local white = Color(255,255,255,255) local error = Color(255,0,0,255) local cputime = Color(150,150,255,255) - local cputimeavg = Color(100,255,150,255) + local cputimeavg = Color(130,240,130,255) local black = Color(0,0,0,255) local w_total, yoffset = 0, pos.min.y @@ -75,10 +75,10 @@ function ENT:DrawWorldTipBody(pos) local timebench = data.timebench local timebenchPeak = data.timebenchPeak + -- cpu time text + local str = string.format("cpu time: %ius", timebench * 1000000) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, cputimeavg, TEXT_ALIGN_CENTER) -- cpu peak time text - local str = string.format("cpu time: %ius", timebenchPeak * 1000000) - draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8, cputime, TEXT_ALIGN_CENTER) - -- cpu time text - local str = string.format("avg. cpu time: %ius", timebench * 1000000) - draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8 + 25, cputimeavg, TEXT_ALIGN_CENTER) + local str = string.format("peak cpu time: %ius", timebenchPeak * 1000000) + draw.DrawText(str, "GModWorldtip", pos.min.x + pos.size.w/2, yoffset + 8 + 25, cputime, TEXT_ALIGN_CENTER) end \ No newline at end of file diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index e76fcd0aad..8f7d3faee1 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -297,6 +297,8 @@ function ENT:Upload(data) self.CompileError = false self.ExecutionError = false + self.ErrorMessage = nil + self:SetColor(Color(255, 255, 255, self:GetColor().a)) if data.Name then self.name = data.Name @@ -384,6 +386,7 @@ function ENT:Reset() self:SetColor(Color(255, 255, 255, self:GetColor().a)) self.ExecutionError = false self.ErrorMessage = nil + self.time = 0 --Set gates to default values again self.Values = {} diff --git a/todo.txt b/todo.txt index 27d429fd0c..e14a945b36 100644 --- a/todo.txt +++ b/todo.txt @@ -11,8 +11,6 @@ FPGA Entity: String to memory and opposite Bugs: - Clear errors on upload - Test: Check for errors during compilation (Hasnt been tested, but is implemented now) @@ -44,6 +42,7 @@ FPGA Tool: Bugs: Saving a file with capital letter fucks it up sometimes nodes cant be removed + cant create node on preopened tab nice to have: Improve the guide on how to use From 78955509fad9d0cb84d158637d98d838f59ab66b Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 22 Jan 2021 00:59:34 +0100 Subject: [PATCH 062/236] Updated todo --- lua/entities/gmod_wire_fpga/init.lua | 2 +- todo.txt | 37 +++++++++++++++++++--------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 8f7d3faee1..f229706fd5 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -448,7 +448,7 @@ function ENT:Think() --Limiting if self.timebench > fpga_quota_avg then - self:ThrowExecutionError("exceeded average cpu time limit", "avg cpu time limit exceeded") + self:ThrowExecutionError("exceeded cpu time limit", "cpu time limit exceeded") elseif self.time > fpga_quota_spike then self:ThrowExecutionError("exceeded spike cpu time limit", "spike cpu time limit exceeded") end diff --git a/todo.txt b/todo.txt index e14a945b36..84cf30dd0e 100644 --- a/todo.txt +++ b/todo.txt @@ -3,14 +3,15 @@ FPGA Entity: Improve execution Optimize execution - Add mechanism such that loops are possible - Adv. Dupe HiSpeed links (memory gates?) String to memory and opposite + more clear error messages, just for debugging + Bugs: + Entity spikes after amount of time and errors Test: Check for errors during compilation (Hasnt been tested, but is implemented now) @@ -19,8 +20,6 @@ FPGA Entity: Type Check Check that connections are valid (that the destination node exists) Check if gate is banned..? - more clear error messages, just for debugging - @@ -33,23 +32,37 @@ FPGA Tool: FPGA Editor: Features: - Shortcuts? - Grid Mark selection, move all gates (or delete all) copy paste (with compatible with selection) - Undo Bugs: Saving a file with capital letter fucks it up sometimes nodes cant be removed cant create node on preopened tab - nice to have: - Improve the guide on how to use + +FPGA Gates: + + + + +######################LATER############################## + +FPGA Entity: + Add mechanism such that loops are possible + +FPGA Tool: + Be able to upload bigger than 64kb files + + FPGA Editor: + Shortcuts? + Grid + Undo + Improve the guide on how to use FPGA Gates: Maybe add the various "luxuries" that e2 have (changed and last notably) - Should these have wildcard types? - (this is pretty fucking hard???) - figure out logic of how exactly a "last" gate should work, since its pretty complicated \ No newline at end of file + Should these have wildcard types? + (this is pretty fucking hard???) + figure out logic of how exactly a "last" gate should work, since its pretty complicated \ No newline at end of file From 9fd8320603ef6d089be3849387d7ddd5fd0e6838 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 15:54:58 +0100 Subject: [PATCH 063/236] Added support for duplicating --- lua/entities/gmod_wire_fpga/init.lua | 23 ++++++++++++++++++++++- todo.txt | 4 +--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index f229706fd5..e217e2b06f 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -153,9 +153,27 @@ function ENT:Initialize() self.NodeGetsInputFrom = {} self:UpdateOverlay(true) - --self:SetColor(Color(255, 0, 0, self:GetColor().a)) + --self:SetColor(Color(255, 0, 0, self:GetColor().a)) end +-------------------------------------------------------- +--DUPE +-------------------------------------------------------- +function ENT:BuildDupeInfo() + self.UploadData = self.Data + return BaseClass.BuildDupeInfo(self) or {} +end + +function ENT:Setup(data) + self:Upload(data) +end + +duplicator.RegisterEntityClass("gmod_wire_fpga", WireLib.MakeWireEnt, "Data", "UploadData") + + +-------------------------------------------------------- +--VALIDATION +-------------------------------------------------------- function ENT:ValidateData(data) --Check if nodes are even there if not data.Nodes then return "missing nodes" end @@ -216,6 +234,9 @@ function ENT:ValidateData(data) return nil end +-------------------------------------------------------- +--COMPILATION +-------------------------------------------------------- -- Node 'compiler' -- Flip connections, generate input output tabels function ENT:CompileData(data) diff --git a/todo.txt b/todo.txt index 84cf30dd0e..b270627592 100644 --- a/todo.txt +++ b/todo.txt @@ -2,9 +2,7 @@ FPGA Entity: Features: Improve execution Optimize execution - - Adv. Dupe - + HiSpeed links (memory gates?) String to memory and opposite From 16dc1dd40a497acb6ade5fac428f222f0e921434 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 16:04:49 +0100 Subject: [PATCH 064/236] Fixed bug introduced by last commit FPGAs couldn't be spawned manually anymore, only via duping --- lua/entities/gmod_wire_fpga/init.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index e217e2b06f..02b855ef66 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -165,7 +165,10 @@ function ENT:BuildDupeInfo() end function ENT:Setup(data) - self:Upload(data) + if data then + -- entity was duplicated + self:Upload(data) + end end duplicator.RegisterEntityClass("gmod_wire_fpga", WireLib.MakeWireEnt, "Data", "UploadData") @@ -313,7 +316,7 @@ end -------------------------------------------------------- function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") - print(table.ToString(data, "data", true)) + --print(table.ToString(data, "data", true)) self.CompileError = false From 61c3814eff0067b6bc34f321c2b923a709f4ea2d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 16:21:49 +0100 Subject: [PATCH 065/236] Improved tickrate detection --- lua/entities/gmod_wire_fpga/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 02b855ef66..d540ad8848 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -87,7 +87,7 @@ function ENT:UpdateOverlay(clear) else self:SetOverlayData( { name = self.name, - timebench = self.timebench / (self.ExecutionInterval / self.TickRate), + timebench = self.timebench / (self.ExecutionInterval / FrameTime()), timebenchPeak = self.time, errorMessage = self.ErrorMessage, }) @@ -129,8 +129,8 @@ function ENT:Initialize() self.CompileError = false self.ErrorMessage = nil - self.TickRate = 0.015 self.ExecutionInterval = 0.015 + print(FrameTime()) self.Data = nil @@ -330,7 +330,7 @@ function ENT:Upload(data) self.name = "(corrupt)" end if data.ExecutionInterval then - self.ExecutionInterval = math.max(data.ExecutionInterval, self.TickRate) + self.ExecutionInterval = math.max(data.ExecutionInterval, 0.015) else self.ExecutionInterval = 0.1 end From 7e68da92fb3242999446db8f0fabcc20026bf686 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 16:23:01 +0100 Subject: [PATCH 066/236] Use tickrate for lower limit on execution interval --- lua/entities/gmod_wire_fpga/init.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index d540ad8848..3b6ec3c760 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -130,7 +130,6 @@ function ENT:Initialize() self.ErrorMessage = nil self.ExecutionInterval = 0.015 - print(FrameTime()) self.Data = nil @@ -330,7 +329,7 @@ function ENT:Upload(data) self.name = "(corrupt)" end if data.ExecutionInterval then - self.ExecutionInterval = math.max(data.ExecutionInterval, 0.015) + self.ExecutionInterval = math.max(data.ExecutionInterval, FrameTime()) else self.ExecutionInterval = 0.1 end From 2c5e4437cb72a663939364142b723a80103470c1 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 17:30:32 +0100 Subject: [PATCH 067/236] Made spike quota optional --- lua/entities/gmod_wire_fpga/init.lua | 3 ++- lua/entities/gmod_wire_fpga/shared.lua | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 3b6ec3c760..61668f2a4f 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -467,12 +467,13 @@ function ENT:Think() --Time benchmarking + if self.time > 0.001 then print(self.time) end self.timebench = self.timebench * 0.95 + self.time * 0.05 --Limiting if self.timebench > fpga_quota_avg then self:ThrowExecutionError("exceeded cpu time limit", "cpu time limit exceeded") - elseif self.time > fpga_quota_spike then + elseif fpga_quota_spike > 0 and self.time > fpga_quota_spike then self:ThrowExecutionError("exceeded spike cpu time limit", "spike cpu time limit exceeded") end diff --git a/lua/entities/gmod_wire_fpga/shared.lua b/lua/entities/gmod_wire_fpga/shared.lua index b2c45714be..1f368379b1 100644 --- a/lua/entities/gmod_wire_fpga/shared.lua +++ b/lua/entities/gmod_wire_fpga/shared.lua @@ -9,4 +9,4 @@ ENT.Instructions = "" ENT.WireDebugName = "FPGA" CreateConVar("wire_fpga_quota_avg", "2000", {FCVAR_REPLICATED}) -CreateConVar("wire_fpga_quota_spike", "5000", {FCVAR_REPLICATED}) \ No newline at end of file +CreateConVar("wire_fpga_quota_spike", "-1", {FCVAR_REPLICATED}) \ No newline at end of file From 586d5a525b3f277fca6cc7be32dfdf094907f25b Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 17:32:01 +0100 Subject: [PATCH 068/236] Updated todo and removed print --- lua/entities/gmod_wire_fpga/init.lua | 1 - todo.txt | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 61668f2a4f..05ae1f919a 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -467,7 +467,6 @@ function ENT:Think() --Time benchmarking - if self.time > 0.001 then print(self.time) end self.timebench = self.timebench * 0.95 + self.time * 0.05 --Limiting diff --git a/todo.txt b/todo.txt index b270627592..cc6cd53e48 100644 --- a/todo.txt +++ b/todo.txt @@ -2,14 +2,16 @@ FPGA Entity: Features: Improve execution Optimize execution - + HiSpeed links (memory gates?) String to memory and opposite more clear error messages, just for debugging Bugs: - Entity spikes after amount of time and errors + (Entity spikes after amount of time and errors) + Fixed by removing spike limit, as it seems unavoidable + This is probably why E2 limits OPS and not time. Test: Check for errors during compilation (Hasnt been tested, but is implemented now) From b4775492dbce682353ec82e384cb1ef1629d35dd Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 18:37:31 +0100 Subject: [PATCH 069/236] Added node selection, and selection moving and deleting --- lua/wire/client/node_editor/nodeeditor.lua | 112 ++++++++++++++++++--- todo.txt | 8 +- 2 files changed, 101 insertions(+), 19 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 54e5fcc940..cf363b58cb 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -45,6 +45,9 @@ function Editor:Init() self.DrawingFromOutput = false self.DrawingConnectionFrom = nil + self.DrawingSelection = nil + self.SelectedNodes = {} + self.LastMousePos = {0, 0} self.MouseDown = false @@ -54,8 +57,10 @@ function Editor:Init() self.IOSize = 2 self.BackgroundColor = Color(32, 32, 32, 255) - self.NodeColor = Color(100, 100, 100, 255) self.ConnectionColor = Color(200, 200, 200, 255) + self.NodeColor = Color(100, 100, 100, 255) + self.SelectedNodeColor = Color(150, 150, 100, 255) + self.SelectionColor = Color(220, 220, 100, 255) self.C = {} self:InitComponents() @@ -497,7 +502,7 @@ function Editor:PaintOutput(x, y, type, name, ioSize) surface.DrawText(name) end -function Editor:PaintNode(node) +function Editor:PaintNode(nodeId, node) local gate = self:GetGate(node) local amountOfInputs = 0 @@ -545,7 +550,11 @@ function Editor:PaintNode(node) -- Body local height = math.max(amountOfInputs, amountOfOutputs, 1) - surface.SetDrawColor(self.NodeColor) + if self.SelectedNodes[nodeId] then + surface.SetDrawColor(self.SelectedNodeColor) + else + surface.SetDrawColor(self.NodeColor) + end surface.DrawRect(x-size/2, y-size/2, size, size * height) -- Name @@ -570,8 +579,8 @@ function Editor:PaintNode(node) end function Editor:PaintNodes() - for k, node in pairs(self.Nodes) do - self:PaintNode(node) + for nodeId, node in pairs(self.Nodes) do + self:PaintNode(nodeId, node) end end @@ -621,8 +630,22 @@ function Editor:Paint() if self.DraggingNode then local x, y = self:CursorPos() local gx, gy = self:ScrToPos(x, y) - self.Nodes[self.DraggingNode].x = gx + self.DraggingOffset[1] - self.Nodes[self.DraggingNode].y = gy + self.DraggingOffset[2] + gx = gx + self.DraggingOffset[1] + gy = gy + self.DraggingOffset[2] + + local cx, cy = self.Nodes[self.DraggingNode].x, self.Nodes[self.DraggingNode].y + + if self.SelectedNodes[self.DraggingNode] and table.Count(self.SelectedNodes) > 0 then + for selectedNodeId, selectedNode in pairs(self.SelectedNodes) do + local sox, soy = self.Nodes[selectedNodeId].x - cx, self.Nodes[selectedNodeId].y - cy + self.Nodes[selectedNodeId].x = gx + sox + self.Nodes[selectedNodeId].y = gy + soy + end + else + self.SelectedNodes = {} + self.Nodes[self.DraggingNode].x = gx + self.Nodes[self.DraggingNode].y = gy + end end -- drawing a connection if self.DrawingConnection then @@ -637,6 +660,22 @@ function Editor:Paint() surface.SetDrawColor(self.ConnectionColor) surface.DrawLine(sx, sy, mx, my) end + -- selecting + if self.DrawingSelection then + if not input.IsMouseDown(MOUSE_LEFT) then + -- detects if mouse is let go outside of the window + self.DrawingSelection = nil + else + local sx, sy = self:PosToScr(self.DrawingSelection[1], self.DrawingSelection[2]) + local mx, my = self:CursorPos() + + local x, y = math.min(sx, mx), math.min(sy, my) + local w, h = math.abs(sx-mx), math.abs(sy-my) + + surface.SetDrawColor(self.SelectionColor) + surface.DrawOutlinedRect(x, y, w, h) + end + end local x, y = self:CursorPos() self.LastMousePos = {x, y} @@ -652,9 +691,8 @@ function Editor:PaintDebug() end --ACTIONS -function Editor:BeginDrawingConnection(x, y) - local nodeId, inputNum = self:GetNodeInputAt(x, y) - if nodeId then +function Editor:BeginDrawingConnection(nodeId, inputNum, outputNum) + if inputNum then --check if something is connected to this input node = self.Nodes[nodeId] Input = node.connections[inputNum] @@ -674,8 +712,7 @@ function Editor:BeginDrawingConnection(x, y) self.DrawingConnection = true end - local nodeId, outputNum = self:GetNodeOutputAt(x, y) - if nodeId then + if outputNum then self.DrawingConnection = true self.DrawingFromOutput = true self.DrawingConnectionFrom = {nodeId, outputNum} @@ -748,7 +785,20 @@ function Editor:OnMousePressed(code) self.DraggingOffset = {self.Nodes[nodeId].x - gx, self.Nodes[nodeId].y - gy} else --CONNECTION DRAWING - self:BeginDrawingConnection(x, y) + local nodeId, inputNum = self:GetNodeInputAt(x, y) + if nodeId then + self:BeginDrawingConnection(nodeId, inputNum, nil) + else + local nodeId, outputNum = self:GetNodeOutputAt(x, y) + if nodeId then + self:BeginDrawingConnection(nodeId, nil, outputNum) + else + --SELECTION DRAWING + local gx, gy = self:ScrToPos(x, y) + self.DrawingSelection = {gx, gy} + end + end + end elseif code == MOUSE_RIGHT then -- PLANE DRAGGING @@ -766,6 +816,8 @@ function Editor:OnMouseReleased(code) if self.DrawingConnection then self:OnDrawConnectionFinished(x, y) + elseif self.DrawingSelection then + self:OnDrawSelectionFinished(x, y) end elseif code == MOUSE_RIGHT then self.DraggingWorld = false @@ -773,6 +825,27 @@ function Editor:OnMouseReleased(code) end +function Editor:OnDrawSelectionFinished(x, y) + local gx, gy = self.DrawingSelection[1], self.DrawingSelection[2] + local mx, my = self:CursorPos() + local mgx, mgy = self:ScrToPos(mx, my) + + local lx, ly = math.min(gx, mgx), math.min(gy, mgy) + local ux, uy = math.max(gx, mgx), math.max(gy, mgy) + + self.SelectedNodes = {} + for nodeId, node in pairs(self.Nodes) do + if node.x < lx then continue end + if node.x > ux then continue end + if node.y < ly then continue end + if node.y > uy then continue end + + self.SelectedNodes[nodeId] = true + end + + self.DrawingSelection = nil +end + function Editor:OnDrawConnectionFinished(x, y) if self.DrawingFromOutput then local nodeId, inputNum = self:GetNodeInputAt(x, y) @@ -823,9 +896,16 @@ function Editor:OnKeyCodePressed(code) if code == KEY_X then --Delete - local nodeId = self:GetNodeAt(x, y) - if nodeId then - self:DeleteNode(nodeId) + if table.Count(self.SelectedNodes) > 0 then + for selectedNodeId, selectedNode in pairs(self.SelectedNodes) do + self:DeleteNode(selectedNodeId) + end + self.SelectedNodes = {} + else + local nodeId = self:GetNodeAt(x, y) + if nodeId then + self:DeleteNode(nodeId) + end end elseif code == KEY_C then --Create diff --git a/todo.txt b/todo.txt index cc6cd53e48..7084e78192 100644 --- a/todo.txt +++ b/todo.txt @@ -9,9 +9,7 @@ FPGA Entity: more clear error messages, just for debugging Bugs: - (Entity spikes after amount of time and errors) - Fixed by removing spike limit, as it seems unavoidable - This is probably why E2 limits OPS and not time. + Test: Check for errors during compilation (Hasnt been tested, but is implemented now) @@ -51,6 +49,10 @@ FPGA Gates: FPGA Entity: Add mechanism such that loops are possible + (Entity spikes after amount of time and errors) + Fixed by removing spike limit, as it seems unavoidable + This is probably why E2 limits OPS and not time. + FPGA Tool: Be able to upload bigger than 64kb files From 6e8a1d744ad30d986aa12379d77f9defaa0335e0 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 23 Jan 2021 19:06:27 +0100 Subject: [PATCH 070/236] Update todo.txt --- todo.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/todo.txt b/todo.txt index 7084e78192..78ae7df194 100644 --- a/todo.txt +++ b/todo.txt @@ -6,8 +6,6 @@ FPGA Entity: HiSpeed links (memory gates?) String to memory and opposite - more clear error messages, just for debugging - Bugs: @@ -30,8 +28,7 @@ FPGA Tool: FPGA Editor: Features: - Mark selection, move all gates (or delete all) - copy paste (with compatible with selection) + copy paste (compatible with selection) Bugs: Saving a file with capital letter fucks it up @@ -53,6 +50,8 @@ FPGA Entity: Fixed by removing spike limit, as it seems unavoidable This is probably why E2 limits OPS and not time. + more clear error messages, just for debugging + FPGA Tool: Be able to upload bigger than 64kb files From ab7ec60772cb50b0131725cf5d601e4668295b93 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Tue, 26 Jan 2021 21:08:12 +0100 Subject: [PATCH 071/236] Added copying and pasting --- lua/wire/client/node_editor/nodeeditor.lua | 86 +++++++++++++++++++++- todo.txt | 3 +- 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index cf363b58cb..e37b431a31 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -47,6 +47,8 @@ function Editor:Init() self.DrawingSelection = nil self.SelectedNodes = {} + self.CopyBuffer = {} + self.CopyOffset = nil self.LastMousePos = {0, 0} self.MouseDown = false @@ -770,6 +772,69 @@ function Editor:DeleteNode(nodeId) self.Nodes[nodeId] = nil end +function Editor:CopyNodes(nodeIds) + local nodeIdLookup = {} + local i = 1 + for nodeId, _ in pairs(nodeIds) do + nodeIdLookup[nodeId] = i + i = i + 1 + end + + self.CopyBuffer = {} + for nodeId, _ in pairs(nodeIds) do + local node = self.Nodes[nodeId] + local gate = self:GetGate(node) + + local nodeCopy = { + type = node.type, + gate = node.gate, + x = node.x, + y = node.y, + connections = {} + } + + if gate.isInput then + nodeCopy.ioName = node.ioName + elseif gate.isOutput then + nodeCopy.ioName = node.ioName + elseif gate.isConstant then + nodeCopy.value = node.value + end + + for inputNum, connection in pairs(node.connections) do + if nodeIds[connection[1]] then + nodeCopy.connections[inputNum] = {nodeIdLookup[connection[1]], connection[2]} + end + end + + table.insert(self.CopyBuffer, nodeCopy) + end +end + +function Editor:PasteNodes(x, y) + local nodeIdLookup = {} + self.SelectedNodes = {} + local i = #self.Nodes + 1 + for copyNodeId, _ in pairs(self.CopyBuffer) do + nodeIdLookup[copyNodeId] = i + self.SelectedNodes[i] = true + i = i + 1 + end + + for copyNodeId, copyNode in pairs(self.CopyBuffer) do + for inputNum, connection in pairs(copyNode.connections) do + connection[1] = nodeIdLookup[connection[1]] + end + + copyNode.x = (copyNode.x - self.CopyOffset[1]) + x + copyNode.y = (copyNode.y - self.CopyOffset[2]) + y + + table.insert(self.Nodes, copyNode) + end + + self.CopyBuffer = {} +end + --EVENTS function Editor:OnMousePressed(code) if code == MOUSE_LEFT then @@ -893,8 +958,27 @@ end function Editor:OnKeyCodePressed(code) local x, y = self:CursorPos() + local control = input.IsKeyDown(KEY_LCONTROL) or input.IsKeyDown(KEY_RCONTROL) + - if code == KEY_X then + if control then + if code == KEY_C then + --Copy + if table.Count(self.SelectedNodes) > 0 then + local gx, gy = self:ScrToPos(x, y) + self.CopyOffset = {gx, gy} + self:CopyNodes(self.SelectedNodes) + else + self.CopyBuffer = {} + end + elseif code == KEY_V then + --Paste + if table.Count(self.CopyBuffer) > 0 then + local gx, gy = self:ScrToPos(x, y) + self:PasteNodes(gx, gy) + end + end + elseif code == KEY_X then --Delete if table.Count(self.SelectedNodes) > 0 then for selectedNodeId, selectedNode in pairs(self.SelectedNodes) do diff --git a/todo.txt b/todo.txt index 78ae7df194..7a6636ee5b 100644 --- a/todo.txt +++ b/todo.txt @@ -28,7 +28,6 @@ FPGA Tool: FPGA Editor: Features: - copy paste (compatible with selection) Bugs: Saving a file with capital letter fucks it up @@ -56,6 +55,8 @@ FPGA Tool: Be able to upload bigger than 64kb files FPGA Editor: + Bugs: + Copying and pasting will fail if nodes are not sequential Shortcuts? Grid Undo From 9212c710c17e40eb193237675f2ae04729c66725 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 27 Jan 2021 22:15:07 +0100 Subject: [PATCH 072/236] Added upload limit --- lua/entities/gmod_wire_fpga/init.lua | 4 ++-- lua/wire/stools/fpga.lua | 15 +++++++++++---- todo.txt | 1 + 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 05ae1f919a..ac77e7bd72 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -152,7 +152,7 @@ function ENT:Initialize() self.NodeGetsInputFrom = {} self:UpdateOverlay(true) - --self:SetColor(Color(255, 0, 0, self:GetColor().a)) + self:SetColor(Color(255, 0, 0, self:GetColor().a)) end -------------------------------------------------------- @@ -166,7 +166,7 @@ end function ENT:Setup(data) if data then -- entity was duplicated - self:Upload(data) + self:Upload(data) end end diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index e86378e423..137bc81c92 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -90,12 +90,19 @@ if CLIENT then targetEnt = targetEnt or LocalPlayer():GetEyeTrace().Entity if (not IsValid(targetEnt) or targetEnt:GetClass() ~= "gmod_wire_fpga") then - WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end if not data and not FPGA_Editor then return end data = data or FPGA_Editor:GetData() + + local bytes = #data + + if bytes > 64000 then + WireLib.AddNotify("FPGA code too large (over 64kb)!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + return + end net.Start("FPGA_Upload") net.WriteEntity(targetEnt) @@ -113,7 +120,7 @@ if CLIENT then timer.Remove("FPGA_Upload_Delay_Error") end end) - timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) end) + timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) end) end) end @@ -127,7 +134,7 @@ if SERVER then --local numpackets = net.ReadUInt(16) if not IsValid(chip) or chip:GetClass() ~= "gmod_wire_fpga" then - WireLib.AddNotify(ply, "Invalid FPGA chip specified. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + WireLib.AddNotify(ply, "Invalid FPGA chip specified. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end @@ -142,7 +149,7 @@ if SERVER then if ok then chip:Upload(ret) else - WireLib.AddNotify(ply, "FPGA upload failed! Error message:\n" .. ret, NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) + WireLib.AddNotify(ply, "FPGA upload failed! Error message:\n" .. ret, NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) end end) diff --git a/todo.txt b/todo.txt index 7a6636ee5b..2e08bf2e2a 100644 --- a/todo.txt +++ b/todo.txt @@ -28,6 +28,7 @@ FPGA Tool: FPGA Editor: Features: + Improve performance (only draw visible nodes) Bugs: Saving a file with capital letter fucks it up From bf2adb1955de16709be99bd58a756158abb4ab69 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 27 Jan 2021 23:38:52 +0100 Subject: [PATCH 073/236] Added cool new toolgun screen --- lua/wire/stools/fpga.lua | 78 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index 137bc81c92..a65d7a6628 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -215,4 +215,82 @@ if CLIENT then local modelPanel = WireDermaExts.ModelSelect(panel, "wire_fpga_model", list.Get("Wire_gate_Models"), 2) panel:AddControl("Label", {Text = ""}) end + + ------------------------------------------------------------------------------ + -- Tool screen + ------------------------------------------------------------------------------ + tool_program_name = "4-bit ALU" + tool_program_size = 6346 + tool_program_bytes = "abcdefghabcdefghabcdefghabcdefgheeeeaaaaeeeeaaaaeeeeaaaaeeeeaaaazzzzzzzz" + + local fontTable = { + font = "Tahoma", + size = 20, + weight = 1000, + antialias = true, + additive = false, + } + surface.CreateFont("FPGAToolScreenAppFont", fontTable) + fontTable.size = 20 + fontTable.font = "Courier New" + surface.CreateFont("FPGAToolScreenHexFont", fontTable) + fontTable.size = 14 + surface.CreateFont("FPGAToolScreenSmallHexFont", fontTable) + + local function drawButton(x, y) + surface.SetDrawColor(100, 100, 100, 255) + surface.DrawRect(x, y, 20, 20) + surface.SetDrawColor(200, 200, 200, 255) + surface.DrawRect(x, y, 18, 18) + surface.SetDrawColor(185, 180, 175, 255) + surface.DrawRect(x+2, y, 16, 18) + end + + function TOOL:DrawToolScreen(width, height) + --Background + surface.SetDrawColor(185, 180, 175, 255) + surface.DrawRect(0, 0, 256, 256) + + --Top bar + surface.SetDrawColor(156, 180, 225, 255) + surface.DrawRect(5, 5, 256-10, 30) + surface.SetTexture(surface.GetTextureID("gui/gradient")) + surface.SetDrawColor(31, 45, 130, 255) + surface.DrawTexturedRect(5, 5, 256-10, 30) + + --App name + draw.SimpleText("FPGA Editor", "FPGAToolScreenAppFont", 13, 10, Color(255,255,255,255), 0, 0) + + --Buttons + drawButton(184, 10) + draw.SimpleText("_", "FPGAToolScreenAppFont", 188, 6, Color(10,10,10,255), 0, 0) + drawButton(204, 10) + draw.SimpleText("☐", "FPGAToolScreenAppFont", 205, 8, Color(10,10,10,255), 0, 0) + drawButton(226, 10) + draw.SimpleText("x", "FPGAToolScreenAppFont", 231, 7, Color(10,10,10,255), 0, 0) + + --Program name + draw.SimpleText(tool_program_name, "FPGAToolScreenHexFont", 10, 38, Color(10,10,10,255), 0, 0) + + --Hex panel + surface.SetDrawColor(200, 200, 200, 255) + surface.DrawRect(5, 60, 256-10, 256-65) + + --Hex address + draw.SimpleText("Offset", "FPGAToolScreenSmallHexFont", 15, 65, Color(0,0,191,255), 0, 0) + draw.SimpleText("00 01 02 03 04 05 06 07", "FPGAToolScreenSmallHexFont", 75, 65, Color(0,0,191,255), 0, 0) + for i=tool_program_size-7, tool_program_size do + draw.SimpleText(string.format("%04X", i), "FPGAToolScreenSmallHexFont", 15, 82 + (i-tool_program_size+7) * 20, Color(0,0,191,255), 0, 0) + end + + for line = 0, 7 do + local text = "" + for i=1, 8 do + local c = string.byte(tool_program_bytes, line * 8 + i) + text = text .. string.format("%02X", c) .. " " + end + draw.SimpleText(text, "FPGAToolScreenSmallHexFont", 75, 82 + line * 20, Color(0,0,0,255), 0, 0) + end + + end end \ No newline at end of file From acc141648683c804543fb354ee5f6f2446eafe45 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sat, 30 Jan 2021 13:03:10 +0100 Subject: [PATCH 074/236] Improved error messages --- lua/wire/stools/fpga.lua | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index a65d7a6628..fe0e671314 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -90,17 +90,20 @@ if CLIENT then targetEnt = targetEnt or LocalPlayer():GetEyeTrace().Entity if (not IsValid(targetEnt) or targetEnt:GetClass() ~= "gmod_wire_fpga") then - WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + WireLib.AddNotify("FPGA: Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end - if not data and not FPGA_Editor then return end + if not data and not FPGA_Editor then + WireLib.AddNotify("FPGA: No code specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + return + end data = data or FPGA_Editor:GetData() local bytes = #data if bytes > 64000 then - WireLib.AddNotify("FPGA code too large (over 64kb)!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + WireLib.AddNotify("FPGA: Code too large (exceeds 64kb)!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end @@ -120,7 +123,7 @@ if CLIENT then timer.Remove("FPGA_Upload_Delay_Error") end end) - timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) end) + timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("FPGA: Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) end) end) end @@ -134,7 +137,7 @@ if SERVER then --local numpackets = net.ReadUInt(16) if not IsValid(chip) or chip:GetClass() ~= "gmod_wire_fpga" then - WireLib.AddNotify(ply, "Invalid FPGA chip specified. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + WireLib.AddNotify(ply, "FPGA: Invalid FPGA chip specified. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end @@ -149,7 +152,7 @@ if SERVER then if ok then chip:Upload(ret) else - WireLib.AddNotify(ply, "FPGA upload failed! Error message:\n" .. ret, NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + WireLib.AddNotify(ply, "FPGA: Upload failed! Error message:\n" .. ret, NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) end end) From d765f1c209654bb7134e036d1db66233ba9a3304 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 13:06:59 +0100 Subject: [PATCH 075/236] Added functionality to tool screen --- .../client/node_editor/wire_fpga_editor.lua | 12 ++++++- lua/wire/stools/fpga.lua | 36 +++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 58ebe9431d..0421eeaf05 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -1014,7 +1014,17 @@ function Editor:GetCurrentEditor() end function Editor:GetData() - return self:GetCurrentEditor():GetData() + local data = self:GetCurrentEditor():GetData() + + local last_data = "" + if #data < 64 then + last_data = data + else + last_data = data:sub(-64 + #data % 8) + end + + FPGASetToolInfo(self:ExtractNameFromEditor(), #data, last_data) + return data end function Editor:Open(Line, data, forcenewtab) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index fe0e671314..879910fe1e 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -222,9 +222,21 @@ if CLIENT then ------------------------------------------------------------------------------ -- Tool screen ------------------------------------------------------------------------------ - tool_program_name = "4-bit ALU" - tool_program_size = 6346 - tool_program_bytes = "abcdefghabcdefghabcdefghabcdefgheeeeaaaaeeeeaaaaeeeeaaaaeeeeaaaazzzzzzzz" + tool_program_name = "" + tool_program_start = 0 + tool_program_size = 0 + tool_program_bytes = "" + function FPGASetToolInfo(name, size, last_bytes) + if #name > 18 then + tool_program_name = name:sub(1,15) .. "..." + else + tool_program_name = name + end + tool_program_start = math.max(size - 64, 0) + tool_program_start = tool_program_start - tool_program_start % 8 + 8 + tool_program_size = size + tool_program_bytes = last_bytes + end local fontTable = { font = "Tahoma", @@ -274,6 +286,13 @@ if CLIENT then --Program name draw.SimpleText(tool_program_name, "FPGAToolScreenHexFont", 10, 38, Color(10,10,10,255), 0, 0) + --Program size + if tool_program_size < 1024 then + draw.SimpleText(tool_program_size.."B", "FPGAToolScreenHexFont", 246, 38, Color(50,50,50,255), 2, 0) + else + draw.SimpleText(math.floor(tool_program_size/1024).."kB", "FPGAToolScreenHexFont", 246, 38, Color(50,50,50,255), 2, 0) + end + --Hex panel surface.SetDrawColor(200, 200, 200, 255) @@ -282,15 +301,20 @@ if CLIENT then --Hex address draw.SimpleText("Offset", "FPGAToolScreenSmallHexFont", 15, 65, Color(0,0,191,255), 0, 0) draw.SimpleText("00 01 02 03 04 05 06 07", "FPGAToolScreenSmallHexFont", 75, 65, Color(0,0,191,255), 0, 0) - for i=tool_program_size-7, tool_program_size do - draw.SimpleText(string.format("%04X", i), "FPGAToolScreenSmallHexFont", 15, 82 + (i-tool_program_size+7) * 20, Color(0,0,191,255), 0, 0) + local y = 0 + for i=tool_program_start, tool_program_size, 8 do + draw.SimpleText(string.format(" %04X", i), "FPGAToolScreenSmallHexFont", 15, 82 + y * 20, Color(0,0,191,255), 0, 0) + y = y + 1 end + --Hex data for line = 0, 7 do local text = "" for i=1, 8 do local c = string.byte(tool_program_bytes, line * 8 + i) - text = text .. string.format("%02X", c) .. " " + if c then + text = text .. string.format("%02X", c) .. " " + end end draw.SimpleText(text, "FPGAToolScreenSmallHexFont", 75, 82 + line * 20, Color(0,0,0,255), 0, 0) end From 4e08dc9f3374c44ef556a4a3b2cff17ab3496a92 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 14:39:39 +0100 Subject: [PATCH 076/236] Made small text correction --- lua/wire/stools/fpga.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index 879910fe1e..ccb6ab860d 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -103,7 +103,7 @@ if CLIENT then local bytes = #data if bytes > 64000 then - WireLib.AddNotify("FPGA: Code too large (exceeds 64kb)!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + WireLib.AddNotify("FPGA: Code too large (exceeds 64kB)!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end From 24f53ad5cf420e3b7f731d8552afb7959f4e249b Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 14:39:52 +0100 Subject: [PATCH 077/236] Added first step to have looping --- lua/entities/gmod_wire_fpga/init.lua | 69 ++++++++++++++++++++-------- lua/wire/fpga_gates/execution.lua | 33 +++++++------ todo.txt | 10 +++- 3 files changed, 77 insertions(+), 35 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index ac77e7bd72..ca7674e64c 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -448,7 +448,7 @@ end --EXECUTION TRIGGERING -------------------------------------------------------- function ENT:TriggerInput(iname, value) - --print("Set input " .. iname .. " to " .. value) + if self.CompilationError or self.ExecutionError or not self.Uploaded then return end self.InputValues[self.InputIds[iname]] = value self:Run({self.InputIds[iname]}) @@ -502,7 +502,6 @@ function ENT:Run(changedNodes) local activeNodesQueue = {} local i = 1 for k, id in pairs(changedNodes) do - --if self.Nodes[id].neverActive then continue end activeNodesQueue[i] = id activeNodes[id] = true i = i + 1 @@ -523,6 +522,11 @@ function ENT:Run(changedNodes) end end end + for nodeId, active in pairs(activeNodes) do + if active and getGate(self.Nodes[nodeId]).neverActive then + activeNodes[nodeId] = false + end + end --activeNodes = {0,0,0,1,1,1,1,1,1} if self.Debug then print(table.ToString(activeNodes, "activeNodes", false)) end @@ -560,6 +564,7 @@ function ENT:Run(changedNodes) ----------------------------------------- local calculations = 0 local loopDetectionNodeId = nil + local loopDetectionSize = 0 while not table.IsEmpty(nodeQueue) do calculations = calculations + 1 if calculations > 50 then break end @@ -587,31 +592,48 @@ function ENT:Run(changedNodes) elseif gate.isConstant then value = {node.value} else - if nodeId == loopDetectionNodeId then + if nodeId == loopDetectionNodeId and #nodeQueue == loopDetectionSize then --infinite loop... self:ThrowExecutionError("stuck in infinite loop", "infinite loop") break end - local executeLater = false - --if input hasnt arrived, send this node to the back of the queue - for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do - nodeId2 = connection[1] - outputNum = connection[2] - - --if node hasnt been visited yet and its going to be visited - if not nodesVisited[nodeId2] and activeNodes[nodeId2] then - --send this node to the back of the queue (potential infinite looping???) - table.insert(nodeQueue, nodeId) - executeLater = true - if loopDetectionNodeId == nil then - loopDetectionNodeId = nodeId + --neverActive gates don't wait for their input gates to finish + if !gate.neverActive then + local executeLater = false + --if input hasnt arrived, send this node to the back of the queue + for inputId, connection in pairs(self.NodeGetsInputFrom[nodeId]) do + nodeId2 = connection[1] + outputNum = connection[2] + + --if node hasnt been visited yet and its going to be visited + if not nodesVisited[nodeId2] and activeNodes[nodeId2] then + executeLater = true + if loopDetectionNodeId == nil then + loopDetectionNodeId = nodeId + loopDetectionSize = #nodeQueue + end + break end - break + end + --skip node + if executeLater then + --add connected nodes to queue + if node.connections then + for outputNum, connections in pairs(node.connections) do + for k, connection in pairs(connections) do + if nodesInQueue[connection[1]] == false then + table.insert(nodeQueue, connection[1]) + nodesInQueue[connection[1]] = true + end + end + end + end + -- send this node to the back of the queue (potential infinite looping???) + table.insert(nodeQueue, nodeId) + continue end end - --skip node - if executeLater then continue end if self.Debug then print(table.ToString(self.Values[nodeId], "", false)) end @@ -639,6 +661,7 @@ function ENT:Run(changedNodes) loopDetectionNodeId = nil + if self.Debug then print(table.ToString(value, "output", false)) end --for future reference, we've visited this node @@ -664,6 +687,14 @@ function ENT:Run(changedNodes) end end + --postcycle hook + for nodeId, node in pairs(self.Nodes) do + local gate = getGate(node) + if gate.postCycle then + gate.postCycle(self.Gates[nodeId]) + end + end + --keep track of time spent this tick self.time = self.time + (SysTime() - bench) end \ No newline at end of file diff --git a/lua/wire/fpga_gates/execution.lua b/lua/wire/fpga_gates/execution.lua index dee61f9552..521d684df2 100644 --- a/lua/wire/fpga_gates/execution.lua +++ b/lua/wire/fpga_gates/execution.lua @@ -15,17 +15,22 @@ FPGAGateActions("Execution") -- end, -- } --- FPGAGateActions["execution-last-normal"] = { --- name = "Normal Last", --- inputs = {"A"}, --- inputtypes = {"NORMAL"}, --- outputs = {"Out"}, --- outputtypes = {"NORMAL"}, --- neverActive = true, --- output = function(gate, value) --- return gate.value --- end, --- postCycle = function(gate) --- gate.value = gate.memory --- end, --- } \ No newline at end of file +FPGAGateActions["execution-last-normal"] = { + name = "Last Normal", + inputs = {"A"}, + inputtypes = {"NORMAL"}, + outputs = {"Out"}, + outputtypes = {"NORMAL"}, + neverActive = true, + output = function(gate, value) + gate.memory = value + return gate.value + end, + reset = function(gate) + gate.value = 0 + gate.memory = 0 + end, + postCycle = function(gate) + gate.value = gate.memory + end, + } \ No newline at end of file diff --git a/todo.txt b/todo.txt index 2e08bf2e2a..5c118ab789 100644 --- a/todo.txt +++ b/todo.txt @@ -17,11 +17,16 @@ FPGA Entity: Check that connections are valid (that the destination node exists) Check if gate is banned..? + Permissions + Download from friend + Friends can upload + + Looping + Execution chips have some edge cases (they dont retrigger on change as some might expect) -FPGA Tool: - Add a cool animation to the toolgun +FPGA Tool: Download from chip Be able to upload bigger than 64kb files @@ -34,6 +39,7 @@ FPGA Tool: Saving a file with capital letter fucks it up sometimes nodes cant be removed cant create node on preopened tab + chip name goes on the right side of execution interval FPGA Gates: From 33a022abac71a851f21981de0e5206deb398a886 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 14:44:28 +0100 Subject: [PATCH 078/236] Update todo.txt --- todo.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/todo.txt b/todo.txt index 5c118ab789..2efea823a2 100644 --- a/todo.txt +++ b/todo.txt @@ -6,6 +6,8 @@ FPGA Entity: HiSpeed links (memory gates?) String to memory and opposite + Finish mechanism such that loops are possible + Bugs: @@ -50,8 +52,6 @@ FPGA Gates: ######################LATER############################## FPGA Entity: - Add mechanism such that loops are possible - (Entity spikes after amount of time and errors) Fixed by removing spike limit, as it seems unavoidable This is probably why E2 limits OPS and not time. From ec268273fea64cc1149a0b036e2dd7d72a488af3 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 17:39:59 +0100 Subject: [PATCH 079/236] Fixed bug related to re-uploading chips --- lua/entities/gmod_wire_fpga/init.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index ca7674e64c..edff45fe79 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -317,7 +317,7 @@ function ENT:Upload(data) --MsgC(Color(0, 255, 100), "Uploading to FPGA\n") --print(table.ToString(data, "data", true)) - + self.Uploaded = false self.CompileError = false self.ExecutionError = false self.ErrorMessage = nil @@ -387,8 +387,6 @@ function ENT:Upload(data) self.Data = data - self.Uploaded = true - --First execution needs to be with all nodes, to properly get all the right standby values everywhere local allNodes = {} for nodeId, node in pairs(self.Nodes) do @@ -396,6 +394,8 @@ function ENT:Upload(data) end self:Run(allNodes) + + self.Uploaded = true end From a2299c2c868f7f21d920bd1fe25f21b820ddb004 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 17:42:37 +0100 Subject: [PATCH 080/236] Update todo.txt --- todo.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/todo.txt b/todo.txt index 2efea823a2..208740be32 100644 --- a/todo.txt +++ b/todo.txt @@ -10,7 +10,6 @@ FPGA Entity: Bugs: - Test: Check for errors during compilation (Hasnt been tested, but is implemented now) Check that gates exist From 3eba1bac5ba2a40a14b752615bd4776ff634ac05 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 17:49:19 +0100 Subject: [PATCH 081/236] Removed vector2 and vector4 io gates --- lua/wire/fpga_gates/io.lua | 82 +++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index ccadacd0c3..44efc16adf 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -22,27 +22,27 @@ FPGAGateActions["normal-output"] = { end } -FPGAGateActions["vector2-input"] = { - name = "2D Vector Input", - inputs = {}, - outputs = {"Out"}, - outputtypes = {"VECTOR2"}, - isInput = true, - output = function(gate) - return 0 - end -} - -FPGAGateActions["vector2-output"] = { - name = "2D Vector Output", - inputs = {"A"}, - inputtypes = {"VECTOR2"}, - outputs = {}, - isOutput = true, - output = function(gate) - return 0 - end -} +-- FPGAGateActions["vector2-input"] = { +-- name = "2D Vector Input", +-- inputs = {}, +-- outputs = {"Out"}, +-- outputtypes = {"VECTOR2"}, +-- isInput = true, +-- output = function(gate) +-- return 0 +-- end +-- } + +-- FPGAGateActions["vector2-output"] = { +-- name = "2D Vector Output", +-- inputs = {"A"}, +-- inputtypes = {"VECTOR2"}, +-- outputs = {}, +-- isOutput = true, +-- output = function(gate) +-- return 0 +-- end +-- } FPGAGateActions["vector-input"] = { name = "3D Vector Input", @@ -66,27 +66,27 @@ FPGAGateActions["vector-output"] = { end } -FPGAGateActions["vector4-input"] = { - name = "4D Vector Input", - inputs = {}, - outputs = {"Out"}, - outputtypes = {"VECTOR4"}, - isInput = true, - output = function(gate) - return 0 - end -} +-- FPGAGateActions["vector4-input"] = { +-- name = "4D Vector Input", +-- inputs = {}, +-- outputs = {"Out"}, +-- outputtypes = {"VECTOR4"}, +-- isInput = true, +-- output = function(gate) +-- return 0 +-- end +-- } -FPGAGateActions["vector4-output"] = { - name = "4D Vector Output", - inputs = {"A"}, - inputtypes = {"VECTOR4"}, - outputs = {}, - isOutput = true, - output = function(gate) - return 0 - end -} +-- FPGAGateActions["vector4-output"] = { +-- name = "4D Vector Output", +-- inputs = {"A"}, +-- inputtypes = {"VECTOR4"}, +-- outputs = {}, +-- isOutput = true, +-- output = function(gate) +-- return 0 +-- end +-- } FPGAGateActions["angle-input"] = { name = "Angle Input", From 8fb5dfaba9a63e2f20769f24cdc2d3c5240c2997 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 17:49:40 +0100 Subject: [PATCH 082/236] Renamed vector io gates --- lua/wire/fpga_gates/io.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index 44efc16adf..cf62febc2e 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -45,7 +45,7 @@ FPGAGateActions["normal-output"] = { -- } FPGAGateActions["vector-input"] = { - name = "3D Vector Input", + name = "Vector Input", inputs = {}, outputs = {"Out"}, outputtypes = {"VECTOR"}, @@ -56,7 +56,7 @@ FPGAGateActions["vector-input"] = { } FPGAGateActions["vector-output"] = { - name = "3D Vector Output", + name = "Vector Output", inputs = {"A"}, inputtypes = {"VECTOR"}, outputs = {}, From dcc2aa53dcd9aa893f6b65033354753c55919379 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 17:51:09 +0100 Subject: [PATCH 083/236] Renamed vector constant gate --- lua/wire/fpga_gates/constants.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wire/fpga_gates/constants.lua b/lua/wire/fpga_gates/constants.lua index f2f0d5936a..730f30a16f 100644 --- a/lua/wire/fpga_gates/constants.lua +++ b/lua/wire/fpga_gates/constants.lua @@ -9,7 +9,7 @@ FPGAGateActions["normal-constant"] = { } FPGAGateActions["vector-constant"] = { - name = "3D Vector Constant", + name = "Vector Constant", inputs = {}, outputs = {"Out"}, outputtypes = {"VECTOR"}, From ea201544455a3620524f6c5e38e6194771b53799 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Sun, 31 Jan 2021 17:51:35 +0100 Subject: [PATCH 084/236] Added in missing execution last gates --- lua/wire/fpga_gates/execution.lua | 97 +++++++++++++++++++++++++------ todo.txt | 2 - 2 files changed, 79 insertions(+), 20 deletions(-) diff --git a/lua/wire/fpga_gates/execution.lua b/lua/wire/fpga_gates/execution.lua index 521d684df2..79e60da0cc 100644 --- a/lua/wire/fpga_gates/execution.lua +++ b/lua/wire/fpga_gates/execution.lua @@ -16,21 +16,82 @@ FPGAGateActions("Execution") -- } FPGAGateActions["execution-last-normal"] = { - name = "Last Normal", - inputs = {"A"}, - inputtypes = {"NORMAL"}, - outputs = {"Out"}, - outputtypes = {"NORMAL"}, - neverActive = true, - output = function(gate, value) - gate.memory = value - return gate.value - end, - reset = function(gate) - gate.value = 0 - gate.memory = 0 - end, - postCycle = function(gate) - gate.value = gate.memory - end, - } \ No newline at end of file + name = "Last Normal", + inputs = {"A"}, + inputtypes = {"NORMAL"}, + outputs = {"Out"}, + outputtypes = {"NORMAL"}, + neverActive = true, + output = function(gate, value) + gate.memory = value + return gate.value + end, + reset = function(gate) + gate.value = 0 + gate.memory = 0 + end, + postCycle = function(gate) + gate.value = gate.memory + end, +} + +FPGAGateActions["execution-last-vector"] = { + name = "Last Vector", + inputs = {"A"}, + inputtypes = {"VECTOR"}, + outputs = {"Out"}, + outputtypes = {"VECTOR"}, + neverActive = true, + output = function(gate, value) + gate.memory = value + return gate.value + end, + reset = function(gate) + gate.value = Vector(0, 0, 0) + gate.memory = Vector(0, 0, 0) + end, + postCycle = function(gate) + gate.value = gate.memory + end, +} + +FPGAGateActions["execution-last-angle"] = { + name = "Last Angle", + inputs = {"A"}, + inputtypes = {"ANGLE"}, + outputs = {"Out"}, + outputtypes = {"ANGLE"}, + neverActive = true, + output = function(gate, value) + gate.memory = value + return gate.value + end, + reset = function(gate) + gate.value = Angle(0, 0, 0) + gate.memory = Angle(0, 0, 0) + end, + postCycle = function(gate) + gate.value = gate.memory + end, +} + +FPGAGateActions["execution-last-string"] = { + name = "Last String", + inputs = {"A"}, + inputtypes = {"STRING"}, + outputs = {"Out"}, + outputtypes = {"STRING"}, + neverActive = true, + output = function(gate, value) + gate.memory = value + return gate.value + end, + reset = function(gate) + gate.value = "" + gate.memory = "" + end, + postCycle = function(gate) + gate.value = gate.memory + end, +} + diff --git a/todo.txt b/todo.txt index 208740be32..bbc326c00c 100644 --- a/todo.txt +++ b/todo.txt @@ -6,8 +6,6 @@ FPGA Entity: HiSpeed links (memory gates?) String to memory and opposite - Finish mechanism such that loops are possible - Bugs: Test: From ae4e3a98791a8ea6e87bc9b22d0b70452027d32f Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 3 Feb 2021 13:36:02 +0100 Subject: [PATCH 085/236] Update addon.json --- addon.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addon.json b/addon.json index c2219583c1..4b71813e47 100644 --- a/addon.json +++ b/addon.json @@ -6,8 +6,8 @@ "ignore" : [ ".git*", - ".gitignore", "license", - "readme.md", + "readme.md", + "todo.txt" ] } \ No newline at end of file From 401d2b1665feb91bd536581789a5bdf4e7d4f7fd Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 3 Feb 2021 14:21:25 +0100 Subject: [PATCH 086/236] Fixed saving bug --- lua/wire/client/node_editor/wire_fpga_editor.lua | 12 ++++++------ todo.txt | 3 +++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 0421eeaf05..8243f5046f 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -1103,9 +1103,8 @@ function Editor:SaveFile(Line, close, SaveAs) end Derma_StringRequestNoBlur("Save to New File", "", (str ~= nil and str .. "/" or "") .. self.savefilefn, function(strTextOut) - strTextOut = string.gsub(strTextOut, ".", invalid_filename_chars) + strTextOut = string.gsub(strTextOut, ".", invalid_filename_chars):lower() self:SaveFile(self.Location .. "/" .. strTextOut .. ".txt", close) - self:UpdateActiveTabTitle() end) return end @@ -1113,14 +1112,15 @@ function Editor:SaveFile(Line, close, SaveAs) file.Write(Line, self:GetData()) surface.PlaySound("ambient/water/drip3.wav") - + + if not self.chip then self:ChosenFile(Line) end + self:UpdateActiveTabTitle() - if not self.chip then self:ChosenFile(Line) end if close then - GAMEMODE:AddNotify("Source code saved as " .. Line .. ".", NOTIFY_GENERIC, 7) + GAMEMODE:AddNotify("FPGA saved as " .. Line .. ".", NOTIFY_GENERIC, 7) self:Close() - end + end end function Editor:LoadFile(Line, forcenewtab) diff --git a/todo.txt b/todo.txt index bbc326c00c..6133d8867a 100644 --- a/todo.txt +++ b/todo.txt @@ -6,6 +6,9 @@ FPGA Entity: HiSpeed links (memory gates?) String to memory and opposite + Add e2 commands that can find fpgas + check performance use + Bugs: Test: From af4d6a1459d0437af039b0291295026d0730380d Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 3 Feb 2021 15:51:52 +0100 Subject: [PATCH 087/236] Updated the limit and added some permission work --- lua/wire/stools/fpga.lua | 10 +++++----- todo.txt | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index ccb6ab860d..670bac9171 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -12,7 +12,7 @@ if CLIENT then } end WireToolSetup.BaseLang() -WireToolSetup.SetupMax(7) +WireToolSetup.SetupMax(40) TOOL.ClientConVar = { model = "models/cheeze/wires/cpu.mdl", @@ -141,10 +141,10 @@ if SERVER then return end - -- if not E2Lib.isFriend(toent.player,ply) then - -- WireLib.AddNotify(ply, "You are not allowed to upload to the target FPGA chip. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_DRIP3) - -- return - -- end + if not hook.Run("CanTool", ply, WireLib.dummytrace(chip), "wire_fpga") then + WireLib.AddNotify(ply, "FPGA: You are not allowed to upload to the target FPGA chip. Upload aborted.", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + return + end local data = net.ReadString() local ok, ret = pcall(WireLib.von.deserialize, data) diff --git a/todo.txt b/todo.txt index 6133d8867a..219b668cf9 100644 --- a/todo.txt +++ b/todo.txt @@ -36,16 +36,16 @@ FPGA Tool: FPGA Editor: Features: Improve performance (only draw visible nodes) + Fail better on loading wrong format files Bugs: - Saving a file with capital letter fucks it up sometimes nodes cant be removed cant create node on preopened tab chip name goes on the right side of execution interval FPGA Gates: - + Add CPU related gates (PC, various ALUs, ADDERS, etc) From 7e9fa7b1d1511513e827c40cea33afa9445878ff Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 3 Feb 2021 20:47:18 +0100 Subject: [PATCH 088/236] Fixed bug where clients wouldn't create fpgachip dir --- lua/entities/gmod_wire_fpga/shared.lua | 6 +++++- todo.txt | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/shared.lua b/lua/entities/gmod_wire_fpga/shared.lua index 1f368379b1..4a34d3ff55 100644 --- a/lua/entities/gmod_wire_fpga/shared.lua +++ b/lua/entities/gmod_wire_fpga/shared.lua @@ -9,4 +9,8 @@ ENT.Instructions = "" ENT.WireDebugName = "FPGA" CreateConVar("wire_fpga_quota_avg", "2000", {FCVAR_REPLICATED}) -CreateConVar("wire_fpga_quota_spike", "-1", {FCVAR_REPLICATED}) \ No newline at end of file +CreateConVar("wire_fpga_quota_spike", "-1", {FCVAR_REPLICATED}) + +if CLIENT then + file.CreateDir("fpgachip") +end \ No newline at end of file diff --git a/todo.txt b/todo.txt index 219b668cf9..edef36609a 100644 --- a/todo.txt +++ b/todo.txt @@ -10,6 +10,16 @@ FPGA Entity: check performance use Bugs: + + Feedback: + No "the menu" refer to the right + Once the player creates a node the help disappears. + + Maybe change from D + Click outside of "D" menu should save + Feedback on writing wrong format (angle, vector) + + Test: Check for errors during compilation (Hasnt been tested, but is implemented now) @@ -21,7 +31,7 @@ FPGA Entity: Permissions Download from friend - Friends can upload + -Friends can upload Looping Execution chips have some edge cases (they dont retrigger on change as some might expect) @@ -31,8 +41,6 @@ FPGA Entity: FPGA Tool: Download from chip - Be able to upload bigger than 64kb files - FPGA Editor: Features: Improve performance (only draw visible nodes) @@ -56,7 +64,6 @@ FPGA Entity: Fixed by removing spike limit, as it seems unavoidable This is probably why E2 limits OPS and not time. - more clear error messages, just for debugging FPGA Tool: Be able to upload bigger than 64kb files @@ -73,5 +80,4 @@ FPGA Tool: FPGA Gates: Maybe add the various "luxuries" that e2 have (changed and last notably) Should these have wildcard types? - (this is pretty fucking hard???) - figure out logic of how exactly a "last" gate should work, since its pretty complicated \ No newline at end of file + (this is pretty fucking hard???) \ No newline at end of file From 45388e006643bd84617df030cf2a4836e8d83962 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Wed, 3 Feb 2021 23:34:43 +0100 Subject: [PATCH 089/236] Various tweaks --- lua/wire/client/node_editor/nodeeditor.lua | 30 +++++++++++-------- .../client/node_editor/wire_fpga_editor.lua | 12 ++++---- todo.txt | 17 +++++------ 3 files changed, 31 insertions(+), 28 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index e37b431a31..3b6feeaeee 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -129,7 +129,7 @@ function Editor:InitComponents() -- this doesnt work self.C.Name.OnLoseFocus = function (self) if self:GetValue() == "" then - self:SetValue("empty") + self:SetValue("gate") end end @@ -282,7 +282,7 @@ function Editor:SetData(data) if data.Name then self.C.Name:SetValue(data.Name) else - self.C.Name:SetValue("empty") + self.C.Name:SetValue("gate") end if data.ExecutionInterval then @@ -304,7 +304,7 @@ function Editor:SetData(data) end function Editor:ClearData() - self.C.Name:SetValue("empty") + self.C.Name:SetValue("gate") self.Nodes = {} self.Position = {0, 0} self.Zoom = 5 @@ -589,16 +589,22 @@ end function Editor:PaintHelp() local x, y = self:PosToScr(0, 0) - surface.SetFont("Default") + surface.SetFont("NodeName") surface.SetTextColor(255, 255, 255) - local helpText = [[To create a node, chose a gate from the menu and click 'C' - Drag around the plane with right mouse button - Connect inputs and outputs by clicking on either, and dragging to the other - 'X' deletes the node under the cursor - 'D' configures the node under the cursor (input/output names, constant values) + local helpText = [[Drag gates and draw selections with the right mouse button, + and drag around the plane with the right mouse button. + Connect inputs and outputs by right clicking on either, and dragging to the other + + 'C' creates a gate at the cursor position (select which gate on the right menu) + 'X' deletes the gate under the cursor (or with a selection, deletes all selected gates) + 'E' edits the gate under the cursor (input/output names, constant values) + + 'Ctrl + C' copies the selected gates (relative to mouse position) + 'Ctrl + V' pastes the copied gates (relative to mouse position) + - To create inputs and outputs for the FPGA, use the gates found in 'FPGA/Input & Output' + To create inputs and outputs for the FPGA chip, use the gates found in 'FPGA/Input & Output' ]] for line in helpText:gmatch("([^\n]*)\n?") do @@ -1000,8 +1006,8 @@ function Editor:OnKeyCodePressed(code) gx, gy) end - elseif code == KEY_D then - --Modify + elseif code == KEY_E then + --Edit local nodeId = self:GetNodeAt(x, y) if nodeId then local node = self.Nodes[nodeId] diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 8243f5046f..b46c4d7df2 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -465,7 +465,7 @@ function Editor:GetNextAvailableTab() end function Editor:NewTab() - local sheet = self:CreateTab("empty") + local sheet = self:CreateTab("gate") self:SetActiveTab(sheet.Tab) self:NewChip(true) @@ -507,7 +507,7 @@ function Editor:CloseTab(_tab) -- There's only one tab open, no need to actually close any tabs if self:GetNumTabs() == 1 then - activetab:SetText("empty") + activetab:SetText("gate") self.C.TabHolder:InvalidateLayout() self:NewChip(true) return @@ -532,7 +532,7 @@ function Editor:CloseTab(_tab) self:SetActiveTab(othertab) self:SetLastTab() else -- Reset the current tab (backup) - self:GetActiveTab():SetText("empty") + self:GetActiveTab():SetText("gate") self.C.TabHolder:InvalidateLayout() self:NewChip(true) return @@ -546,7 +546,7 @@ function Editor:CloseTab(_tab) if othertab and othertab:IsValid() then -- If that other tab is valid, use it self:SetActiveTab(othertab) else -- Reset the current tab (backup) - self:GetActiveTab():SetText("empty") + self:GetActiveTab():SetText("gate") self.C.TabHolder:InvalidateLayout() self:NewChip(true) return @@ -620,7 +620,7 @@ function Editor:InitComponents() self.C.Credit = self:addComponent(vgui.Create("DTextEntry", self), -160, 52, 150, 190) -- Credit box self.C.Credit:SetEditable(false) - self:CreateTab("empty") + self:CreateTab("gate") -- extra component options @@ -868,7 +868,7 @@ function Editor:NewChip(incurrent) self:ChosenFile() -- Set title - self:GetActiveTab():SetText("empty") + self:GetActiveTab():SetText("gate") self.C.TabHolder:InvalidateLayout() self:ClearData() diff --git a/todo.txt b/todo.txt index edef36609a..b79277d98f 100644 --- a/todo.txt +++ b/todo.txt @@ -10,16 +10,6 @@ FPGA Entity: check performance use Bugs: - - Feedback: - No "the menu" refer to the right - Once the player creates a node the help disappears. - - Maybe change from D - Click outside of "D" menu should save - Feedback on writing wrong format (angle, vector) - - Test: Check for errors during compilation (Hasnt been tested, but is implemented now) @@ -50,6 +40,13 @@ FPGA Tool: sometimes nodes cant be removed cant create node on preopened tab chip name goes on the right side of execution interval + extra frame on first tab created + + Feedback: + Click outside of "E" menu should save + Feedback on writing wrong format (angle, vector) + + Copying should copy from center FPGA Gates: From 313051a98ea9612d07de9eef76d83d1698455e64 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 17:44:25 +0100 Subject: [PATCH 090/236] Removed error message on no code specified --- lua/entities/gmod_wire_fpga/init.lua | 1 - lua/wire/stools/fpga.lua | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index edff45fe79..bd03d59385 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -152,7 +152,6 @@ function ENT:Initialize() self.NodeGetsInputFrom = {} self:UpdateOverlay(true) - self:SetColor(Color(255, 0, 0, self:GetColor().a)) end -------------------------------------------------------- diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index 670bac9171..3da903099d 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -95,7 +95,7 @@ if CLIENT then end if not data and not FPGA_Editor then - WireLib.AddNotify("FPGA: No code specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + --WireLib.AddNotify("FPGA: No code specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) return end data = data or FPGA_Editor:GetData() From 8a13319b1a61b76c595bceb35b76ed8cb173fddc Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 18:31:25 +0100 Subject: [PATCH 091/236] Added downloading --- lua/entities/gmod_wire_fpga/init.lua | 6 +++ lua/wire/client/node_editor/nodeeditor.lua | 9 +++- .../client/node_editor/wire_fpga_editor.lua | 8 +--- lua/wire/stools/fpga.lua | 42 ++++++++++++++++++- todo.txt | 2 - 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index bd03d59385..bc3aa3cb6b 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -171,6 +171,12 @@ end duplicator.RegisterEntityClass("gmod_wire_fpga", WireLib.MakeWireEnt, "Data", "UploadData") +-------------------------------------------------------- +--RECONSTRUCTION +-------------------------------------------------------- +function ENT:GetOriginal() + return WireLib.von.serialize(self.Data) +end -------------------------------------------------------- --VALIDATION diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 3b6feeaeee..8134632660 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -36,6 +36,8 @@ WildColor = { } function Editor:Init() + self.Nodes = {} + self.DraggingWorld = false self.DraggingNode = nil self.DraggingOffset = {0, 0} @@ -277,7 +279,11 @@ end function Editor:SetData(data) local data = WireLib.von.deserialize(data) -- error check - self.Nodes = data.Nodes + if data.Nodes then + self.Nodes = data.Nodes + else + self.Nodes = {} + end if data.Name then self.C.Name:SetValue(data.Name) @@ -1042,7 +1048,6 @@ function Editor:CreateIONamingWindow() end self.IONamingNameEntry = vgui.Create("DTextEntry", pnl) - --FindEntry:SetPos(30, 4) self.IONamingNameEntry:Dock(BOTTOM) self.IONamingNameEntry:SetSize(175, 20) self.IONamingNameEntry:RequestFocus() diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index b46c4d7df2..be1171feff 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -1031,11 +1031,7 @@ function Editor:Open(Line, data, forcenewtab) if self:IsVisible() and not Line and not data then self:Close() end hook.Run("WireFPGAEditorOpen", self, Line, data, forcenewtab) self:SetV(true) - if self.chip then - self.C.SaE:SetText("Upload & Exit") - else - self.C.SaE:SetText("Save and Exit") - end + self.C.SaE:SetText("Save and Exit") if data then if not forcenewtab then for i = 1, self:GetNumTabs() do @@ -1052,7 +1048,7 @@ function Editor:Open(Line, data, forcenewtab) local tab if self.NewTabOnOpen:GetBool() or forcenewtab then - tab = self:CreateTab(tabtext).Tab + tab = self:CreateTab("Download").Tab else tab = self:GetActiveTab() end diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index 3da903099d..d4bf086444 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -30,6 +30,7 @@ end if SERVER then util.AddNetworkString("FPGA_Upload") + util.AddNetworkString("FPGA_Download") util.AddNetworkString("FPGA_OpenEditor") -- Reset @@ -64,9 +65,15 @@ if SERVER then -- Open editor function TOOL:RightClick(trace) - --check if hit chip, download the nodes off that chip + if trace.Entity:IsPlayer() then return false end + + if IsValid(trace.Entity) and trace.Entity:GetClass() == "gmod_wire_fpga" then + self:Download(trace.Entity) + return true + end + net.Start("FPGA_OpenEditor") net.Send(self:GetOwner()) - return true + return false end @@ -80,6 +87,22 @@ if SERVER then net.WriteInt(ent:EntIndex(), 32) net.Send(self:GetOwner()) end + ------------------------------------------------------------------------------ + -- Downloading (Server -> Client) + ------------------------------------------------------------------------------ + -- Send FPGA data to client + function TOOL:Download(ent) + local player = self:GetOwner() + + if not hook.Run("CanTool", player, WireLib.dummytrace(ent), "wire_fpga") then + WireLib.AddNotify(player, "You're not allowed to download from this FPGA (ent index: " .. ent:EntIndex() .. ").", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) + return + end + + net.Start("FPGA_Download") + net.WriteString(ent:GetOriginal()) + net.Send(player) + end end if CLIENT then -------------------------------------------------------------- @@ -125,6 +148,21 @@ if CLIENT then end) timer.Create("FPGA_Upload_Delay_Error",0.03*31,1,function() WireLib.AddNotify("FPGA: Invalid FPGA entity specified!", NOTIFY_ERROR, 7, NOTIFYSOUND_ERROR1) end) end) + + -------------------------------------------------------------- + -- Clientside Receive + -------------------------------------------------------------- + -- Received download data + net.Receive("FPGA_Download", function(len, ply) + if not FPGA_Editor then + FPGA_Editor = vgui.Create("FPGAEditorFrame") + FPGA_Editor:Setup("FPGA Editor", "fpgachip") + end + + local data = net.ReadString() + + FPGA_Editor:Open(nil, data, true) + end) end if SERVER then diff --git a/todo.txt b/todo.txt index b79277d98f..29220ce57a 100644 --- a/todo.txt +++ b/todo.txt @@ -29,8 +29,6 @@ FPGA Entity: FPGA Tool: - Download from chip - FPGA Editor: Features: Improve performance (only draw visible nodes) From 686aa29af00f093e7d9cb77463ea999e2229ad01 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 19:46:49 +0100 Subject: [PATCH 092/236] Fixed derma changing up order of execution interval and chip name --- lua/wire/client/node_editor/nodeeditor.lua | 13 +++++++------ todo.txt | 1 - 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 8134632660..0a9a51e294 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -125,15 +125,17 @@ function Editor:InitComponents() self.C.NameLabel:SetPos(x, 4) self.C.Name = vgui.Create("DTextEntry", self.C.TopBar) self.C.Name:SetEditable(true) - self.C.Name:SetSize(140, 20) - x = x + 140 - self.C.Name:Dock(LEFT) + self.C.Name:SetSize(140, 15) + self.C.Name:SetPos(x-2, 18) + --self.C.Name:Dock(LEFT) + --self.C.Name:DockMargin(0,0,0,0) -- this doesnt work self.C.Name.OnLoseFocus = function (self) if self:GetValue() == "" then self:SetValue("gate") end end + x = x + 140 x = x + 20 self.C.ExecutionIntervalLabel = vgui.Create("DLabel", self.C.TopBar) @@ -151,9 +153,8 @@ function Editor:InitComponents() self.C.ExecutionInterval:SetMax(1) self.C.ExecutionInterval:SetMin(0.01) self.C.ExecutionInterval:SetValue(0.01) - self.C.ExecutionInterval:SetSize(38, 20) - self.C.ExecutionInterval:Dock(LEFT) - self.C.ExecutionInterval:DockMargin(54,0,0,0) + self.C.ExecutionInterval:SetSize(38, 15) + self.C.ExecutionInterval:SetPos(x+32, 18) --Gate spawning self.C.Holder = vgui.Create("DPanel", self) diff --git a/todo.txt b/todo.txt index 29220ce57a..bc05e9985e 100644 --- a/todo.txt +++ b/todo.txt @@ -37,7 +37,6 @@ FPGA Tool: Bugs: sometimes nodes cant be removed cant create node on preopened tab - chip name goes on the right side of execution interval extra frame on first tab created Feedback: From be69f155aa7df6d95a0eed85f0491a246762af21 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 19:49:04 +0100 Subject: [PATCH 093/236] Update todo.txt --- todo.txt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/todo.txt b/todo.txt index bc05e9985e..cd18e734c2 100644 --- a/todo.txt +++ b/todo.txt @@ -1,14 +1,8 @@ FPGA Entity: Features: - Improve execution - Optimize execution - HiSpeed links (memory gates?) String to memory and opposite - Add e2 commands that can find fpgas - check performance use - Bugs: Test: @@ -31,7 +25,6 @@ FPGA Entity: FPGA Tool: FPGA Editor: Features: - Improve performance (only draw visible nodes) Fail better on loading wrong format files Bugs: @@ -54,22 +47,31 @@ FPGA Gates: ######################LATER############################## FPGA Entity: + Improve execution + Optimize execution + (Entity spikes after amount of time and errors) Fixed by removing spike limit, as it seems unavoidable - This is probably why E2 limits OPS and not time. + This is probably why E2 limits OPS and not time + + Add e2 commands that can find fpgas + check performance use FPGA Tool: Be able to upload bigger than 64kb files FPGA Editor: - Bugs: - Copying and pasting will fail if nodes are not sequential + Improve performance (only draw visible nodes) + Shortcuts? Grid Undo Improve the guide on how to use + Bugs: + Copying and pasting will fail if nodes are not sequential + FPGA Gates: Maybe add the various "luxuries" that e2 have (changed and last notably) From 6b55960fa699fb17040ca37f63c6269ee383bb0b Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 19:54:21 +0100 Subject: [PATCH 094/236] Fixed bug related to downloading empty chips --- lua/entities/gmod_wire_fpga/init.lua | 6 +++++- lua/wire/client/node_editor/wire_fpga_editor.lua | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index bc3aa3cb6b..8513ec6189 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -175,7 +175,11 @@ duplicator.RegisterEntityClass("gmod_wire_fpga", WireLib.MakeWireEnt, "Data", "U --RECONSTRUCTION -------------------------------------------------------- function ENT:GetOriginal() - return WireLib.von.serialize(self.Data) + if self.Data then + return WireLib.von.serialize(self.Data) + else + return WireLib.von.serialize({}) + end end -------------------------------------------------------- diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index be1171feff..a5816ec18a 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -1054,7 +1054,8 @@ function Editor:Open(Line, data, forcenewtab) end self:SetActiveTab(tab) - self:ChosenFile() + self:ChosenFile() + self:ClearData() self:SetData(data) self:UpdateActiveTabTitle() From bf89b9f590eaf615b8885045e8c280f254a44231 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 20:07:16 +0100 Subject: [PATCH 095/236] Made error detection on open better, and made shutdow hook work --- lua/wire/client/node_editor/nodeeditor.lua | 29 ++++++++++--------- .../client/node_editor/wire_fpga_editor.lua | 5 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 0a9a51e294..981254a88d 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -278,28 +278,25 @@ function Editor:GetData() end function Editor:SetData(data) - local data = WireLib.von.deserialize(data) - -- error check - if data.Nodes then - self.Nodes = data.Nodes - else - self.Nodes = {} + local ok, data = pcall(WireLib.von.deserialize, data) + if not ok then + self:ClearData() + self.C.Name:SetValue("corrupt") + return end - if data.Name then - self.C.Name:SetValue(data.Name) - else - self.C.Name:SetValue("gate") - end + if data.Nodes then self.Nodes = data.Nodes else self.Nodes = {} end - if data.ExecutionInterval then + if data.Name then self.C.Name:SetValue(data.Name) else self.C.Name:SetValue("gate") end + + if data.ExecutionInterval then self.C.ExecutionInterval:SetValue(data.ExecutionInterval) else self.C.ExecutionInterval:SetValue(0.01) end - if data.Position then self.Position = data.Position end - if data.Zoom then self.Zoom = data.Zoom end + if data.Position then self.Position = data.Position else self.Position = {0, 0} end + if data.Zoom then self.Zoom = data.Zoom else self.Zoom = 5 end self.InputNameCounter = 0 self.OutputNameCounter = 0 @@ -323,6 +320,10 @@ function Editor:GetName() return self.C.Name:GetValue() end +function Editor:HasNodes() + return #self.Nodes > 0 +end + -- GATES function Editor:GetGate(node) if node.type == "wire" then diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index a5816ec18a..72a52f7e3d 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -727,7 +727,7 @@ function Editor:InitComponents() end self.C.Credit:SetTextColor(Color(0, 0, 0, 255)) - self.C.Credit:SetText("\t\tCREDITS\n\n\tEditor by: \tSyranide and Shandolum\n\n\tTabs (and more) added by Divran.\n\n\tFixed for GMod13 By Ninja101 \n\n\t Rewritten into a node editor by Lysdal") -- Sure why not ;) + self.C.Credit:SetText("\t\tCREDITS\n\n\tEditor by: \tSyranide and Shandolum\n\n\tTabs (and more) added by Divran.\n\n\tFixed for GMod13 By Ninja101 \n\n\tRewritten into a node editor by Lysdal") -- Sure why not ;) self.C.Credit:SetMultiline(true) self.C.Credit:SetVisible(false) @@ -885,7 +885,7 @@ function Editor:InitShutdownHook() hook.Add("ShutDown", "wire_fpga_ShutDown" .. id, function() -- if wire_fpga_editor == nil then return end local buffer = self:GetData() - if buffer == defaultcode then return end + if not self:GetCurrentEditor():HasNodes() then return end file.Write(self.Location .. "/_shutdown_.txt", buffer) if wire_fpga_editor_savetabs:GetBool() then @@ -1055,7 +1055,6 @@ function Editor:Open(Line, data, forcenewtab) self:SetActiveTab(tab) self:ChosenFile() - self:ClearData() self:SetData(data) self:UpdateActiveTabTitle() From b69bc700830a03aee34449bd13455a5c486b7d11 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 20:37:30 +0100 Subject: [PATCH 096/236] Fixed frame being created on first tab --- lua/wire/client/node_editor/wire_fpga_editor.lua | 6 +++--- todo.txt | 4 ---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lua/wire/client/node_editor/wire_fpga_editor.lua b/lua/wire/client/node_editor/wire_fpga_editor.lua index 72a52f7e3d..ce2ab18d9b 100644 --- a/lua/wire/client/node_editor/wire_fpga_editor.lua +++ b/lua/wire/client/node_editor/wire_fpga_editor.lua @@ -619,8 +619,6 @@ function Editor:InitComponents() self.C.Control = self:addComponent(vgui.Create("Panel", self), -350, 52, 342, -32) -- Control Panel self.C.Credit = self:addComponent(vgui.Create("DTextEntry", self), -160, 52, 150, 190) -- Credit box self.C.Credit:SetEditable(false) - - self:CreateTab("gate") -- extra component options @@ -732,7 +730,9 @@ function Editor:InitComponents() self.C.Credit:SetVisible(false) self:InitControlPanel(self.C.Control) -- making it seperate for better overview - self.C.Control:SetVisible(false) + self.C.Control:SetVisible(false) + + self:CreateTab("gate") end function Editor:AutoSave() diff --git a/todo.txt b/todo.txt index cd18e734c2..c5db34ac17 100644 --- a/todo.txt +++ b/todo.txt @@ -25,12 +25,8 @@ FPGA Entity: FPGA Tool: FPGA Editor: Features: - Fail better on loading wrong format files Bugs: - sometimes nodes cant be removed - cant create node on preopened tab - extra frame on first tab created Feedback: Click outside of "E" menu should save From 56b5441d52e42ec530e5d8b69a59112875474a06 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 20:40:03 +0100 Subject: [PATCH 097/236] Update todo.txt --- todo.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/todo.txt b/todo.txt index c5db34ac17..390012865c 100644 --- a/todo.txt +++ b/todo.txt @@ -36,8 +36,6 @@ FPGA Tool: FPGA Gates: - Add CPU related gates (PC, various ALUs, ADDERS, etc) - ######################LATER############################## @@ -70,6 +68,8 @@ FPGA Tool: FPGA Gates: + Add CPU related gates (PC, various ALUs, ADDERS, etc) + Maybe add the various "luxuries" that e2 have (changed and last notably) Should these have wildcard types? (this is pretty fucking hard???) \ No newline at end of file From 53a22f7e08bccbee99e350cfcb38969b66b92985 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 21:26:27 +0100 Subject: [PATCH 098/236] Made copying copy from center --- lua/wire/client/node_editor/nodeeditor.lua | 6 ++++-- todo.txt | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 981254a88d..5005957a02 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -794,6 +794,8 @@ function Editor:CopyNodes(nodeIds) i = i + 1 end + local nodeAmount = table.Count(nodeIds) + self.CopyOffset = {0, 0} self.CopyBuffer = {} for nodeId, _ in pairs(nodeIds) do local node = self.Nodes[nodeId] @@ -822,6 +824,8 @@ function Editor:CopyNodes(nodeIds) end table.insert(self.CopyBuffer, nodeCopy) + + self.CopyOffset = {self.CopyOffset[1] + node.x / nodeAmount, self.CopyOffset[2] + node.y / nodeAmount} end end @@ -979,8 +983,6 @@ function Editor:OnKeyCodePressed(code) if code == KEY_C then --Copy if table.Count(self.SelectedNodes) > 0 then - local gx, gy = self:ScrToPos(x, y) - self.CopyOffset = {gx, gy} self:CopyNodes(self.SelectedNodes) else self.CopyBuffer = {} diff --git a/todo.txt b/todo.txt index 390012865c..fa26b30df7 100644 --- a/todo.txt +++ b/todo.txt @@ -27,6 +27,7 @@ FPGA Tool: Features: Bugs: + Dragging bug (release mouse outside editor) Feedback: Click outside of "E" menu should save From 20b934ac2d8fc4dd6f81f223740f37e07f7c1d99 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Thu, 4 Feb 2021 21:31:51 +0100 Subject: [PATCH 099/236] Fixed bugs related to releasing mouse outside window --- lua/wire/client/node_editor/nodeeditor.lua | 29 +++++++++++++--------- todo.txt | 3 --- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 5005957a02..23559afcaa 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -636,6 +636,16 @@ function Editor:Paint() self:PaintDebug() + -- detects if mouse is let go outside of the window + if not input.IsMouseDown(MOUSE_RIGHT) then + self.DraggingWorld = nil + end + if not input.IsMouseDown(MOUSE_LEFT) then + self.DraggingNode = nil + self.DrawingConnection = nil + self.DrawingSelection = nil + end + -- moving the plane if self.DraggingWorld then local x, y = self:CursorPos() @@ -678,19 +688,14 @@ function Editor:Paint() end -- selecting if self.DrawingSelection then - if not input.IsMouseDown(MOUSE_LEFT) then - -- detects if mouse is let go outside of the window - self.DrawingSelection = nil - else - local sx, sy = self:PosToScr(self.DrawingSelection[1], self.DrawingSelection[2]) - local mx, my = self:CursorPos() - - local x, y = math.min(sx, mx), math.min(sy, my) - local w, h = math.abs(sx-mx), math.abs(sy-my) + local sx, sy = self:PosToScr(self.DrawingSelection[1], self.DrawingSelection[2]) + local mx, my = self:CursorPos() + + local x, y = math.min(sx, mx), math.min(sy, my) + local w, h = math.abs(sx-mx), math.abs(sy-my) - surface.SetDrawColor(self.SelectionColor) - surface.DrawOutlinedRect(x, y, w, h) - end + surface.SetDrawColor(self.SelectionColor) + surface.DrawOutlinedRect(x, y, w, h) end local x, y = self:CursorPos() diff --git a/todo.txt b/todo.txt index fa26b30df7..e6c2cb1295 100644 --- a/todo.txt +++ b/todo.txt @@ -27,14 +27,11 @@ FPGA Tool: Features: Bugs: - Dragging bug (release mouse outside editor) Feedback: Click outside of "E" menu should save Feedback on writing wrong format (angle, vector) - Copying should copy from center - FPGA Gates: From 9be9355e5eda74fa2604a250508047ebd82b2687 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 10:57:27 +0100 Subject: [PATCH 100/236] "Banned" string to memory and string from memory --- lua/wire/client/node_editor/nodeeditor.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 23559afcaa..69b3544204 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -235,7 +235,7 @@ function Editor:InitComponents() local allowed_gates = {} local any_allowed = false for k,v in pairs(gatefuncs) do - if not v.is_banned then + if not v.is_banned and not (k == "string_to_memory" or k == "string_from_memory") then allowed_gates[k] = v any_allowed = true end From cbd38116fd8821a9cd9b460e8a63a6264118209a Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 11:08:10 +0100 Subject: [PATCH 101/236] Renamed highspeed-input to wirelink-input --- lua/wire/fpga_gates/io.lua | 6 +++--- todo.txt | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lua/wire/fpga_gates/io.lua b/lua/wire/fpga_gates/io.lua index cf62febc2e..57e742f96e 100644 --- a/lua/wire/fpga_gates/io.lua +++ b/lua/wire/fpga_gates/io.lua @@ -198,10 +198,10 @@ FPGAGateActions["ranger-output"] = { end } -FPGAGateActions["hispeed-input"] = { - name = "Highspeed Input", +FPGAGateActions["wirelink-input"] = { + name = "Wirelink Input", inputs = {}, - outputs = {"Memory"}, + outputs = {"Wirelink"}, outputtypes = {"WIRELINK"}, isInput = true, output = function(gate) diff --git a/todo.txt b/todo.txt index e6c2cb1295..7a1dcca8e4 100644 --- a/todo.txt +++ b/todo.txt @@ -1,7 +1,6 @@ FPGA Entity: Features: HiSpeed links (memory gates?) - String to memory and opposite Bugs: @@ -68,6 +67,8 @@ FPGA Tool: FPGA Gates: Add CPU related gates (PC, various ALUs, ADDERS, etc) + String from memory and string to memory are "banned". Maybe look into restoring their functionality. + Maybe add the various "luxuries" that e2 have (changed and last notably) Should these have wildcard types? (this is pretty fucking hard???) \ No newline at end of file From 7a65b2cf8a89dd4944ff4a161e86eb40ddc49487 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 11:12:58 +0100 Subject: [PATCH 102/236] Updated todo.txt --- lua/entities/gmod_wire_fpga/init.lua | 1 - todo.txt | 9 ++++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lua/entities/gmod_wire_fpga/init.lua b/lua/entities/gmod_wire_fpga/init.lua index 8513ec6189..290f082341 100644 --- a/lua/entities/gmod_wire_fpga/init.lua +++ b/lua/entities/gmod_wire_fpga/init.lua @@ -428,7 +428,6 @@ function ENT:Reset() --Functions for gates local owner = self:GetPlayer() - print(owner) --Reset gate table self.Gates = {} for nodeId, node in pairs(self.Nodes) do diff --git a/todo.txt b/todo.txt index 7a1dcca8e4..3f47ff251c 100644 --- a/todo.txt +++ b/todo.txt @@ -1,6 +1,5 @@ FPGA Entity: Features: - HiSpeed links (memory gates?) Bugs: @@ -41,6 +40,14 @@ FPGA Entity: Improve execution Optimize execution + HiSpeed links (memory gates?) + Wirelinks already work + "Wrapper" fpga highspeed device? + Define ranges that memory is routed through + Or single values + How to signify that a link is highspeed? Pseudo type? + + (Entity spikes after amount of time and errors) Fixed by removing spike limit, as it seems unavoidable This is probably why E2 limits OPS and not time From 8b9423b2334ad4f01b47dd304641fd43fb21c993 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 12:13:43 +0100 Subject: [PATCH 103/236] Fixed node pasting bug (non sequential) --- lua/wire/client/node_editor/nodeeditor.lua | 6 +++++- todo.txt | 6 ++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 69b3544204..3fb5c94fd1 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -839,6 +839,10 @@ function Editor:PasteNodes(x, y) self.SelectedNodes = {} local i = #self.Nodes + 1 for copyNodeId, _ in pairs(self.CopyBuffer) do + while self.Nodes[i] do + i = i + 1 + end + nodeIdLookup[copyNodeId] = i self.SelectedNodes[i] = true i = i + 1 @@ -852,7 +856,7 @@ function Editor:PasteNodes(x, y) copyNode.x = (copyNode.x - self.CopyOffset[1]) + x copyNode.y = (copyNode.y - self.CopyOffset[2]) + y - table.insert(self.Nodes, copyNode) + self.Nodes[nodeIdLookup[copyNodeId]] = copyNode end self.CopyBuffer = {} diff --git a/todo.txt b/todo.txt index 3f47ff251c..3c45d4cf5c 100644 --- a/todo.txt +++ b/todo.txt @@ -29,6 +29,7 @@ FPGA Tool: Feedback: Click outside of "E" menu should save Feedback on writing wrong format (angle, vector) + Scrolling in gate menu should not zoom FPGA Gates: @@ -46,7 +47,7 @@ FPGA Entity: Define ranges that memory is routed through Or single values How to signify that a link is highspeed? Pseudo type? - + (Entity spikes after amount of time and errors) Fixed by removing spike limit, as it seems unavoidable @@ -66,9 +67,6 @@ FPGA Tool: Grid Undo Improve the guide on how to use - - Bugs: - Copying and pasting will fail if nodes are not sequential FPGA Gates: From 6db7a4277e60d60eb858b1ed261d8c50fb248207 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 12:46:06 +0100 Subject: [PATCH 104/236] Better default model --- lua/wire/stools/fpga.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wire/stools/fpga.lua b/lua/wire/stools/fpga.lua index d4bf086444..dd2eec949a 100644 --- a/lua/wire/stools/fpga.lua +++ b/lua/wire/stools/fpga.lua @@ -15,7 +15,7 @@ WireToolSetup.BaseLang() WireToolSetup.SetupMax(40) TOOL.ClientConVar = { - model = "models/cheeze/wires/cpu.mdl", + model = "models/bull/gates/processor.mdl", filename = "", } @@ -253,7 +253,7 @@ if CLIENT then ---------------------------------------------------------------------------- - local modelPanel = WireDermaExts.ModelSelect(panel, "wire_fpga_model", list.Get("Wire_gate_Models"), 2) + local modelPanel = WireDermaExts.ModelSelect(panel, "wire_fpga_model", list.Get("Wire_gate_Models"), 5) panel:AddControl("Label", {Text = ""}) end From ce4e951224df5bd8195ed578a679126cf8f83161 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 12:48:57 +0100 Subject: [PATCH 105/236] Made zoom better --- lua/wire/client/node_editor/nodeeditor.lua | 18 +++++++++++------- todo.txt | 5 ++--- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/lua/wire/client/node_editor/nodeeditor.lua b/lua/wire/client/node_editor/nodeeditor.lua index 3fb5c94fd1..250a31bdf2 100644 --- a/lua/wire/client/node_editor/nodeeditor.lua +++ b/lua/wire/client/node_editor/nodeeditor.lua @@ -164,7 +164,7 @@ function Editor:InitComponents() self.C.Tree = vgui.Create("DTree", self.C.Holder) self.C.Tree:Dock(FILL) - --self.C.Tree:DockMargin(5,0,5,5) + self.C.Tree:DockMargin(2,0,2,2) --utility @@ -625,7 +625,7 @@ end function Editor:Paint() surface.SetDrawColor(self.BackgroundColor) - surface.DrawRect(0, 0, self:GetWide()-290, self:GetTall()) + surface.DrawRect(0, 36, self:GetWide()-300, self:GetTall()-36) self:PaintNodes() self:PaintConnections() @@ -634,7 +634,7 @@ function Editor:Paint() self:PaintHelp() end - self:PaintDebug() + --self:PaintDebug() -- detects if mouse is let go outside of the window if not input.IsMouseDown(MOUSE_RIGHT) then @@ -842,7 +842,7 @@ function Editor:PasteNodes(x, y) while self.Nodes[i] do i = i + 1 end - + nodeIdLookup[copyNodeId] = i self.SelectedNodes[i] = true i = i + 1 @@ -978,9 +978,13 @@ function Editor:OnDrawConnectionFinished(x, y) end function Editor:OnMouseWheeled(delta) - self.Zoom = self.Zoom + delta * 0.1 - if self.Zoom < 0.1 then self.Zoom = 0.1 end - if self.Zoom > 10 then self.Zoom = 10 end + local sx, sy = self:CursorPos() + + if sx > 0 and sy > 36 and sx < self:GetWide()-300 and sy < self:GetTall()-36 then + self.Zoom = self.Zoom + delta * 0.1 * self.Zoom + if self.Zoom < 0.1 then self.Zoom = 0.1 end + if self.Zoom > 10 then self.Zoom = 10 end + end end function Editor:OnKeyCodePressed(code) diff --git a/todo.txt b/todo.txt index 3c45d4cf5c..1b3952a020 100644 --- a/todo.txt +++ b/todo.txt @@ -12,8 +12,8 @@ FPGA Entity: Check if gate is banned..? Permissions - Download from friend - -Friends can upload + ---Download from friend + ---Friends can upload Looping Execution chips have some edge cases (they dont retrigger on change as some might expect) @@ -29,7 +29,6 @@ FPGA Tool: Feedback: Click outside of "E" menu should save Feedback on writing wrong format (angle, vector) - Scrolling in gate menu should not zoom FPGA Gates: From 6cce036550ad8e11b4ddbb157a7f86c87e59d7b0 Mon Sep 17 00:00:00 2001 From: Lasse Lysdal Date: Fri, 5 Feb 2021 13:46:04 +0100 Subject: [PATCH 106/236] Added logo --- addon.json | 3 ++- logo.png | Bin 0 -> 320455 bytes logo.psd | Bin 0 -> 2352790 bytes 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 logo.png create mode 100644 logo.psd diff --git a/addon.json b/addon.json index 4b71813e47..fe17bbbb52 100644 --- a/addon.json +++ b/addon.json @@ -8,6 +8,7 @@ ".git*", "license", "readme.md", - "todo.txt" + "todo.txt", + "logo.*" ] } \ No newline at end of file diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6aaa0254de710b8d5b42baa4818c899591add7 GIT binary patch literal 320455 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�gYgze>5(I8? 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 =Yd}Ur2u?Rq;&e*EXzMb*v$PBBWA6>g3+##+y84 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

e4+n6;8x6}vtB`u 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≫w)2Ewuj+e(CP+!!e8kb(Y^xs?(+_P{2o&z{la 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

SNIYGeEH7#euepp*(?a~VzWdT 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�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

8JQ{CG!xZ9LVg z8t4l{!Wh>tY^9%1Msk|hcgUjJlsv{*mQ91XoK2Y>$h~VF=%bC`dSyFV8qoD z=|X2XCYQ&0s`*A593@(Bk2M!uqS44LCMWll{~Zl~$c4S5ylbP8I30iNo^iohV7THn zD%gv%S9c0V`&_Swv+6`cOST9B0HN!V4VLmt&}obXHMgtnrN`j?A15}NA3xOrt|hfl z04ozutfo1wQH{_oD0sA2Z7`H%K-%+6PYJ2+ILbTdAxb~E^uf2gGZW8fz?7pDy46N# z?K%5_iNJ@3n_r+2DUBuv590p`5qH%Z9un`H#{G#%>agv)-^dz>${=Av+Xqe2mQng6 zk3_wGieiEzvsUH?ChpUswF9jJNt52a(%kUA&af|3QmOTξWvtpr8)gkVWK9y}p| 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�*o(# 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 z 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%0DqQ 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Ï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