/traderous

To get this branch, use:
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
}