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