/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-16 04:27:01 UTC
  • Revision ID: josh@9ix.org-20130616042701-andlbpq3uuf679fy
enemy thrust

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