27
13
stand = { frames = { 1 }, fps = 1 },
28
14
walk = { frames = { 2, 3 }, fps = 5 },
29
jump = { frames = { 4 }, fps = 1 },
30
climbLeft = { frames = { 5, 6 }, fps = 5 },
31
climbRight = { frames = { 7, 8 }, fps = 5 }
15
jump = { frames = { 4 }, fps = 1 }
36
19
onNew = function (self)
37
20
self.velocity.y = 0
38
21
self.maxVelocity.y = 400
78
61
if minVel[dir] and vel[dir] < minVel[dir] then vel[dir] = minVel[dir] end
79
62
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
87
64
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
95
66
onStartFrame = function (self)
96
67
-- this is all in startframe so it happens before
108
80
self.acceleration.y = 800
110
82
if self.onWall then
111
83
self.acceleration.y = 0
113
if self.onWall == 'right' then
114
self:play('climbRight')
115
elseif self.onWall == 'left' then
116
self:play('climbLeft')
119
85
if the.keys:pressed('up') then
120
86
self.velocity.y = -200
121
88
elseif the.keys:pressed('down') then
122
89
self.velocity.y = 200
124
92
self.velocity.y = 0
125
self:freeze(self.sequences[self.currentName].frames[1])
129
97
if the.keys:pressed('left') then
130
98
self.velocity.x = -200
131
99
if self.onGround then self:play('walk') end
132
if self.onWall == 'right' then
134
self.leftWallAt = love.timer.getTime()
100
if self.onWall == 'right' then self.onWall = false end
101
if self.onWall == 'right' then self.onWall = false end
136
102
elseif the.keys:pressed('right') then
137
103
self.velocity.x = 200
138
104
if self.onGround then self:play('walk') end
139
if self.onWall == 'left' then
141
self.leftWallAt = love.timer.getTime()
105
if self.onWall == 'left' then self.onWall = false end
144
if not self.onWall then
145
if self.onGround then self:play('stand') end
107
if self.onGround then self:play('stand') end
150
if the.keys:justPressed('up') and
151
(self.onGround or the.console.visible or
152
(love.timer.getTime() - self.leftWallAt < .1) ) then
110
if the.keys:justPressed('up') and self.onGround then
153
111
self.velocity.y = -400
154
112
self.jumping = true
188
145
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
206
148
Animation.update(self, elapsed)
208
150
collide = function (self, ...)
248
197
other[dir] = other[dir] + chg
251
function Sprite:update (elapsed)
252
if self.onUpdate then self:onUpdate(elapsed) end
255
200
GameView = View:extend {
256
201
onNew = function (self)
257
202
self:loadLayers('data/map.lua')
258
203
self.focus = the.player
259
204
self:clampTo(self.map)
261
the.recorder = Recorder:new{mousePosInterval = 9999}
262
the.app.meta:add(the.recorder)
263
if the.app.record then
264
the.recorder:startRecording()
265
elseif the.app.playback then
266
local storage = Storage:new{filename = 'record.lua'}
268
--print(inspect(storage.data))
269
the.recorder.record = storage.data
270
the.recorder:startPlaying()
273
206
onUpdate = function (self)
274
--print('drawTook: ', the.drawTook)
276
208
--the.player:collide(self.map)
277
209
--self.map:collide(the.player)
279
-- draw = function (self, x, y)
280
-- View.draw(self, x, y)
282
-- love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20)
286
213
the.app = App:new {
288
214
onRun = function (self)
289
215
self.view = GameView:new()
290
216
self.console:watch('onGround', 'the.player.onGround')
291
217
self.console:watch('onWall', 'the.player.onWall')
292
self.console:watch('updateTook', 'the.updateTook')
293
self.console:watch('drawTook', 'the.drawTook')
294
self.console:watch('recorder state', 'the.recorder.state')
296
--the.profiler = newProfiler('time', 2000)
297
--the.profiler = newProfiler()
298
--the.profiler:start()
300
219
onUpdate = function (self, dt)
301
if the.keys:justPressed('escape') then
304
local outfile = io.open( "profile.txt", "w+" )
305
the.profiler:report( outfile )
310
if not love.filesystem.remove('record.lua') then
311
print('could not remove record.lua')
313
local storage = Storage:new{
314
data = the.recorder.record,
315
filename = 'record.lua'
318
--print(inspect(the.recorder.record))
220
if the.keys:justPressed('escape') and
221
not self.console.visible then
324
update = function (self, dt)
325
the.updateStart = love.timer.getMicroTime()
327
if the.updateStart then
328
the.updateTook = love.timer.getMicroTime() - the.updateStart
333
function love.load (arg)
334
opts = getopt(arg, '')
336
the.app.playback = true
337
the.app.record = false
338
elseif opts['r'] then
339
the.app.record = true
b'\\ No newline at end of file'
b'\\ No newline at end of file'