/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-25 19:55:40 UTC
  • Revision ID: josh@9ix.org-20130625195540-f4nwz7ffj9f6658a
patch zoetrope storage so it can save lists (arrays indexed by number)

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'
17
23
 
18
24
util = {
19
25
   signOf = function(value)
22
28
               else
23
29
                  return -1
24
30
               end
25
 
            end
 
31
            end,
26
32
}
27
33
 
28
34
GameView = View:extend {
29
 
   lastRock = 0,
30
 
   rockInterval = 1,
31
 
   gameStart = 0,
32
35
   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
 
 
 
36
              the.storage = Storage:new{filename = 'world.lua'}
 
37
              the.storage:load()
 
38
              --if not the.storage.data.highScore then
 
39
              --   print('initializing storage')
 
40
              --   the.storage.data = {highScore = 0}
 
41
              --end
 
42
 
 
43
              the.bullets = Group:new()
 
44
              the.interface = Group:new()
 
45
              the.planets = Group:new()
 
46
              the.indicators = Group:new()
 
47
              the.enemies = Group:new()
 
48
 
 
49
              -- init bg before build/load since planets need to know bg size
42
50
              the.bg = Tile:new{
43
51
                 image = 'data/stars3.png',
44
 
                 -- 1366x768 * 3
45
 
                 width = 4098,
46
 
                 height = 2304
 
52
                 width = 27320,
 
53
                 height = 15360
47
54
              }
48
55
              self:add(the.bg)
49
56
 
50
 
              --the.player = CrystalPlayer:new{x=400,y=300}
51
 
              the.player = SpacePlayer:new{x=1366,y=768}
 
57
              if self.newWorld or not the.storage.data.player then
 
58
                 the.storage.data = {planets = {}}
 
59
 
 
60
                 -- build planets from random
 
61
                 for _ = 1, math.random(3, 6) do
 
62
                    local planet = Planet:new{
 
63
                       x = math.random(the.app.width / 2,
 
64
                                       the.bg.width - the.app.width / 2),
 
65
                       y = math.random(the.app.height / 2,
 
66
                                       the.bg.height - the.app.height / 2),
 
67
                       rotation = math.random() * math.pi
 
68
                    }
 
69
                    the.planets:add(planet)
 
70
                    table.insert(the.storage.data.planets, {
 
71
                                    x = planet.x,
 
72
                                    y = planet.y,
 
73
                                    rotation = planet.rotation,
 
74
                                    goods = planet.goods
 
75
                                 })
 
76
                 end
 
77
 
 
78
                 -- build fresh player
 
79
                 local player = SpacePlayer:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
80
                 the.player = player
 
81
                 the.storage.data.player = {x = player.x,
 
82
                                            y = player.y,
 
83
                                            money = player.money,
 
84
                                            goods = player.goods,
 
85
                                            cargoSpace = player.cargoSpace
 
86
                                         }
 
87
 
 
88
                 the.storage:save()
 
89
              else
 
90
                 -- load planets with x, y, goods
 
91
                 for _, planetData in ipairs(the.storage.data.planets) do
 
92
                    the.planets:add(Planet:new(planetData))
 
93
                 end
 
94
 
 
95
                 -- load player with cargo, money, position
 
96
                 the.player = SpacePlayer:new(the.storage.data.player)
 
97
              end
 
98
 
 
99
              self:add(the.planets)
 
100
 
52
101
              self:add(the.player)
53
 
 
54
 
              self:add(Enemy:new{x=400, y=300})
 
102
              self:add(the.player.thrust)
 
103
              self:add(the.player.shield)
 
104
 
 
105
              self:add(the.enemies)
 
106
 
 
107
              for _ = 1, 20 do
 
108
                 local e = Enemy:new{x = math.random(the.bg.width),
 
109
                                     y = math.random(the.bg.height)}
 
110
                 --local e = Enemy:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
111
                 the.enemies:add(e)
 
112
                 self:add(e.thrust) -- why doesn't this work in Enemy.new?
 
113
                 self:add(e.shield)
 
114
              end
 
115
 
 
116
              self:add(the.bullets)
 
117
              self:add(the.indicators)
 
118
              self:add(the.interface)
55
119
 
56
120
              the.cursor = Cursor:new()
57
121
              self:add(the.cursor)
58
122
 
 
123
              the.over = Text:new{
 
124
                 y = the.app.height / 2,
 
125
                 width = the.app.width,
 
126
                 align = 'center',
 
127
                 font = 25,
 
128
                 text = "Game Over",
 
129
                 visible = false
 
130
              }
 
131
              the.interface:add(the.over)
 
132
 
 
133
 
 
134
              the.instructions = Text:new{
 
135
                 y = the.app.height / 2 + 32,
 
136
                 width = the.app.width,
 
137
                 align = 'center',
 
138
                 font = 12,
 
139
                 text = "Press Enter to start a new game\nPress Q to quit",
 
140
                 visible = false
 
141
              }
 
142
              the.interface:add(the.instructions)
 
143
 
59
144
              love.mouse.setGrab(true)
60
145
              love.mouse.setVisible(false)
 
146
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
61
147
 
62
 
              --self:loadLayers('data/map.lua')
63
148
              self.focus = the.player
64
 
              --self:clampTo(self.map)
65
 
 
66
 
              self.gameStart = love.timer.getTime()
67
149
           end,
68
150
   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)
 
