bzr branch
http://9ix.org/bzr/traderous
53
by Josh C
beginnings of trading interface |
1 |
Planet = Tile:extend { |
2 |
image = 'data/planet1.png', |
|
59
by Josh C
give planets sami-random goods at semi-random prices |
3 |
potentialGoods = { |
4 |
{name = 'Bobble-Headed Dolls', |
|
5 |
low = 50, med = 100, high = 150, |
|
6 |
chance = 0.5}, |
|
7 |
{name = 'Alliance Foodstuffs', |
|
8 |
low = 100, med = 250, high = 400, |
|
9 |
chance = 0.8}, |
|
10 |
{name = 'Antique Weapons', |
|
11 |
low = 5000, med = 6000, high = 8000, |
|
12 |
chance = 0.1} |
|
53
by Josh C
beginnings of trading interface |
13 |
}, |
59
by Josh C
give planets sami-random goods at semi-random prices |
14 |
goods = {}, |
53
by Josh C
beginnings of trading interface |
15 |
onNew = function (self) |
16 |
self.indicator = Tile:new{ image = 'data/planet1ind.png' } |
|
17 |
the.indicators:add(self.indicator) |
|
59
by Josh C
give planets sami-random goods at semi-random prices |
18 |
|
60
by Josh C
make sure every planet trades something |
19 |
while #self.goods == 0 do |
20 |
for _, good in ipairs(self.potentialGoods) do |
|
21 |
if math.random() < good.chance then |
|
22 |
local tier = math.random(4) -- betw 1 and 4 |
|
23 |
if tier == 1 then |
|
24 |
table.insert(self.goods, {good.name, good.low}) |
|
25 |
elseif tier ==2 then |
|
26 |
table.insert(self.goods, {good.name, good.high}) |
|
27 |
else |
|
28 |
-- double chance for med (3 or 4) |
|
29 |
table.insert(self.goods, {good.name, good.med}) |
|
30 |
end |
|
59
by Josh C
give planets sami-random goods at semi-random prices |
31 |
end |
32 |
end |
|
33 |
end |
|
53
by Josh C
beginnings of trading interface |
34 |
end, |
35 |
onUpdate = function (self) |
|
36 |
if the.keys:justPressed('l') then |
|
37 |
local hw = self.width / 2 |
|
38 |
local pvec = vector.new(the.player.x - (self.x + hw), |
|
39 |
the.player.y - (self.y + hw)) |
|
40 |
||
41 |
if pvec:len2() < hw ^ 2 then |
|
42 |
tradeView = TradeView:new{ planet = self } |
|
43 |
tradeView:activate() |
|
44 |
end |
|
45 |
end |
|
62
by Josh C
clean up some old code, put planet indicators in planet class |
46 |
end, |
47 |
onEndFrame = function (self) |
|
48 |
local indx, indy |
|
49 |
local pvec = vector.new( |
|
50 |
self.x - the.player.x + self.width / 2, |
|
51 |
self.y - the.player.y + self.height / 2 ) |
|
52 |
||
53 |
-- TODO: is there a better way to specify the |
|
54 |
-- screen rectangle? |
|
55 |
if self:intersects(the.player.x - the.app.width / 2, |
|
56 |
the.player.y - the.app.height / 2, |
|
57 |
the.app.width, |
|
58 |
the.app.height) then |
|
59 |
-- planet is on the screen |
|
60 |
self.indicator.visible = false |
|
61 |
else |
|
62 |
self.indicator.visible = true |
|
63 |
||
64 |
if math.abs(pvec.x) / math.abs(pvec.y) > the.app.width / the.app.height then |
|
65 |
indx = (the.app.width / 2 - 10) * util.signOf(pvec.x) + 8 |
|
66 |
indy = (the.app.width / 2 - 10) * pvec.y / math.abs(pvec.x) |
|
67 |
else |
|
68 |
indy = (the.app.height / 2 - 10) * util.signOf(pvec.y) + 8 |
|
69 |
indx = (the.app.height / 2 - 10) * pvec.x / math.abs(pvec.y) |
|
70 |
end |
|
71 |
||
72 |
self.indicator.x = the.player.x + indx |
|
73 |
self.indicator.y = the.player.y + indy |
|
74 |
end |
|
75 |
||
76 |
end, |
|
63
by Josh C
bullets don't go through planets |
77 |
onCollide = function (self, other) |
78 |
if other:instanceOf(Bullet) then |
|
79 |
the.bullets:remove(other) |
|
80 |
other:die() |
|
81 |
end |
|
82 |
end |
|
53
by Josh C
beginnings of trading interface |
83 |
} |