aboutsummaryrefslogtreecommitdiff
path: root/gamemode/client/qpanels/prayers.lua
blob: cdcb7427361a2db887bda4a784110467bd39f54e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
do return end
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)