/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-26 00:45:08 UTC
  • Revision ID: josh@9ix.org-20130626004508-6in13i6vjpu77els
give planets names

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
                                    name = planet.name
 
77
                                 })
 
78
                 end
 
79
 
 
80
                 -- build fresh player
 
81
                 local player = SpacePlayer:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
82
                 the.player = player
 
83
                 the.storage.data.player = {x = player.x,
 
84
                                            y = player.y,
 
85
                                            money = player.money,
 
86
                                            goods = player.goods,
 
87
                                            cargoSpace = player.cargoSpace
 
88
                                         }
 
89
 
 
90
                 the.storage:save()
 
91
              else
 
92
                 -- load planets with x, y, goods
 
93
                 for _, planetData in ipairs(the.storage.data.planets) do
 
94
                    the.planets:add(Planet:new(planetData))
 
95
                 end
 
96
 
 
97
                 -- load player with cargo, money, position
 
98
                 the.player = SpacePlayer:new(the.storage.data.player)
 
99
 
 
100
                 -- reload storage as we've turned it all into objects
 
101
                 the.storage:load()
 
102
              end
 
103
 
 
104
              self:add(the.planets)
 
105
 
52
106
              self:add(the.player)
53
 
 
54
 
              self:add(Enemy:new{x=400, y=300})
 
107
              self:add(the.player.thrust)
 
108
              self:add(the.player.shield)
 
109
 
 
110
              self:add(the.enemies)
 
111
 
 
112
              for _ = 1, 20 do
 
113
                 local e = Enemy:new{x = math.random(the.bg.width),
 
114
                                     y = math.random(the.bg.height)}
 
115
                 --local e = Enemy:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
116
                 the.enemies:add(e)
 
117
                 self:add(e.thrust) -- why doesn't this work in Enemy.new?
 
118
                 self:add(e.shield)
 
119
              end
 
120
 
 
121
              self:add(the.bullets)
 
122
              self:add(the.indicators)
 
123
              self:add(the.interface)
55
124
 
56
125
              the.cursor = Cursor:new()
57
126
              self:add(the.cursor)
58
127
 
59
128
              love.mouse.setGrab(true)
60
129
              love.mouse.setVisible(false)
 
130
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
61
131
 
62
 
              --self:loadLayers('data/map.lua')
63
132
              self.focus = the.player
64
 
              --self:clampTo(self.map)
65
 
 
66
 
              self.gameStart = love.timer.getTime()
67
133
           end,
68
134
   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)
 
135
                 if the.keys:justPressed('escape') then
 
136
                    PauseView:new():activate()
 
137
                 end
81
138
 
82
 
                    self.lastRock = love.timer.getTime()
83
 
                 end
 
139
                 the.bullets:collide(the.planets)
 
140
                 the.bullets:collide(the.player)
 
141
                 the.bullets:collide(the.enemies)
84
142
              end,
 
143
   onEndFrame = function(self)
 
144
                   the.interface.translate.x = the.player.x - the.app.width / 2 + the.player.width / 2
 
145
                   the.interface.translate.y = the.player.y - the.app.height / 2 + the.player.height / 2
 
146
                end,
85
147
   draw = function (self, x, y)
86
148
             View.draw(self, x, y)
87
 
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
88
 
          end
 
149
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
150
          end,
89
151
}
90
152
 
91
153
MenuScreen = View:extend {
109
171
              math.randomseed(os.time())
110
172
 
111
173
              self.view = GameView:new()
 
174
 
112
175
              if DEBUG then
113
176
                 self.console:watch('VERSION', 'VERSION')
114
177
                 self.console:watch('updateTook', 'the.updateTook')
116
179
                 self.console:watch('the.player.y', 'the.player.y')
117
180
                 self.console:watch('the.app.width', 'the.app.width')
118
181
                 self.console:watch('the.app.height', 'the.app.height')
 
182
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
 
183
                 self.console:watch('num rocks', '#the.rocks.sprites')
 
184
                 self.console:watch('num planets', '#the.planets.sprites')
 
185
                 self.console:watch('num enemies', 'the.enemies:count()')
119
186
                 --self.console:watch('drawTook', 'the.drawTook')
120
187
 
121
188
                 -- back off that dark overlay a bit
123
190
              end
124
191
           end,
125
192
   onUpdate = function (self, dt)
126
 
                 if the.keys:justPressed('escape') then
127
 
                    self.quit()
 
193
                 if not (DEBUG and the.console.visible) then
 
194
                    if the.keys:justPressed('return') and the.keys:pressed('alt') then
 
195
                       love.graphics.toggleFullscreen()
 
196
                    elseif the.keys:justPressed('f1') then
 
197
                       local ss = love.graphics.newScreenshot()
 
198
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
 
199
                    elseif the.keys:justPressed('f11') then
 
200
                       love.graphics.toggleFullscreen()
 
201
                    end
128
202
                 end
129
203
              end,
130
204
   update = function (self, dt)
135
209
               end
136
210
            end
137
211
}
 
212
 
 
213
realRun = love.run
 
214
function love.run()
 
215
   -- should fail silently if it can't go to fullscreen...
 
216
   love.graphics.toggleFullscreen()
 
217
 
 
218
   realRun()
 
219
end
 
 
b'\\ No newline at end of file'