/traderous

To get this branch, use:
bzr branch /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
102 by Josh C
have enemies disengage when you land
56
                       -- disengage all the enemies
57
                       for _, enemy in pairs(the.enemies.sprites) do
58
                          if enemy.state == 'combat' then
59
                             enemy.state = 'patrolling'
60
                          end
61
                       end
62
53 by Josh C
beginnings of trading interface
63
                       tradeView = TradeView:new{ planet = self }
64
                       tradeView:activate()
65
                    end
87 by Josh C
show planet labels, get better names
66
                 else
67
                    self.label.visible = false
68
                    self.keyLabel.visible = false
89 by Josh C
"safe" zone on planets - no new enemies will track you if you're there.
69
                    if the.player.onPlanet == self then
70
                       the.player.onPlanet = false
71
                    end
53 by Josh C
beginnings of trading interface
72
                 end
62 by Josh C
clean up some old code, put planet indicators in planet class
73
              end,
74
   onEndFrame = function (self)
75
                   local indx, indy
76
                   local pvec = vector.new(
77
                      self.x - the.player.x + self.width / 2,
78
                      self.y - the.player.y + self.height / 2 )
79
80
                   -- TODO: is there a better way to specify the
81
                   -- screen rectangle?
82
                   if self:intersects(the.player.x - the.app.width / 2,
83
                                      the.player.y - the.app.height / 2,
84
                                      the.app.width,
85
                                      the.app.height) then
86
                      -- planet is on the screen
87
                      self.indicator.visible = false
88
                   else
89
                      self.indicator.visible = true
90
91
                      if math.abs(pvec.x) / math.abs(pvec.y) > the.app.width / the.app.height then
92
                         indx = (the.app.width / 2 - 10) * util.signOf(pvec.x) + 8
93
                         indy = (the.app.width / 2 - 10) * pvec.y / math.abs(pvec.x)
94
                      else
95
                         indy = (the.app.height / 2 - 10) * util.signOf(pvec.y) + 8
96
                         indx = (the.app.height / 2 - 10) * pvec.x / math.abs(pvec.y)
97
                      end
98
99
                      self.indicator.x = the.player.x + indx
100
                      self.indicator.y = the.player.y + indy
101
                   end
102
103
                end,
63 by Josh C
bullets don't go through planets
104
   onCollide = function (self, other)
105
                  if other:instanceOf(Bullet) then
106
                     the.bullets:remove(other)
107
                     other:die()
108
                  end
109
               end
53 by Josh C
beginnings of trading interface
110
}