/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-19 01:06:14 UTC
  • Revision ID: josh@9ix.org-20130619010614-j3rbcv1c0my2tw0f
enemy shields and death

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'
17
22
 
18
23
util = {
19
24
   signOf = function(value)
22
27
               else
23
28
                  return -1
24
29
               end
25
 
            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
26
74
}
27
75
 
28
76
GameView = View:extend {
29
 
   lastRock = 0,
30
 
   rockInterval = 1,
31
 
   gameStart = 0,
32
77
   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
 
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()
 
89
              the.enemies = Group:new()
41
90
 
42
91
              the.bg = Tile:new{
43
92
                 image = 'data/stars3.png',
44
 
                 -- 1366x768 * 3
45
 
                 width = 4098,
46
 
                 height = 2304
 
93
                 width = 13660,
 
94
                 height = 7680
47
95
              }
48
96
              self:add(the.bg)
49
97
 
 
98
              self:add(the.planets)
 
99
 
50
100
              --the.player = CrystalPlayer:new{x=400,y=300}
51
 
              the.player = SpacePlayer:new{x=1366,y=768}
 
101
              the.player = SpacePlayer:new{x=the.bg.width / 2, y=the.bg.height / 2}
52
102
              self:add(the.player)
53
 
 
54
 
              self:add(Enemy:new{x=400, y=300})
 
103
              self:add(the.player.thrust)
 
104
              self:add(the.player.shield)
 
105
 
 
106
              self:add(the.enemies)
 
107
 
 
108
              local e = Enemy:new{x=400, y=300}
 
109
              --local e = Enemy:new{x=the.bg.width / 2, y=the.bg.height / 2}
 
110
              the.enemies:add(e)
 
111
              self:add(e.thrust) -- why doesn't this work in Enemy.new?
 
112
              self:add(e.shield)
 
113
 
 
114
              self:add(the.bullets)
 
115
              self:add(the.indicators)
 
116
              self:add(the.interface)
 
117
 
 
118
              for _ = 1, math.random(6) do
 
119
                 local planet = Planet:new{
 
120
                    x = math.random(the.app.width / 2,
 
121
                                    the.bg.width - the.app.width / 2),
 
122
                    y = math.random(the.app.height / 2,
 
123
                                    the.bg.height - the.app.height / 2),
 
124
                    rotation = math.random() * math.pi
 
125
                 }
 
126
                 the.planets:add(planet)
 
127
              end
55
128
 
56
129
              the.cursor = Cursor:new()
57
130
              self:add(the.cursor)
58
131
 
59
132
              love.mouse.setGrab(true)
60
133
              love.mouse.setVisible(false)
 
134
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
61
135
 
62
 
              --self:loadLayers('data/map.lua')
63
136
              self.focus = the.player
64
 
              --self:clampTo(self.map)
65
 
 
66
 
              self.gameStart = love.timer.getTime()
67
137
           end,
68
138
   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)
81
 
 
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')
119
185
                 --self.console:watch('drawTook', 'the.drawTook')
120
186
 
121
187
                 -- back off that dark overlay a bit
123
189
              end
124
190
           end,
125
191
   onUpdate = function (self, dt)
126
 
                 if the.keys:justPressed('escape') then
127
 
                    self.quit()
 
192
                 if not (DEBUG and the.console.visible) then
 
193
                    if the.keys:justPressed('q') then
 
194
                       self.quit()
 
195
                    elseif the.keys:justPressed('return') then
 
196
                       if the.keys:pressed('alt') then
 
197
                          love.graphics.toggleFullscreen()
 
198
                       else
 
199
                          self.view = GameView:new()
 
200
                       end
 
201
                    elseif the.keys:justPressed('f1') then
 
202
                       local ss = love.graphics.newScreenshot()
 
203
                       ss:encode('screenshot-' ..love.timer.getTime()..'.png')
 
204
                    elseif the.keys:justPressed('f11') then
 
205
                       love.graphics.toggleFullscreen()
 
206
                    end
128
207
                 end
129
208
              end,
130
209
   update = function (self, dt)
135
214
               end
136
215
            end
137
216
}
 
217
 
 
218
realRun = love.run
 
219
function love.run()
 
220
   -- should fail silently if it can't go to fullscreen...
 
221
   love.graphics.toggleFullscreen()
 
222
 
 
223
   realRun()
 
224
end
 
 
b'\\ No newline at end of file'