diff options
Diffstat (limited to 'gamemode/client/qpanels/prayers.lua')
| -rw-r--r-- | gamemode/client/qpanels/prayers.lua | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/gamemode/client/qpanels/prayers.lua b/gamemode/client/qpanels/prayers.lua new file mode 100644 index 0000000..bc955ce --- /dev/null +++ b/gamemode/client/qpanels/prayers.lua @@ -0,0 +1,170 @@ + +local refreshboundprayers +local infopart +local prayersheet + +local function displaydefaulthelp(panel) + local ll = vgui.Create("DLabel",panel) + ll:Dock(FILL) + ll:SetWrap(true) + ll:SetDark(true) + ll:SetText("Oh no! It looks like this dosen't have any help text yet!") +end + +local function createprayericon(parrent,prayer,equiped,place) + + local width = ScrW() + local height = ScrH() + + local ret = vgui.Create("DButton",parrent) + ret:SetText(prayer) + ret:SetWrap(true) + ret:SetSize(64,64) + local prayertbl = ART.GetPrayerByName(prayer) + assert(prayertbl ~= nil, "Could not find an appropriate prayer!") + if prayertbl.Paint then + ret.Paint = prayertbl.Paint + end + if prayertbl.DoOnPanel then + prayertbl.DoOnPanel(ret) + end + if equiped then + ret.DoClick = function(self) + self:Remove() + ART.PrayerEquiped[place] = false + refreshboundprayers() + infopart:Remove() + infopart = vgui.Create("DPanel") + infopart:SetSize( (width / 4) - 10, height / 3) + infopart:SetPos(0, height * 2 / 3) + prayersheet:Add(infopart) + end + else + ret:Droppable("PrayerBind") + ret.PrayerName = prayer + ret:SetSize(64,64) + ret.DoClick = function(self) + infopart:Remove() + infopart = vgui.Create("DPanel") + infopart:SetSize( (width / 4) - 10, height / 3) + prayersheet:Add(infopart) + local rettbl = ART.GetPrayerByName(prayer) + if rettbl.DisplayHelp ~= nil then + rettbl.DisplayHelp(infopart) + else + displaydefaulthelp(infopart) + end + end + end + return ret +end + +local function createreceiver(parrent,num) + local prayerbut = vgui.Create( "DPanel", parrent ) + local prayerlabel = vgui.Create("DLabel",prayerbut) + prayerlabel:SetText( "F" .. num ) + prayerlabel.Paint = function( self, w, h ) end + prayerlabel:SetWrap(true) + prayerlabel:SetDark(true) + prayerlabel:Dock(FILL) + prayerbut:Dock(FILL) + prayerbut:Receiver( "PrayerBind", function( self, tableOfDroppedPanels, isDropped, menuIndex, mouseX, mouseY ) + if not isDropped then return end + local pname = tableOfDroppedPanels[1].PrayerName + print("Prayer name:") + print(pname) + ART.PrayerEquiped[num] = pname + print("Prayer bound to " .. num) + prayerbut:Remove() + createprayericon(parrent,pname,true,num) + end) +end + +local function displayboundprayers(panel) + + local width = ScrW() + local height = ScrH() + + local prayerbindgrid = nil + + refreshboundprayers = function() + + if prayerbindgrid ~= nil then prayerbindgrid:Remove() end + + prayerbindgrid = vgui.Create("DGrid") + prayerbindgrid:SetPos(height * (2 / 3),5) + prayerbindgrid:SetSize((width / 4) - 20, height / 3) + prayerbindgrid:SetColWide(64) + prayerbindgrid:SetRowHeight(64) + function prayerbindgrid:Paint(w,h) + draw.RoundedBox( 8, 0, 0, w, h, Color( 0, 255, 0 ) ) + end + + for k,v in pairs(ART.PrayerEquiped) do + local but = vgui.Create( "DPanel", prayerbindgrid ) + but:SetSize(64, 64) + if v ~= false then + createprayericon(but,v,true,k) + else + createreceiver(but,k) + end + prayerbindgrid:AddItem(but) + end + panel:Add(prayerbindgrid) + end + refreshboundprayers() +end + +ART.RegisterInventorySheet(function() + + local width = ScrW() + local height = ScrH() + + prayersheet = vgui.Create( "DListLayout") + + local prayergridscroll = vgui.Create("DScrollPanel") + prayergridscroll:SetSize( (width / 4) - 20, height / 3 ) + prayergridscroll:SetPos( 5, 5 ) + prayersheet:Add(prayergridscroll) + local prayergrid = vgui.Create( "DGrid", prayergridscroll ) + prayergrid:SetPos( 5 , 5 ) + prayergrid:Dock(FILL) + + prayergrid:SetCols( (width / 4) / 64 ) + prayergrid:SetColWide( 64 ) + prayergrid:SetRowHeight(64) + prayergridscroll:AddItem(prayergrid) + + for k,v in pairs(ART.MyPrayer) do + print("Displaying prayer:" .. k) + print("Type:" .. type(k)) + if k == "" then + ART.MyPrayer[k] = nil + end + local but = createprayericon(prayergrid,k,false,nil) + prayergrid:AddItem(but) + end + + displayboundprayers(prayersheet) + + infopart = vgui.Create("DPanel") + infopart:SetSize( (width / 4) - 10, height / 3) + infopart:SetPos(0, height * 2 / 3) + prayersheet:Add(infopart) + + return "Prayers", prayersheet, "icon16/tick.png" +end) + +hook.Add("Think","art_prayer_keybinds",function() + local mapping = { + KEY_F1, + KEY_F2, + KEY_F3, + KEY_F4, + } + for k,v in pairs(mapping) do + if input.IsKeyDown(v) and ART.PrayerEquiped[k] then + ART.GetPrayerByName(ART.PrayerEquiped[k]).Pray() + end + end +end) |
