/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-30 23:48:52 UTC
  • Revision ID: josh@9ix.org-20130630234852-rja5zhlmup3cp0tm
award bounty

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