/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
 
require 'game_over'
24
 
require 'names'
25
17
 
26
18
util = {
27
19
   signOf = function(value)
30
22
               else
31
23
                  return -1
32
24
               end
33
 
            end,
 
25
            end
34
26
}
35
27
 
36
28
GameView = View:extend {
 
29
   lastRock = 0,
 
30
   rockInterval = 1,
 
31
   gameStart = 0,
37
32
   onNew = function (self)
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
 
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
 
53
42
              the.bg = Tile:new{
54
43
                 image = 'data/stars3.png',
55
 
                 width = 27320,
56
 
                 height = 15360
 
44
                 -- 1366x768 * 3
 
45
                 width = 4098,
 
46
                 height = 2304
57
47
              }
58
48
              self:add(the.bg)
59
49
 
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
 
 
 
50
              --the.player = CrystalPlayer:new{x=400,y=300}
 
51
              the.player = SpacePlayer:new{x=1366,y=768}
109
52
              self:add(the.player)
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)
 
53
 
 
54
              self:add(Enemy:new{x=400, y=300})
127
55
 
128
56
              the.cursor = Cursor:new()
129
57
              self:add(the.cursor)
130
58
 
131
59
              love.mouse.setGrab(true)
132
60
              love.mouse.setVisible(false)
133
 
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
134
61
 
 
62
              --self:loadLayers('data/map.lua')
135
63
              self.focus = the.player
 
64
              --self:clampTo(self.map)
 
65
 
 
66
              self.gameStart = love.timer.getTime()
136
67
           end,
137
68
   onUpdate = function(self, dt)
138
 
                 if the.keys:justPressed('escape') then
139
 
                    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()
140
83
                 end
141
 
 
142
 
                 the.bullets:collide(the.planets)
143
 
                 the.bullets:collide(the.player)
144
 
                 the.bullets:collide(the.enemies)
145
84
              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,
150
85
   draw = function (self, x, y)
151
86
             View.draw(self, x, y)
152
 
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
153
 
          end,
 
87
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
88
          end
154
89
}
155
90
 
156
91
MenuScreen = View:extend {
174
109
              math.randomseed(os.time())
175
110
 
176
111
              self.view = GameView:new()
177
 
 
178
112
              if DEBUG then
179
113
                 self.console:watch('VERSION', 'VERSION')
180
114
                 self.console:watch('updateTook', 'the.updateTook')
182
116
                 self.console:watch('the.player.y', 'the.player.y')
183
117
                 self.console:watch('the.app.width', 'the.app.width')
184
118
                 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()')
189
119
                 --self.console:watch('drawTook', 'the.drawTook')
190
120
 
191
121
                 -- back off that dark overlay a bit
193
123
              end
194
124
           end,
195
125
   onUpdate = function (self, dt)
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
 
126
                 if the.keys:justPressed('escape') then
 
127
                    self.quit()
205
128
                 end
206
129
              end,
207
130
   update = function (self, dt)
212
135
               end
213
136
            end
214
137
}
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'