/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 21:50:05 UTC
  • Revision ID: josh@9ix.org-20130625215005-3bdnmv9avkfo1a36
because it's funny

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