5
5
__ = require 'underscore'
6
6
--inspect = require 'inspect'
14
elseif dir == 'y' then
17
if STRICT then error('dir '..dir) end
9
22
Player = Animation:extend {
10
23
image = 'data/player.png',
65
78
if minVel[dir] and vel[dir] < minVel[dir] then vel[dir] = minVel[dir] end
66
79
if maxVel[dir] and vel[dir] > maxVel[dir] then vel[dir] = maxVel[dir] end
81
-- ugly hack for falling through floor on really slow frames
82
if math.abs(vel[dir] * elapsed) > 32 then
68
87
if vel[dir] ~= 0 then self[dir] = self[dir] + vel[dir] * elapsed end
89
if self[dir] < 0 then self[dir] = 0 end
90
local edge = the.view.map[util.dim(dir)] -
91
the.player[util.dim(dir)]
92
-- TODO: take map position into account
93
if self[dir] > edge then self[dir] = edge end
70
95
onStartFrame = function (self)
71
96
-- this is all in startframe so it happens before
163
188
self.jumping = false
192
if not self.text then
193
self.text = Text:new{wordWrap = true, width = 50, tint = {0,0,0}}
194
self.textfill = Fill:new{width = 54, border = {0,0,255}}
195
--the.view:add(self.textfill)
196
--the.view:add(self.text)
198
self.text.text = "Blah blah big text etc etc wrapping"
199
self.text:centerAround(self.x+16, self.y+16, 'horizontal')
200
_, texth = self.text:getSize()
201
self.text.y = self.y - texth - 4
202
self.textfill.x = self.text.x - 2
203
self.textfill.y = self.text.y - 2
204
self.textfill.height = texth + 4
166
206
Animation.update(self, elapsed)
168
208
collide = function (self, ...)
215
248
other[dir] = other[dir] + chg
251
-- don't use zoetrope physics
252
function Sprite:update (elapsed)
253
if self.onUpdate then self:onUpdate(elapsed) end
218
256
GameView = View:extend {
219
257
onNew = function (self)
220
258
self:loadLayers('data/map.lua')
221
259
self.focus = the.player
222
260
self:clampTo(self.map)
262
the.recorder = Recorder:new{mousePosInterval = 9999}
263
the.app.meta:add(the.recorder)
264
if the.app.record then
265
the.recorder:startRecording()
266
elseif the.app.playback then
267
local storage = Storage:new{filename = 'record.lua'}
269
--print(inspect(storage.data))
270
the.recorder.record = storage.data
271
the.recorder:startPlaying()
224
274
onUpdate = function (self)
275
--print('drawTook: ', the.drawTook)
226
277
--the.player:collide(self.map)
227
278
--self.map:collide(the.player)
280
-- draw = function (self, x, y)
281
-- View.draw(self, x, y)
283
-- love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
231
287
the.app = App:new {
232
289
onRun = function (self)
233
290
self.view = GameView:new()
234
291
self.console:watch('onGround', 'the.player.onGround')
235
292
self.console:watch('onWall', 'the.player.onWall')
236
293
self.console:watch('updateTook', 'the.updateTook')
237
294
self.console:watch('drawTook', 'the.drawTook')
295
self.console:watch('recorder state', 'the.recorder.state')
239
297
--the.profiler = newProfiler('time', 2000)
240
298
--the.profiler = newProfiler()
311
if not love.filesystem.remove('record.lua') then
312
print('could not remove record.lua')
314
local storage = Storage:new{
315
data = the.recorder.record,
316
filename = 'record.lua'
319
--print(inspect(the.recorder.record))