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