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