/traderous

To get this branch, use:
bzr branch http://9ix.org/bzr/traderous

« back to all changes in this revision

Viewing changes to trade_view.lua

  • Committer: Josh C
  • Date: 2013-06-15 16:59:30 UTC
  • Revision ID: josh@9ix.org-20130615165930-iud659qdwcvjlnoh
beginnings of trading interface

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
TradeView = Subview:extend {
2
2
   drawParent = true, --default?
3
 
   have = {},
4
3
   onNew = function (self)
5
4
              -- create all the interface bits from the planet
6
5
              -- and add them to the view
7
6
 
8
 
              local boxL = the.app.width / 2 - 225
9
 
              local boxT = the.app.height / 2 - 150
10
 
              local boxR = boxL + 450
11
 
              local boxB = boxT + 300
12
 
 
13
 
              local lh = 17 -- line height
 
7
              local boxL = the.app.width / 2 - 200
 
8
              local boxT = the.app.height / 2 - 200
14
9
 
15
10
              self:add(Fill:new{
16
11
                          fill = {255,255,255},
17
12
                          x = boxL - 1,
18
13
                          y = boxT - 1,
19
 
                          width = 452,
20
 
                          height = 302,
 
14
                          width = 402,
 
15
                          height = 402,
21
16
                       })
22
17
 
23
18
              self:add(Fill:new{
24
19
                          fill = {0,0,0},
25
20
                          x = boxL,
26
21
                          y = boxT,
27
 
                          width = 450,
28
 
                          height = 300,
29
 
                       })
30
 
 
31
 
              self:add(Text:new{
32
 
                          text = 'Name',
33
 
                          x = boxL + 10,
34
 
                          y = boxT + 10,
35
 
                          width = 380
36
 
                       })
37
 
 
38
 
              self:add(Text:new{
39
 
                          text = 'Price',
40
 
                          x = boxL + 10,
41
 
                          y = boxT + 10,
42
 
                          width = 300,
43
 
                          align = 'right'
44
 
                       })
45
 
 
46
 
              self:add(Text:new{
47
 
                          text = 'Have',
48
 
                          align = 'right',
49
 
                          y = boxT + 10,
50
 
                          x = boxR - 40
 
22
                          width = 400,
 
23
                          height = 400,
51
24
                       })
52
25
 
53
26
              for i, good in ipairs(self.planet.goods) do
54
27
                 local t = Text:new{
55
28
                    text = good[1],
56
29
                    x = boxL + 10,
57
 
                    y = boxT + 10 + i * lh,
58
30
                    width = 380
59
31
                 }
60
32
 
61
 
                 self:add(t)
62
 
 
63
 
                 t = Text:new{
64
 
                    text = good[2],
65
 
                    x = boxL + 10,
66
 
                    y = boxT + 10 + i * lh,
67
 
                    width = 300,
68
 
                    align = 'right'
69
 
                 }
70
 
                 self:add(t)
71
 
 
72
 
                 local b = Button:new{
73
 
                    x = boxR - 130,
74
 
                    y = boxT + 10 + i * lh - 1,
75
 
                    label = Text:new{ text = 'BUY', x = 1 },
76
 
                    onMouseDown = function (self)
77
 
                                     the.player:buy(good[1], good[2])
78
 
                                  end
79
 
                 }
80
 
                 local tw, th = b.label:getSize()
81
 
                 b.background = Fill:new{
82
 
                    fill = {100,100,100},
83
 
                    width = tw + 3,
84
 
                    height = th
85
 
                 }
86
 
                 self:add(b)
87
 
 
88
 
                 b = Button:new{
89
 
                    x = boxR - 90,
90
 
                    y = boxT + 10 + i * lh - 1,
91
 
                    label = Text:new{ text = 'SELL', x = 1 },
92
 
                    onMouseDown = function (self)
93
 
                                     the.player:sell(good[1], good[2])
94
 
                                  end
95
 
                 }
96
 
                 local tw, th = b.label:getSize()
97
 
                 b.background = Fill:new{
98
 
                    fill = {100,100,100},
99
 
                    width = tw + 3,
100
 
                    height = th
101
 
                 }
102
 
                 self:add(b)
103
 
 
104
 
                 local have = Text:new{
105
 
                    x = boxR - 110,
106
 
                    y = boxT + 10 + i * lh,
107
 
                    width = 100,
108
 
                    align = 'right',
109
 
                 }
110
 
                 self.have[good[1]] = have
111
 
                 self:add(have)
112
 
 
113
 
              end
114
 
 
115
 
              local b = Button:new{
116
 
                 x = boxL, y = boxT,
117
 
                 label = Text:new{ text = 'Close', x = 3, y = 2 },
118
 
                 onMouseDown = function()
119
 
                                  self:close()
120
 
                               end
121
 
              }
122
 
 
123
 
              local tw, th = b.label:getSize()
124
 
              b.background = Fill:new{
125
 
                 fill = {100,100,100},
126
 
                 width = tw + 7,
127
 
                 height = th + 4
128
 
              }
129
 
              b.x = boxR - b.background.width - 10
130
 
              b.y = boxB - b.background.height - 10
131
 
 
132
 
              self:add(b)
133
 
 
134
 
              local sh = the.player.shield
135
 
              if sh.strength < sh.max then
136
 
                 sh.strength = sh.max
137
 
 
138
 
                 self:add(Text:new{
139
 
                             text = 'Your shield has been recharged',
140
 
                             width = 450,
141
 
                             align = 'center',
142
 
                             x = boxL,
143
 
                             y = boxB - 4 * th - 12
144
 
                          })
145
 
              end
146
 
 
147
 
              -- local cost = (sh.max - sh.strength) * sh.cost
148
 
              -- b = Button:new{
149
 
              --    x = boxL, y = boxT,
150
 
              --    width = 800,
151
 
              --    -- WTF: trailing space makes it not wrap?
152
 
              --    label = Text:new{ text = 'Repair shields (' .. cost .. ') ',
153
 
              --                      x = 3, y = 2 },
154
 
              --    onMouseDown = function(self)
155
 
              --                     if the.player.money >= cost and sh.strength < sh.max then
156
 
              --                        the.player.money = the.player.money - cost
157
 
              --                        sh.strength = sh.max
158
 
              --                        self.visible = false
159
 
              --                     end
160
 
              --                  end
161
 
              -- }
162
 
 
163
 
              -- local tw, th = b.label:getSize()
164
 
              -- b.background = Fill:new{
165
 
              --    fill = {100,100,100},
166
 
              --    width = tw + 3,
167
 
              --    height = th + 4
168
 
              -- }
169
 
              -- b.x = boxR - b.background.width - 60
170
 
              -- b.y = boxB - b.background.height - 10
171
 
 
172
 
              -- if sh.strength < sh.max then
173
 
              --    self:add(b)
174
 
              -- end
175
 
 
176
 
              self.playerMoney = Text:new{
177
 
                 text = 'Your money: ',
178
 
                 width = 200,
179
 
                 x = boxL + 10,
180
 
                 y = boxB - th - 10
181
 
              }
182
 
              self:add(self.playerMoney)
183
 
 
184
 
              self.availSpace = Text:new{
185
 
                 text = 'Available cargo space: ',
186
 
                 width = 200,
187
 
                 x = boxL + 10,
188
 
                 y = boxB - 2 * th - 12
189
 
              }
190
 
              self:add(self.availSpace)
191
 
 
192
 
              if the.player.kills > 0 then
193
 
                 -- local award = the.player.kills * 100
194
 
                 -- self:add(Text:new{
195
 
                 --             text = 'You have been awarded ' ..
196
 
                 --                award ..
197
 
                 --                ' credits for killing bandits.',
198
 
                 --             width = 450,
199
 
                 --             align = 'center',
200
 
                 --             x = boxL,
201
 
                 --             y = boxB - 4 * th - 12
202
 
                 --          })
203
 
 
204
 
                 -- the.player.money = the.player.money + award
205
 
                 the.player.kills = 0
206
 
              end
207
 
 
208
 
              -- give the buttons a cycle to get out of the T/L corner
209
 
              self:update(0)
 
33
                 local tw, th = t:getSize()
 
34
                 t.y = boxT + 10 + (i-1) * th -- (th + 2) -- for padding?
 
35
 
 
36
                 self:add(t)
 
37
              end
210
38
           end,
211
39
   activate = function (self)
212
40
                 the.cursor.visible = false
213
41
                 love.mouse.setVisible(true)
214
42
                 love.mouse.setGrab(false)
215
 
                 love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
216
43
 
217
44
                 Subview.activate(self)
218
45
              end,
219
 
   close = function (self)
220
 
              the.player:save()
221
 
 
222
 
              the.cursor.visible = true
223
 
              love.mouse.setVisible(false)
224
 
              love.mouse.setGrab(true)
225
 
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
226
 
 
227
 
              self:deactivate()
228
 
           end,
229
 
   onUpdate = function (self)
230
 
                 if the.keys:justPressed('escape') then
231
 
                    self:close()
232
 
                 end
233
 
 
234
 
                 self.playerMoney.text = 'Your money: ' .. the.player.money
235
 
                 self.availSpace.text = 'Available cargo space: ' .. the.player:availableSpace()
236
 
 
237
 
                 for good, have in pairs(self.have) do
238
 
                    have.text = the.player.goods[good] or 0
239
 
                 end
240
 
              end
 
46
 
241
47
}
 
 
b'\\ No newline at end of file'