/traderous

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

« back to all changes in this revision

Viewing changes to main.lua

  • Committer: Josh C
  • Date: 2013-06-26 01:11:27 UTC
  • Revision ID: josh@9ix.org-20130626011127-7e7z5ed0r0xmtva3
show planet labels, get better names

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
DEBUG = true
3
3
 
4
4
require 'zoetrope'
5
 
--__ = require 'underscore'
6
5
vector = require 'vector'
 
6
--inspect = require 'inspect'
7
7
 
8
8
require 'group'
9
9
 
10
10
require 'version'
11
11
require 'wrap_tile'
 
12
require 'mirror'
12
13
require 'player'
13
14
require 'enemy'
14
15
require 'cursor'
15
16
require 'bullet'
16
17
require 'rock'
 
18
require 'boom'
 
19
require 'planet'
 
20
require 'trade_view'
 
21
require 'shield'
 
22
require 'pause_view'
 
23
require 'game_over'
 
24
require 'names'
17
25
 
18
26
util = {
19
27
   signOf = function(value)
22
30
               else
23
31
                  return -1
24
32
               end
25
 
            end
 
33
            end,
26
34
}
27
35
 
28
36
GameView = View:extend {
29
 
   lastRock = 0,
30
 
   rockInterval = 1,
31
 
   gameStart = 0,
32
37
   onNew = function (self)
33
 
              -- for x = 1,30 do
34
 
              --    for y = 1,30 do
35
 
              --       self:add(Fill:new{x=x*400, y=y*400,
36
 
              --                         width = 32, height = 32,
37
 
              --                         fill = {0,0,255}
38
 
              --                      })
39
 
              --    end
40
 
              -- end
41
 
 
 
38
              the.storage = Storage:new{filename = 'world.lua'}
 
39
              the.storage:load()
 
40
              --if not the.storage.data.highScore then
 
41
              --   print('initializing storage')
 
42
              --   the.storage.data = {highScore = 0}
 
43
              --end
 
44
 
 
45
              the.bullets = Group:new()
 
46
              the.interface = Group:new()
 
47
              the.planets = Group:new()
 
48
              the.planetLabels = Group:new()
 
49
              the.indicators = Group:new()
 
50
              the.enemies = Group:new()
 
51
 
 
52
              -- init bg before build/load since planets need to know bg size
42
53
              the.bg = Tile:new{
43
54
                 image = 'data/stars3.png',
44
 
                 -- 1366x768 * 3
45
 
                 width = 4098,
46
 
                 height = 2304
 
55
                 width = 27320,
 
56
                 height = 15360
47
57
              }
48
58
              self:add(the.bg)
49
59
 
50
 
              --the.player = CrystalPlayer:new{x=400,y=300}
51
 
              the.player = SpacePlayer:new{x=1366,y=768}
 
60
              if self.newWorld or not the.storage.data.player then
 
61
                 the.storage.data = {planets = {}}
 
62
 
 
63
                 -- build planets from random
 
64
                 for _ = 1, math.random(3, 6) do
 
65
                    local planet = Planet:new{
 
66
                       x = math.random(the.app.width / 2,
 
67
                                       the.bg.width - the.app.width / 2),
 
68
                       y = math.random(the.app.height / 2,
 
69
                                       the.bg.height - the.app.height / 2),
 
70
                       rotation = math.random() * math.pi
 
71
                    }
 
72
                    the.planets:add(planet)
 
73
                    table.insert(the.storage.data.planets, {
 
74
                                    x = planet.x,
 
75
                                    y = planet.y,
 
76
                                    rotation = planet.rotation,
 
77
                                    goods = planet.goods,
 
78
                                    name = planet.name
 
79
                                 })
 
80
                 end
 
81
 
 
82
                 -- build fresh player
 
83
                 local player = SpacePlayer:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
84
                 the.player = player
 
85
                 the.storage.data.player = {x = player.x,
 
86
                                            y = player.y,
 
87
                                            money = player.money,
 
88
                                            goods = player.goods,
 
89
                                            cargoSpace = player.cargoSpace
 
90
                                         }
 
91
 
 
92
                 the.storage:save()
 
93
              else
 
94
                 -- load planets with x, y, goods
 
95
                 for _, planetData in ipairs(the.storage.data.planets) do
 
96
                    the.planets:add(Planet:new(planetData))
 
97
                 end
 
98
 
 
99
                 -- load player with cargo, money, position
 
100
                 the.player = SpacePlayer:new(the.storage.data.player)
 
101
 
 
102
                 -- reload storage as we've turned it all into objects
 
103
                 the.storage:load()
 
104
              end
 
105
 
 
106
              self:add(the.planets)
 
107
              self:add(the.planetLabels)
 
108
 
52
109
              self:add(the.player)
53
 
 
54
 
              self:add(Enemy:new{x=400, y=300})
 
110
              self:add(the.player.thrust)
 
111
              self:add(the.player.shield)
 
112
 
 
113
              self:add(the.enemies)
 
114
 
 
115
              for _ = 1, 20 do
 
116
                 local e = Enemy:new{x = math.random(the.bg.width),
 
117
                                     y = math.random(the.bg.height)}
 
118
                 --local e = Enemy:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
119
                 the.enemies:add(e)
 
120
                 self:add(e.thrust) -- why doesn't this work in Enemy.new?
 
121
                 self:add(e.shield)
 
122
              end
 
123
 
 
124
              self:add(the.bullets)
 
125
              self:add(the.indicators)
 
126
              self:add(the.interface)
55
127
 
56
128
              the.cursor = Cursor:new()
57
129
              self:add(the.cursor)
58
130
 
59
131
              love.mouse.setGrab(true)
60
132
              love.mouse.setVisible(false)
 
133
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
61
134
 
62
 
              --self:loadLayers('data/map.lua')
63
135
              self.focus = the.player
64
 
              --self:clampTo(self.map)
65
 
 
66
 
              self.gameStart = love.timer.getTime()
67
136
           end,
68
137
   onUpdate = function(self, dt)
69
 
                 if love.timer.getTime() > self.lastRock + self.rockInterval then
70
 
                    local rock = Rock:new{
71
 
                       x = math.random(the.bg.width),
72
 
                       y = math.random(the.bg.height),
73
 
                       velocity = {
74
 
                          x = math.random(-300, 300),
75
 
                          y = math.random(-300, 300),
76
 
                          rotation = math.random(-7, 7)
77
 
                       },
78
 
                       scale = math.random() + 0.5
79
 
                    }
80
 
                    self:add(rock)
 
138
                 if the.keys:justPressed('escape') then
 
139
                    PauseView:new():activate()
 
140
                 end
81
141
 
82
 
                    self.lastRock = love.timer.getTime()
83
 
                 end
 
142
                 the.bullets:collide(the.planets)
 
143
                 the.bullets:collide(the.player)
 
144
                 the.bullets:collide(the.enemies)
84
145
              end,
 
146
   onEndFrame = function(self)
 
147
                   the.interface.translate.x = the.player.x - the.app.width / 2 + the.player.width / 2
 
148
                   the.interface.translate.y = the.player.y - the.app.height / 2 + the.player.height / 2
 
149
                end,
85
150
   draw = function (self, x, y)
86
151
             View.draw(self, x, y)
87
 
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
88
 
          end
 
152
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
153
          end,
89
154
}
90
155
 
