bzr branch
http://9ix.org/bzr/zoeplat
2
by Josh C
basic tiles, map, player, movement |
1 |
STRICT = true |
2 |
DEBUG = true |
|
3 |
||
4 |
require 'zoetrope' |
|
20
by Josh C
fairly major overhaul of collision handling to track whether we're on a |
5 |
__ = require 'underscore' |
12
by Josh C
only jump when you're on the ground |
6 |
--inspect = require 'inspect' |
24
by Josh C
profiling and analysis |
7 |
require 'pepperprof' |
31
by Josh C
command line option for playback/record |
8 |
require 'getopt_alt' |
2
by Josh C
basic tiles, map, player, movement |
9 |
|
26
by Josh C
don't go off the edge |
10 |
util = { |
11 |
dim = function(dir) |
|
12 |
if dir == 'x' then |
|
13 |
return 'width' |
|
14 |
elseif dir == 'y' then |
|
15 |
return 'height' |
|
16 |
else |
|
29
by Josh C
record/playback system (doesn't really work) |
17 |
if STRICT then error('dir '..dir) end |
26
by Josh C
don't go off the edge |
18 |
end |
19 |
end |
|
20 |
} |
|
21 |
||
2
by Josh C
basic tiles, map, player, movement |
22 |
GameView = View:extend { |
23 |
onNew = function (self) |
|
24 |
self:loadLayers('data/map.lua') |
|
25 |
self.focus = the.player |
|
26 |
self:clampTo(self.map) |
|
29
by Josh C
record/playback system (doesn't really work) |
27 |
|
28 |
the.recorder = Recorder:new{mousePosInterval = 9999} |
|
29 |
the.app.meta:add(the.recorder) |
|
31
by Josh C
command line option for playback/record |
30 |
if the.app.record then |
29
by Josh C
record/playback system (doesn't really work) |
31 |
the.recorder:startRecording() |
31
by Josh C
command line option for playback/record |
32 |
elseif the.app.playback then |
29
by Josh C
record/playback system (doesn't really work) |
33 |
local storage = Storage:new{filename = 'record.lua'} |
34 |
storage:load() |
|
35 |
--print(inspect(storage.data)) |
|
36 |
the.recorder.record = storage.data |
|
37 |
the.recorder:startPlaying() |
|
38 |
end |
|
8
by Josh C
some basic collision (and workarounds) |
39 |
end, |
40 |
onUpdate = function (self) |
|
27
by Josh C
hack to not fall through floor on long first tick, monkey patch to turn |
41 |
--print('drawTook: ', the.drawTook) |
8
by Josh C
some basic collision (and workarounds) |
42 |
--print('tick') |
17
by Josh C
reorganize code - separate X and Y physics so we can collide in each |
43 |
--the.player:collide(self.map) |
8
by Josh C
some basic collision (and workarounds) |
44 |
--self.map:collide(the.player) |
28
by Josh C
fps indicator, maybe a new tile |
45 |
end, |
29
by Josh C
record/playback system (doesn't really work) |
46 |
-- draw = function (self, x, y) |
47 |
-- View.draw(self, x, y) |
|
28
by Josh C
fps indicator, maybe a new tile |
48 |
|
29
by Josh C
record/playback system (doesn't really work) |
49 |
-- love.graphics.print('FPS:' .. love.timer.getFPS(), 20, 20) |
50 |
-- end |
|
2
by Josh C
basic tiles, map, player, movement |
51 |
} |
52 |
||
53 |
the.app = App:new { |
|
31
by Josh C
command line option for playback/record |
54 |
record = true, |
2
by Josh C
basic tiles, map, player, movement |
55 |
onRun = function (self) |
56 |
self.view = GameView:new() |
|
15
by Josh C
more reliable onGround calc |
57 |
self.console:watch('onGround', 'the.player.onGround') |
16
by Josh C
try to track X collisions. break out Sprite's physics in prep for |
58 |
self.console:watch('onWall', 'the.player.onWall') |
24
by Josh C
profiling and analysis |
59 |
self.console:watch('updateTook', 'the.updateTook') |
60 |
self.console:watch('drawTook', 'the.drawTook') |
|
29
by Josh C
record/playback system (doesn't really work) |
61 |
self.console:watch('recorder state', 'the.recorder.state') |
24
by Josh C
profiling and analysis |
62 |
|
63 |
--the.profiler = newProfiler('time', 2000) |
|
64 |
--the.profiler = newProfiler() |
|
65 |
--the.profiler:start() |
|
2
by Josh C
basic tiles, map, player, movement |
66 |
end, |
67 |
onUpdate = function (self, dt) |
|
24
by Josh C
profiling and analysis |
68 |
if the.keys:justPressed('escape') then |
69 |
if the.profiler then |
|
70 |
the.profiler:stop() |
|
71 |
local outfile = io.open( "profile.txt", "w+" ) |
|
72 |
the.profiler:report( outfile ) |
|
73 |
outfile:close() |
|
74 |
end |
|
75 |
||
31
by Josh C
command line option for playback/record |
76 |
if self.record then |
29
by Josh C
record/playback system (doesn't really work) |
77 |
if not love.filesystem.remove('record.lua') then |
31
by Josh C
command line option for playback/record |
78 |
print('could not remove record.lua') |
29
by Josh C
record/playback system (doesn't really work) |
79 |
end |
80 |
local storage = Storage:new{ |
|
81 |
data = the.recorder.record, |
|
82 |
filename = 'record.lua' |
|
83 |
} |
|
84 |
storage:save(false) |
|
85 |
--print(inspect(the.recorder.record)) |
|
86 |
end |
|
87 |
||
17
by Josh C
reorganize code - separate X and Y physics so we can collide in each |
88 |
self.quit() |
12
by Josh C
only jump when you're on the ground |
89 |
end |
24
by Josh C
profiling and analysis |
90 |
end, |
91 |
update = function (self, dt) |
|
92 |
the.updateStart = love.timer.getMicroTime() |
|
93 |
App.update(self, dt) |
|
94 |
if the.updateStart then |
|
95 |
the.updateTook = love.timer.getMicroTime() - the.updateStart |
|
96 |
end |
|
97 |
end |
|
98 |
} |
|
31
by Josh C
command line option for playback/record |
99 |
|
100 |
function love.load (arg) |
|
101 |
opts = getopt(arg, '') |
|
102 |
if opts['p'] then |
|
103 |
the.app.playback = true |
|
104 |
the.app.record = false |
|
105 |
elseif opts['r'] then |
|
106 |
the.app.record = true |
|
107 |
end |
|
108 |
||
109 |
the.app:run() |
|
110 |
end |