151
                 if the.keys:justPressed('escape') then
 
152
                    PauseView:new():activate()
 
153
                 end
81
154
 
82
 
                    self.lastRock = love.timer.getTime()
83
 
                 end
 
155
                 the.bullets:collide(the.planets)
 
156
                 the.bullets:collide(the.player)
 
157
                 the.bullets:collide(the.enemies)
84
158
              end,
 
159
   onEndFrame = function(self)
 
160
                   the.interface.translate.x = the.player.x - the.app.width / 2 + the.player.width / 2
 
161
                   the.interface.translate.y = the.player.y - the.app.height / 2 + the.player.height / 2
 
162
                end,
85
163
   draw = function (self, x, y)
86
164
             View.draw(self, x, y)
87
 
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
88
 
          end
 
165
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
166
          end,
89
167
}
90
168
 
91
169
MenuScreen = View:extend {
109
187
              math.randomseed(os.time())
110
188
 
111
189
              self.view = GameView:new()
 
190
 
112
191
              if DEBUG then
113
192
                 self.console:watch('VERSION', 'VERSION')
114
193
                 self.console:watch('updateTook', 'the.updateTook')
116
195
                 self.console:watch('the.player.y', 'the.player.y')
117
196
                 self.console:watch('the.app.width', 'the.app.width')
118
197
                 self.console:watch('the.app.height', 'the.app.height')
 
198
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
 
199
                 self.console:watch('num rocks', '#the.rocks.sprites')
 
200
                 self.console:watch('num planets', '#the.planets.sprites')
 
201
                 self.console:watch('num enemies', 'the.enemies:count()')
119
202
                 --self.console:watch('drawTook', 'the.drawTook')
120
203
 
121
204
                 -- back off that dark overlay a bit
123
206
              end
124
207
           end,
125
208
   onUpdate = function (self, dt)
126
 
                 if the.keys:justPressed('escape') then
127
 
                    self.quit()
 
209
                 if not (DEBUG and the.console.visible) then
 
210
                    if the.keys:justPressed('return') and the.keys:pressed('alt') then
 
211
                       love.graphics.toggleFullscreen()
 
212
                    elseif the.keys:justPressed('f1') then
 
213
                       local ss = love.graphics.newScreenshot()
 
214
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
 
215
                    elseif the.keys:justPressed('f11') then
 
216
                       love.graphics.toggleFullscreen()
 
217
                    end
128
218
                 end
129
219
              end,
130
220
   update = function (self, dt)
135
225
               end
136
226
            end
137
227
}
 
228
 
 
229
realRun = love.run
 
230
function love.run()
 
231
   -- should fail silently if it can't go to fullscreen...
 
232
   love.graphics.toggleFullscreen()
 
233
 
 
234
   realRun()
 
235
end
 
 
b'\\ No newline at end of file'