/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:56:26 UTC
  • Revision ID: josh@9ix.org-20130625195626-00x63mxdyk1k6ud7
last fix for saving

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
 
 
98
                 -- reload storage as we've turned it all into objects
 
99
                 the.storage:load()
 
100
              end
 
101
 
 
102
              self:add(the.planets)
 
103
 
52
104
              self:add(the.player)
53
 
 
54
 
              self:add(Enemy:new{x=400, y=300})
 
105
              self:add(the.player.thrust)
 
106
              self:add(the.player.shield)
 
107
 
 
108
              self:add(the.enemies)
 
109
 
 
110
              for _ = 1, 20 do
 
111
                 local e = Enemy:new{x = math.random(the.bg.width),
 
112
                                     y = math.random(the.bg.height)}
 
113
                 --local e = Enemy:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
114
                 the.enemies:add(e)
 
115
                 self:add(e.thrust) -- why doesn't this work in Enemy.new?
 
116
                 self:add(e.shield)
 
117
              end
 
118
 
 
119
              self:add(the.bullets)
 
120
              self:add(the.indicators)
 
121
              self:add(the.interface)
55
122
 
56
123
              the.cursor = Cursor:new()
57
124
              self:add(the.cursor)
58
125
 
 
126
              the.over = Text:new{
 
127
                 y = the.app.height / 2,
 
128
                 width = the.app.width,
 
129
                 align = 'center',
 
130
                 font = 25,
 
131
                 text = "Game Over",
 
132
                 visible = false
 
133
              }
 
134
              the.interface:add(the.over)
 
135
 
 
136
 
 
137
              the.instructions = Text:new{
 
138
                 y = the.app.height / 2 + 32,
 
139
                 width = the.app.width,
 
140
                 align = 'center',
 
141
                 font = 12,
 
142
                 text = "Press Enter to start a new game\nPress Q to quit",
 
143
                 visible = false
 
144
              }
 
145
              the.interface:add(the.instructions)
 
146
 
59
147
              love.mouse.setGrab(true)
60
148
              love.mouse.setVisible(false)
 
149
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
61
150
 
62
 
              --self:loadLayers('data/map.lua')
63
151
              self.focus = the.player
64
 
              --self:clampTo(self.map)
65
 
 
66
 
              self.gameStart = love.timer.getTime()
67
152
           end,
68
153
   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)
 
154
                 if the.keys:justPressed('escape') then
 
155
                    PauseView:new():activate()
 
156
                 end
81
157
 
82
 
                    self.lastRock = love.timer.getTime()
83
 
                 end
 
158
                 the.bullets:collide(the.planets)
 
159
                 the.bullets:collide(the.player)
 
160
                 the.bullets:collide(the.enemies)
84
161
              end,
 
162
   onEndFrame = function(self)
 
163
                   the.interface.translate.x = the.player.x - the.app.width / 2 + the.player.width / 2
 
164
                   the.interface.translate.y = the.player.y - the.app.height / 2 + the.player.height / 2
 
165
                end,
85
166
   draw = function (self, x, y)
86
167
             View.draw(self, x, y)
87
 
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
88
 
          end
 
168
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
169
          end,
89
170
}
90
171
 
91
172
MenuScreen = View:extend {
109
190
              math.randomseed(os.time())
110
191
 
111
192
              self.view = GameView:new()
 
193
 
112
194
              if DEBUG then
113
195
                 self.console:watch('VERSION', 'VERSION')
114
196
                 self.console:watch('updateTook', 'the.updateTook')
116
198
                 self.console:watch('the.player.y', 'the.player.y')
117
199
                 self.console:watch('the.app.width', 'the.app.width')
118
200
                 self.console:watch('the.app.height', 'the.app.height')
 
201
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
 
202
                 self.console:watch('num rocks', '#the.rocks.sprites')
 
203
                 self.console:watch('num planets', '#the.planets.sprites')
 
204
                 self.console:watch('num enemies', 'the.enemies:count()')
119
205
                 --self.console:watch('drawTook', 'the.drawTook')
120
206
 
121
207
                 -- back off that dark overlay a bit
123
209
              end
124
210
           end,
125
211
   onUpdate = function (self, dt)
126
 
                 if the.keys:justPressed('escape') then
127
 
                    self.quit()
 
212
                 if not (DEBUG and the.console.visible) then
 
213
                    if the.keys:justPressed('return') and the.keys:pressed('alt') then
 
214
                       love.graphics.toggleFullscreen()
 
215
                    elseif the.keys:justPressed('f1') then
 
216
                       local ss = love.graphics.newScreenshot()
 
217
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
 
218
                    elseif the.keys:justPressed('f11') then
 
219
                       love.graphics.toggleFullscreen()
 
220
                    end
128
221
                 end
129
222
              end,
130
223
   update = function (self, dt)
135
228
               end
136
229
            end
137
230
}
 
231
 
 
232
realRun = love.run
 
233
function love.run()
 
234
   -- should fail silently if it can't go to fullscreen...
 
235
   love.graphics.toggleFullscreen()
 
236
 
 
237
   realRun()
 
238
end
 
 
b'\\ No newline at end of file'