/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:21:01 UTC
  • Revision ID: josh@9ix.org-20130616042101-tp1rddbd3subc8lg
enemy is back

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)
 
101
              self:add(the.player.thrust)
53
102
 
54
103
              self:add(Enemy:new{x=400, y=300})
55
104
 
 
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
 
56
120
              the.cursor = Cursor:new()
57
121
              self:add(the.cursor)
58
122
 
59
123
              love.mouse.setGrab(true)
60
124
              love.mouse.setVisible(false)
 
125
              love.mouse.setPosition(the.app.width / 2, the.app.height / 2)
61
126
 
62
 
              --self:loadLayers('data/map.lua')
63
127
              self.focus = the.player
64
 
              --self:clampTo(self.map)
65
 
 
66
 
              self.gameStart = love.timer.getTime()
67
128
           end,
68
129
   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
 
130
                 the.bullets:collide(the.planets)
84
131
              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,
85
136
   draw = function (self, x, y)
86
137
             View.draw(self, x, y)
87
 
             love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
88
 
          end
 
138
             --love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
 
139
          end,
89
140
}
90
141
 
91
142
MenuScreen = View:extend {
109
160
              math.randomseed(os.time())
110
161
 
111
162
              self.view = GameView:new()
 
163
 
112
164
              if DEBUG then
113
165
                 self.console:watch('VERSION', 'VERSION')
114
166
                 self.console:watch('updateTook', 'the.updateTook')
116
168
                 self.console:watch('the.player.y', 'the.player.y')
117
169
                 self.console:watch('the.app.width', 'the.app.width')
118
170
                 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')
119
174
                 --self.console:watch('drawTook', 'the.drawTook')
120
175
 
121
176
                 -- back off that dark overlay a bit
123
178
              end
124
179
           end,
125
180
   onUpdate = function (self, dt)
126
 
                 if the.keys:justPressed('escape') then
127
 
                    self.quit()
 
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
128
196
                 end
129
197
              end,
130
198
   update = function (self, dt)
135
203
               end
136
204
            end
137
205
}
 
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'