/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 14:59:35 UTC
  • Revision ID: josh@9ix.org-20130630145935-y34o51cg3lsom5bg
"safe" zone on planets - no new enemies will track you if you're there.

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