91
156
MenuScreen = View:extend {
109
174
              math.randomseed(os.time())
110
175
 
111
176
              self.view = GameView:new()
 
177
 
112
178
              if DEBUG then
113
179
                 self.console:watch('VERSION', 'VERSION')
114
180
                 self.console:watch('updateTook', 'the.updateTook')
116
182
                 self.console:watch('the.player.y', 'the.player.y')
117
183
                 self.console:watch('the.app.width', 'the.app.width')
118
184
                 self.console:watch('the.app.height', 'the.app.height')
 
185
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
 
186
                 self.console:watch('num rocks', '#the.rocks.sprites')
 
187
                 self.console:watch('num planets', '#the.planets.sprites')
 
188
                 self.console:watch('num enemies', 'the.enemies:count()')
119
189
                 --self.console:watch('drawTook', 'the.drawTook')
120
190
 
121
191
                 -- back off that dark overlay a bit
123
193
              end
124
194
           end,
125
195
   onUpdate = function (self, dt)
126
 
                 if the.keys:justPressed('escape') then
127
 
                    self.quit()
 
196
                 if not (DEBUG and the.console.visible) then
 
197
                    if the.keys:justPressed('return') and the.keys:pressed('alt') then
 
198
                       love.graphics.toggleFullscreen()
 
199
                    elseif the.keys:justPressed('f1') then
 
200
                       local ss = love.graphics.newScreenshot()
 
201
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
 
202
                    elseif the.keys:justPressed('f11') then
 
203
                       love.graphics.toggleFullscreen()
 
204
                    end
128
205
                 end
129
206
              end,
130
207
   update = function (self, dt)
135
212
               end
136
213
            end
137
214
}
 
215
 
 
216
realRun = love.run
 
217
function love.run()
 
218
   -- should fail silently if it can't go to fullscreen...
 
219
   love.graphics.toggleFullscreen()
 
220
 
 
221
   realRun()
 
222
end
 
 
b'\\ No newline at end of file'