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 |
goods = {}, |
53
by Josh C
beginnings of trading interface |
4 |
onNew = function (self) |
5 |
self.indicator = Tile:new{ image = 'data/planet1ind.png' } |
|
6 |
the.indicators:add(self.indicator) |
|
59
by Josh C
give planets sami-random goods at semi-random prices |
7 |
|
86
by Josh C
give planets names |
8 |
while not self.name do |
87
by Josh C
show planet labels, get better names |
9 |
local name = PlanetNames[math.random(#PlanetNames)] |
86
by Josh C
give planets names |
10 |
local inUse = false |
11 |
for _, planet in ipairs(the.planets.sprites) do |
|
12 |
if name == planet.name then inUse = true end |
|
13 |
end |
|
14 |
||
15 |
if not inUse then |
|
16 |
self.name = name |
|
17 |
end |
|
18 |
end |
|
19 |
||
87
by Josh C
show planet labels, get better names |
20 |
self.label = Text:new { |
21 |
text = self.name, |
|
22 |
x = self.x, |
|
23 |
y = self.y - 32, |
|
24 |
width = self.width, |
|
25 |
align = 'center', |
|
26 |
font = 20 |
|
27 |
} |
|
28 |
the.planetLabels:add(self.label) |
|
29 |
||
30 |
self.keyLabel = Text:new { |
|
31 |
text = 'Press L to land', |
|
32 |
x = self.x, |
|
33 |
y = self.y + self.height + 12, |
|
34 |
width = self.width, |
|
35 |
align = 'center', |
|
36 |
font = 20 |
|
37 |
} |
|
38 |
the.planetLabels:add(self.keyLabel) |
|
53
by Josh C
beginnings of trading interface |
39 |
end, |
40 |
onUpdate = function (self) |
|
87
by Josh C
show planet labels, get better names |
41 |
local hw = self.width / 2 |
42 |
local pvec = vector.new(the.player.x - (self.x + hw), |
|
43 |
the.player.y - (self.y + hw)) |
|
44 |
||
45 |
if pvec:len2() < hw ^ 2 then |
|
46 |
self.label.visible = true |
|
47 |
self.keyLabel.visible = true |
|
89
by Josh C
"safe" zone on planets - no new enemies will track you if you're there. |
48 |
the.player.onPlanet = self |
87
by Josh C
show planet labels, get better names |
49 |
|
50 |
if the.keys:justPressed('l') then |
|
73
by Josh C
higher planet floor, recharge shields when you land, stop moving when you land |
51 |
the.player.velocity = {x=0, y=0} |
52 |
the.player.acceleration = {x=0, y=0} |
|
53 |
||
93
by Josh C
save on arriving at & leaving a planet both |
54 |
the.player:save() |
81
by Josh C
load/save (not working yet) |
55 |
|
53
by Josh C
beginnings of trading interface |
56 |
tradeView = TradeView:new{ planet = self } |
57 |
tradeView:activate() |
|
58 |
end |
|
87
by Josh C
show planet labels, get better names |
59 |
else |
60 |
self.label.visible = false |
|
61 |
self.keyLabel.visible = false |
|
89
by Josh C
"safe" zone on planets - no new enemies will track you if you're there. |
62 |
if the.player.onPlanet == self then |
63 |
the.player.onPlanet = false |
|
64 |
end |
|
53
by Josh C
beginnings of trading interface |
65 |
end |
62
by Josh C
clean up some old code, put planet indicators in planet class |
66 |
end, |
67 |
onEndFrame = function (self) |
|
68 |
local indx, indy |
|
69 |
local pvec = vector.new( |
|
70 |
self.x - the.player.x + self.width / 2, |
|
71 |
self.y - the.player.y + self.height / 2 ) |
|
72 |
||
73 |
-- TODO: is there a better way to specify the |
|
74 |
-- screen rectangle? |
|
75 |
if self:intersects(the.player.x - the.app.width / 2, |
|
76 |
the.player.y - the.app.height / 2, |
|
77 |
the.app.width, |
|
78 |
the.app.height) then |
|
79 |
-- planet is on the screen |
|
80 |
self.indicator.visible = false |
|
81 |
else |
|
82 |
self.indicator.visible = true |
|
83 |
||
84 |
if math.abs(pvec.x) / math.abs(pvec.y) > the.app.width / the.app.height then |
|
85 |
indx = (the.app.width / 2 - 10) * util.signOf(pvec.x) + 8 |
|
86 |
indy = (the.app.width / 2 - 10) * pvec.y / math.abs(pvec.x) |
|
87 |
else |
|
88 |
indy = (the.app.height / 2 - 10) * util.signOf(pvec.y) + 8 |
|
89 |
indx = (the.app.height / 2 - 10) * pvec.x / math.abs(pvec.y) |
|
90 |
end |
|
91 |
||
92 |
self.indicator.x = the.player.x + indx |
|
93 |
self.indicator.y = the.player.y + indy |
|
94 |
end |
|
95 |
||
96 |
end, |
|
63
by Josh C
bullets don't go through planets |
97 |
onCollide = function (self, other) |
98 |
if other:instanceOf(Bullet) then |
|
99 |
the.bullets:remove(other) |
|
100 |
other:die() |
|
101 |
end |
|
102 |
end |
|
53
by Josh C
beginnings of trading interface |
103 |
} |