/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
17
 
23
18
util = {
24
19
   signOf = function(value)
27
22
               else
28
23
                  return -1
29
24
               end
30
 
            end,
31
 
   shortestVector = function(from, to)
32
 
                       if STRICT then
33
 
                          if from.x < the.app.width / 2 or
34
 
                             from.x > the.bg.width - the.app.width / 2 or
35
 
                             from.y < the.app.height / 2 or
36
 
                             from.y > the.bg.height - the.app.height / 2 then
37
 
                             error('"from" coordinate out of bounds: X='..from.x..' Y='..from.y)
38
 
                          end
39
 
 
40
 
                          if to.x < the.app.width / 2 or
41
 
                             to.x > the.bg.width - the.app.width / 2 or
42
 
                             to.y < the.app.height / 2 or
43
 
                             to.y > the.bg.height - the.app.height / 2 then
44
 
                             error('"to" coordinate out of bounds: X='..to.x..' Y='..to.y)
45
 
                          end
46
 
                       end
47
 
 
48
 
                       -- normalize grid to account for mirror zones
49
 
                       local fx = from.x - the.app.width / 2
50
 
                       local fy = from.y - the.app.height / 2
51
 
                       local tx = to.x - the.app.width / 2
52
 
                       local ty = to.y - the.app.height / 2
53
 
 
54
 
                       local short = {}
55
 
 
56
 
                       -- pick shorter x
57
 
                       if math.abs(tx - fx) < math.abs(tx - fx - (the.bg.width - the.app.width)) then
58
 
                          -- straight path is shorter
59
 
                          short.x = tx - fx
60
 
                       else
61
 
                          short.x = tx - fx - (the.bg.width - the.app.width)
62
 
                       end
63
 
 
64
 
                       -- pick shorter y
65
 
                       if math.abs(ty - fy) < math.abs(ty - fy - (the.bg.height - the.app.height)) then
66
 
                          -- straight path is shorter
67
 
                          short.y = ty - fy
68
 
                       else
69
 
                          short.y = ty - fy - (the.bg.height - the.app.height)
70
 
                       end
71
 
 
72
 
                       return vector.new(short.x, short.y)
73
 
                    end
 
25
            end
74
26
}
75
27
 
76
28
GameView = View:extend {
 
29
   lastRock = 0,
 
30
   rockInterval = 1,
 
31
   gameStart = 0,
77
32
   onNew = function (self)
78
 
              the.storage = Storage:new{filename = 'scores.lua'}
79
 
              the.storage:load()
80
 
              --if not the.storage.data.highScore then
81
 
              --   print('initializing storage')
82
 
              --   the.storage.data = {highScore = 0}
83
 
              --end
84
 
 
85
 
              the.bullets = Group:new()
86
 
              the.interface = Group:new()
87
 
              the.planets = Group:new()
88
 
              the.indicators = Group:new()
 
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
89
41
 
90
42
              the.bg = Tile:new{
91
43
                 image = 'data/stars3.png',
92
 
                 width = 13660,
93
 
                 height = 7680
 
44
                 -- 1366x768 * 3
 
45
                 width = 4098,
 
46
                 height = 2304
94
47
              }
95
48
              self:add(the.bg)
96
49
 
97
 
              self:add(the.planets)
98
 
 
99
50
              --the.player = CrystalPlayer:new{x=400,y=300}
100
 
              the.player = SpacePlayer:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
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
 
              local e = Enemy:new{x=400, y=300}
106
 
              --local e = Enemy:new{x=the.bg.width / 2, y=the.bg.height / 2}
107
 
              self:add(e)
108
 
              self:add(e.thrust) -- why doesn't this work in Enemy.new?
109
 
 
110
 
              self:add(the.bullets)
111
 
              self:add(the.indicators)
112
 
              self:add(the.interface)
113
 
 
114
 
              for _ = 1, math.random(6) do
115
 
                 local planet = Planet:new{
116
 
                    x = math.random(the.app.width / 2,
117
 
                                    the.bg.width - the.app.width / 2),
118
 
                    y = math.random(the.app.height / 2,
119
 
                                    the.bg.height - the.app.height / 2),
120
 
                    rotation = math.random() * math.pi
121
 
                 }
122
 
                 the.planets:add(planet)
123
 
              end
 
53
 
 
54
              self:add(Enemy:new{x=400, y=300})
124
55
 
125
56
              the.cursor = Cursor:new()
126
57
              self:add(the.cursor)
127
58
 
128
59
              love.mouse.setGrab(true)
129
60
              love.mouse.setVisible(false)
130
 
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
131
61
 
 
62
              --self:loadLayers('data/map.lua')
132
63
              self.focus = the.player
 
64
              --self:clampTo(self.map)
 
65
 
 
66
              self.gameStart = love.timer.getTime()
133
67
           end,
134
68
   onUpdate = function(self, dt)
135
 
                 the.bullets:collide(the.planets)
136
 
                 the.bullets:collide(the.player)
 
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()
 
83
                 end
137
84
              end,
138
 
   onEndFrame = function(self)
139
 
                   the.interface.translate.x = the.player.x - the.app.width / 2 + the.player.width / 2
140
 
                   the.interface.translate.y = the.player.y - the.app.height / 2 + the.player.height / 2
141
 
                end,
142
85
   draw = function (self, x, y)
143
86
             View.draw(self, x, y)
144
 
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
145
 
          end,
 
87
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
88
          end
146
89
}
147
90
 
148
91
MenuScreen = View:extend {
166
109
              math.randomseed(os.time())
167
110
 
168
111
              self.view = GameView:new()
169
 
 
170
112
              if DEBUG then
171
113
                 self.console:watch('VERSION', 'VERSION')
172
114
                 self.console:watch('updateTook', 'the.updateTook')
174
116
                 self.console:watch('the.player.y', 'the.player.y')
175
117
                 self.console:watch('the.app.width', 'the.app.width')
176
118
                 self.console:watch('the.app.height', 'the.app.height')
177
 
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
178
 
                 self.console:watch('num rocks', '#the.rocks.sprites')
179
 
                 self.console:watch('num planets', '#the.planets.sprites')
180
119
                 --self.console:watch('drawTook', 'the.drawTook')
181
120
 
182
121
                 -- back off that dark overlay a bit
184
123
              end
185
124
           end,
186
125
   onUpdate = function (self, dt)
187
 
                 if not (DEBUG and the.console.visible) then
188
 
                    if the.keys:justPressed('q') then
189
 
                       self.quit()
190
 
                    elseif the.keys:justPressed('return') then
191
 
                       if the.keys:pressed('alt') then
192
 
                          love.graphics.toggleFullscreen()
193
 
                       else
194
 
                          self.view = GameView:new()
195
 
                       end
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
 
126
                 if the.keys:justPressed('escape') then
 
127
                    self.quit()
202
128
                 end
203
129
              end,
204
130
   update = function (self, dt)
209
135
               end
210
136
            end
211
137
}
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'