Engine 0.0.4
Game engine in lua
Loading...
Searching...
No Matches
main.lua
Go to the documentation of this file.
1--! @file src/lib/repl/main.lua
2--! @short Read Eval Print Loop
3--! @brief an interpreter to debuging the game via stdio.
4--! @par Extended Backus-Naur Form
5--! @startebnf
6--! line = exit | frame_skip | [frame_skip], variable, ["=", value (* assignment *)];
7--! frame_skip = [digit], "!" ;
8--! digit = { ? 0 - 9 ? }- ;
9--! exit = "?" ;
10--! @endebnf
11local zeebo_module = require('src/lib/engine/module')
12local engine_game = require('src/lib/engine/game')
13local engine_math = require('src/lib/engine/math')
14local engine_color = require('src/lib/object/color')
15local engine_math = require('src/lib/engine/math')
16local engine_http = require('src/lib/engine/http')
17local engine_csv = require('src/lib/engine/csv')
18local protocol_curl = require('src/lib/protocol/http_curl')
19local application_default = require('src/lib/object/application')
20local color = require('src/lib/object/color')
21local game = require('src/lib/object/game')
22local std = require('src/lib/object/std')
23
24local function line_skip_frames(line_src)
25 local frames, line = line_src:match('(%d+)!(.*)')
26 if frames and line then
27 return frames, line
28 end
29 frames, line = line_src:match('(!)(.*)')
30 if frames and line then
31 return 1, line
32 end
33 return 0, line_src
34end
35
36local function line_assignment(line)
37 local variable, assignment = line:match('(.*)=(.*)')
38 if variable and assignment then
39 return variable, assignment
40 end
41 return line, ''
42end
43
44local function evaluate(var, assign, std, game, application)
45 local script = ''
46
47 if assign and #assign > 0 then
48 script = 'return function(std, game, application)\n'..var..'=('..assign..')\n return ('..var..')\nend'
49 elseif var and #var > 0 then
50 script = 'return function(std, game, application)\nreturn ('..var..')\nend'
51 end
52
53 if script and #script > 0 then
54 local ok, output = pcall(function()
55 local func, err = load(script)
56 if func then
57 local result = func()
58 return result(std, game, application)
59 else
60 error(err)
61 end
62 end)
63
64 return ok, tostring(output)
65 end
66
67 return true, ''
68end
69
70local function main()
71 local frames = 0
72 local variable = ''
73 local assignment = ''
74 local started = false
76
77 -- init the game
83 :package('@math', engine_math.clib)
84 :package('@random', engine_math.clib_random)
85 :package('@csv', engine_csv)
87 :run()
88
89 application.callbacks.init(std, game)
90
91 while true do
92 local index = 1
93 local ok, line = pcall(io.read)
94
95 if not ok or line == nil or line == '?' then
96 break
97 end
98
99 frames, line = line_skip_frames(line)
100 variable, assignment = line_assignment(line)
101 frames = tonumber(frames)
102
103 local ok, output = evaluate(variable, assignment, std, game, application)
104 if ok then
105 print(output)
106 else
107 io.stderr:write(output)
108 print('\n')
109 end
110
111 if not started and frames > 0 and application.callbacks.init then
112 application.callbacks.init(std, game)
113 started = true
114 end
115
116 while index <= frames do
117 if application.callbacks.loop then
118 application.callbacks.loop(std, game)
119 end
120 if application.callbacks.draw then
121 application.callbacks.draw(std, game)
122 end
123 index = index + 1
124 end
125 end
126end
127
128if not package.loaded['modulename'] then
129 main()
130end
local function run(self)
local function file(self, file)
local function require(std, game, application)
local function loadgame(game_file)
safe load game
local function package(self, module_name, module, custom)
local function exit(self)
local function error(self, handler_func)
local application
Definition main.lua:16
local engine_game
Definition main.lua:5
local game
Definition main.lua:17
local std
Definition main.lua:18
local engine_color
Definition main.lua:7
local engine_math
Definition main.lua:4
local engine_http
Definition main.lua:6
local zeebo_module
Definition main.lua:1
function love load(args)
local application_default
Definition main.lua:11
local color
Definition main.lua:12
local function line_skip_frames(line_src)
local protocol_curl
Definition main.lua:18
local engine_csv
Definition main.lua:17
local function evaluate(var, assign, std, game, application)
local function main()
local function line_assignment(line)
local function line(x1, y1, x2, y2)
local math
Definition draw.lua:1
local function draw(std, game)
local function init(std, game)
local function loop(std, game)
local function http(std, game)