/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
 
require 'good'
26
17
 
27
18
util = {
28
19
   signOf = function(value)
31
22
               else
32
23
                  return -1
33
24
               end
34
 
            end,
 
25
            end
35
26
}
36
27
 
37
28
GameView = View:extend {
 
29
   lastRock = 0,
 
30
   rockInterval = 1,
 
31
   gameStart = 0,
38
32
   onNew = function (self)
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
 
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
 
54
42
              the.bg = Tile:new{
55
43
                 image = 'data/stars3.png',
56
 
                 width = 27320,
57
 
                 height = 15360
 
44
                 -- 1366x768 * 3
 
45
                 width = 4098,
 
46
                 height = 2304
58
47
              }
59
48
              self:add(the.bg)
60
49
 
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
 
 
 
50
              --the.player = CrystalPlayer:new{x=400,y=300}
 
51
              the.player = SpacePlayer:new{x=1366,y=768}
112
52
              self:add(the.player)
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)
 
53
 
 
54
              self:add(Enemy:new{x=400, y=300})
130
55
 
131
56
              the.cursor = Cursor:new()
132
57
              self:add(the.cursor)
133
58
 
134
59
              love.mouse.setGrab(true)
135
60
              love.mouse.setVisible(false)
136
 
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
137
61
 
 
62
              --self:loadLayers('data/map.lua')
138
63
              self.focus = the.player
 
64
              --self:clampTo(self.map)
 
65
 
 
66
              self.gameStart = love.timer.getTime()
139
67
           end,
140
68
   onUpdate = function(self, dt)
141
 
                 if the.keys:justPressed('escape') then
142
 
                    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()
143
83
                 end
144
 
 
145
 
                 the.bullets:collide(the.planets)
146
 
                 the.bullets:collide(the.player)
147
 
                 the.bullets:collide(the.enemies)
148
84
              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,
153
85
   draw = function (self, x, y)
154
86
             View.draw(self, x, y)
155
 
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
156
 
          end,
 
87
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
88
          end
157
89
}
158
90
 
159
91
MenuScreen = View:extend {
171
103
}
172
104
 
173
105
the.app = App:new {
174
 
   name = 'Traderous',
175
106
   onRun = function (self)
176
107
              print('Version: ' .. VERSION)
177
108
 
178
109
              math.randomseed(os.time())
179
110
 
180
111
              self.view = GameView:new()
181
 
 
182
112
              if DEBUG then
183
113
                 self.console:watch('VERSION', 'VERSION')
184
114
                 self.console:watch('updateTook', 'the.updateTook')
186
116
                 self.console:watch('the.player.y', 'the.player.y')
187
117
                 self.console:watch('the.app.width', 'the.app.width')
188
118
                 self.console:watch('the.app.height', 'the.app.height')
189
 
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
190
 
                 self.console:watch('num rocks', '#the.rocks.sprites')
191
 
                 self.console:watch('num planets', '#the.planets.sprites')
192
 
                 self.console:watch('num enemies', 'the.enemies:count()')
193
 
                 self.console:watch('onPlanet', 'the.player.onPlanet')
194
 
                 self.console:watch('kills', 'the.player.kills')
195
119
                 --self.console:watch('drawTook', 'the.drawTook')
196
120
 
197
121
                 -- back off that dark overlay a bit
199
123
              end
200
124
           end,
201
125
   onUpdate = function (self, dt)
202
 
                 if not (DEBUG and the.console.visible) then
203
 
                    if the.keys:justPressed('return') and the.keys:pressed('alt') then
204
 
                       love.graphics.toggleFullscreen()
205
 
                    elseif the.keys:justPressed('f1') then
206
 
                       local ss = love.graphics.newScreenshot()
207
 
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
208
 
                    elseif the.keys:justPressed('f11') then
209
 
                       love.graphics.toggleFullscreen()
210
 
                    end
 
126
                 if the.keys:justPressed('escape') then
 
127
                    self.quit()
211
128
                 end
212
129
              end,
213
130
   update = function (self, dt)
218
135
               end
219
136
            end
220
137
}
221
 
 
222
 
realRun = love.run
223
 
function love.run()
224
 
   -- should fail silently if it can't go to fullscreen...
225
 
   love.graphics.toggleFullscreen()
226
 
 
227
 
   realRun()
228
 
end
 
 
b'\\ No newline at end of file'