/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-05-13 22:25:16 UTC
  • Revision ID: josh@9ix.org-20130513222516-wem0v29pit3ivc6w
rocks!

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'
5
6
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'
13
12
require 'player'
14
13
require 'enemy'
15
14
require 'cursor'
16
15
require 'bullet'
17
16
require 'rock'
18
 
require 'boom'
19
 
require 'planet'
20
 
require 'trade_view'
21
 
require 'shield'
22
 
require 'pause_view'
23
17
 
24
18
util = {
25
19
   signOf = function(value)
28
22
               else
29
23
                  return -1
30
24
               end
31
 
            end,
 
25
            end
32
26
}
33
27
 
34
28
GameView = View:extend {
 
29
   lastRock = 0,
 
30
   rockInterval = 1,
 
31
   gameStart = 0,
35
32
   onNew = function (self)
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
 
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
 
50
42
              the.bg = Tile:new{
51
43
                 image = 'data/stars3.png',
52
 
                 width = 27320,
53
 
                 height = 15360
 
44
                 -- 1366x768 * 3
 
45
                 width = 4098,
 
46
                 height = 2304
54
47
              }
55
48
              self:add(the.bg)
56
49
 
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
 
 
 
50
              --the.player = CrystalPlayer:new{x=400,y=300}
 
51
              the.player = SpacePlayer:new{x=1366,y=768}
104
52
              self:add(the.player)
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)
 
53
 
 
54
              self:add(Enemy:new{x=400, y=300})
122
55
 
123
56
              the.cursor = Cursor:new()
124
57
              self:add(the.cursor)
125
58
 
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
 
 
147
59
              love.mouse.setGrab(true)
148
60
              love.mouse.setVisible(false)
149
 
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
150
61
 
 
62
              --self:loadLayers('data/map.lua')
151
63
              self.focus = the.player
 
64
              --self:clampTo(self.map)
 
65
 
 
66
              self.gameStart = love.timer.getTime()
152
67
           end,
153
68
   onUpdate = function(self, dt)
154
 
                 if the.keys:justPressed('escape') then
155
 
                    PauseView:new():activate()
 
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)
 
81
 
 
82
                    self.lastRock = love.timer.getTime()
156
83
                 end
157
 
 
158
 
                 the.bullets:collide(the.planets)
159
 
                 the.bullets:collide(the.player)
160
 
                 the.bullets:collide(the.enemies)
161
84
              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,
166
85
   draw = function (self, x, y)
167
86
             View.draw(self, x, y)
168
 
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
169
 
          end,
 
87
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
88
          end
170
89
}
171
90
 
172
91
MenuScreen = View:extend {
190
109
              math.randomseed(os.time())
191
110
 
192
111
              self.view = GameView:new()
193
 
 
194
112
              if DEBUG then
195
113
                 self.console:watch('VERSION', 'VERSION')
196
114
                 self.console:watch('updateTook', 'the.updateTook')
198
116
                 self.console:watch('the.player.y', 'the.player.y')
199
117
                 self.console:watch('the.app.width', 'the.app.width')
200
118
                 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()')
205
119
                 --self.console:watch('drawTook', 'the.drawTook')
206
120
 
207
121
                 -- back off that dark overlay a bit
209
123
              end
210
124
           end,
211
125
   onUpdate = function (self, dt)
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
 
126
                 if the.keys:justPressed('escape') then
 
127
                    self.quit()
221
128
                 end
222
129
              end,
223
130
   update = function (self, dt)
228
135
               end
229
136
            end
230
137
}
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'