/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
53
 
103
54
              self:add(Enemy:new{x=400, y=300})
104
55
 
105
 
              self:add(the.bullets)
106
 
              self:add(the.indicators)
107
 
              self:add(the.interface)
108
 
 
109
 
              for _ = 1, math.random(6) do
110
 
                 local planet = Planet:new{
111
 
                    x = math.random(the.app.width / 2,
112
 
                                    the.bg.width - the.app.width / 2),
113
 
                    y = math.random(the.app.height / 2,
114
 
                                    the.bg.height - the.app.height / 2),
115
 
                    rotation = math.random() * math.pi
116
 
                 }
117
 
                 the.planets:add(planet)
118
 
              end
119
 
 
120
56
              the.cursor = Cursor:new()
121
57
              self:add(the.cursor)
122
58
 
123
59
              love.mouse.setGrab(true)
124
60
              love.mouse.setVisible(false)
125
 
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
126
61
 
 
62
              --self:loadLayers('data/map.lua')
127
63
              self.focus = the.player
 
64
              --self:clampTo(self.map)
 
65
 
 
66
              self.gameStart = love.timer.getTime()
128
67
           end,
129
68
   onUpdate = function(self, dt)
130
 
                 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
131
84
              end,
132
 
   onEndFrame = function(self)
133
 
                   the.interface.translate.x = the.player.x - the.app.width / 2 + the.player.width / 2
134
 
                   the.interface.translate.y = the.player.y - the.app.height / 2 + the.player.height / 2
135
 
                end,
136
85
   draw = function (self, x, y)
137
86
             View.draw(self, x, y)
138
 
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
139
 
          end,
 
87
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
88
          end
140
89
}
141
90
 
142
91
MenuScreen = View:extend {
160
109
              math.randomseed(os.time())
161
110
 
162
111
              self.view = GameView:new()
163
 
 
164
112
              if DEBUG then
165
113
                 self.console:watch('VERSION', 'VERSION')
166
114
                 self.console:watch('updateTook', 'the.updateTook')
168
116
                 self.console:watch('the.player.y', 'the.player.y')
169
117
                 self.console:watch('the.app.width', 'the.app.width')
170
118
                 self.console:watch('the.app.height', 'the.app.height')
171
 
                 self.console:watch('num mirrors', '#the.mirrors.sprites')
172
 
                 self.console:watch('num rocks', '#the.rocks.sprites')
173
 
                 self.console:watch('num planets', '#the.planets.sprites')
174
119
                 --self.console:watch('drawTook', 'the.drawTook')
175
120
 
176
121
                 -- back off that dark overlay a bit
178
123
              end
179
124
           end,
180
125
   onUpdate = function (self, dt)
181
 
                 if not (DEBUG and the.console.visible) then
182
 
                    if the.keys:justPressed('q') then
183
 
                       self.quit()
184
 
                    elseif the.keys:justPressed('return') then
185
 
                       if the.keys:pressed('alt') then
186
 
                          love.graphics.toggleFullscreen()
187
 
                       else
188
 
                          self.view = GameView:new()
189
 
                       end
190
 
                    elseif the.keys:justPressed('f1') then
191
 
                       local ss = love.graphics.newScreenshot()
192
 
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
193
 
                    elseif the.keys:justPressed('f11') then
194
 
                       love.graphics.toggleFullscreen()
195
 
                    end
 
126
                 if the.keys:justPressed('escape') then
 
127
                    self.quit()
196
128
                 end
197
129
              end,
198
130
   update = function (self, dt)
203
135
               end
204
136
            end
205
137
}
206
 
 
207
 
realRun = love.run
208
 
function love.run()
209
 
   -- should fail silently if it can't go to fullscreen...
210
 
   love.graphics.toggleFullscreen()
211
 
 
212
 
   realRun()
213
 
end
 
 
b'\\ No newline at end of file'