diff --git a/docs/old/idea.zl-lisp b/docs/old/idea.zl-lisp index 8f62bc5..ba6f7e7 100644 --- a/docs/old/idea.zl-lisp +++ b/docs/old/idea.zl-lisp @@ -1,10 +1,10 @@ -(set screen-width 800) -(set screen-height 450) +(set screen-width 800:i32) +(set screen-height 450:i32) (set username (get argv 1)) (set password (get argv 2)) -(set me (make :player username (0.0 1.0 2.0) PURPLE)) +(set me (make:player username (0.0 1.0 2.0) PURPLE)) (set players (login me)) -(set camera (make :camera (me.pos.x (add me.pos.y 10.0) (add me.pos.z 10.0)) +(set camera (make:camera (me.pos.x (add me.pos.y 10.0) (add me.pos.z 10.0)) (me.pos.x me.pos.y me.pos.z) (0.0 1.0 0.0) 45.0 diff --git a/docs/old/project-example-v1/project.ztl b/docs/old/project-example-v1/project.ztl new file mode 100644 index 0000000..f1b049f --- /dev/null +++ b/docs/old/project-example-v1/project.ztl @@ -0,0 +1,47 @@ +fn build(c: ProjectConfig) { + c.name("MMO Project"); + + c.client([ + LanguageSettings { + lang: "c", + file: "src/client.ztl", + outpath: "client/", + ffi: [ + FFISetting { + "name":"raylib", + "library":"$RAYLIB_PATH/libraylib.a", + "path":"", + "build": "make build", + } + ] + } + ]) + + c.server([ + LanguageSettings { + lang: "javascript", + file: "src/server.ztl", + outpath: "server/" + } + ]); + + c.common([ + LanguageSettings { + lang: "c", + file: "src/common.ztl", + outpath: "client/" + }, + LanguageSettings { + lang: "javascript", + file: "src/common.ztl", + outpath: "server/" + }, + LanguageSettings { + lang: "sqlite", + file: "src/common.ztl", + outpath: "db/" + } + ]); + + c.build(); +} diff --git a/docs/old/project-example-v1/src/client.ztl b/docs/old/project-example-v1/src/client.ztl index 6e1323b..2f5fe8e 100644 --- a/docs/old/project-example-v1/src/client.ztl +++ b/docs/old/project-example-v1/src/client.ztl @@ -1,100 +1,93 @@ use "common.ztl" -fn :login (9p, Player, str -> []Player) { - set s to pop; - set p to pop; - set password to pop; +fn login(s: 9p, p: Player, password: str): []Player { + s.auth(p.username, password) + return s.read("players") +} - s.auth(p.username, password); - return s.read("players"); -}; +fn main(argc: i32, argv: []str): i32 { + const screen_width = 800; + const screen_height = 450; -fn :main (i32 str[] -> i32) { - set :argc to pop; - set :argv to pop; + let username = argv[0]; + let password = argv[1]; - set :screen_width to i32 800; - set :screen_height to i32 450; + let s = tunnel("localhost:25565"); + s.attach(); - set :username to argv[0]; - set :password to argv[1]; - - set :me to Player { + let me = Player( username, - vec {0.0 1.0 2.0}, - purple, - }; + Vec(0.0, 1.0, 2.0), + purple + ); + let players = login(s, me, password); - set :players to Player[] { login me password; }; + let camera = Camera3D( + Vec(0.0, 1.0, 0.0), + 45.0, + :CAMERA_PERSPECTIVE, + Vec( + me.pos.x + 10.0, + me.pos.y + 10.0, + me.pos.z + ), + me.pos + ); - set :camera to Camera3D { - vec {0.0 1.0 0.0}, - i32 45.0, - atom :CAMERA_PERSPECTIVE, - vec { - add me.pos.x 10.0, - add me.pos.y 10.0, - me.pos.z, - }, - me.pos, - }; - - init_window "zwl client : raylib" screen_width screen_height; - set_target_fps 60; + init_window("zwl client : raylib", screen_width, screen_height); + set_target_fps(60); (* Main game loop *) - while ( not window_should_close ) { + while ( not window_should_close() ) { + let player_updated = false; - if (is_key_down :KEY_RIGHT) { - set me.pos.x to {add me.pos.x 0.2}; - set :player_updated true; + if (is_key_down(KEY_RIGHT)) { + me.pos.x = me.pos.x + 0.2; + player_updated = true; } - if (is_key_down :KEY_LEFT) { - set me.pos.x to {sub me.pos.x 0.2}; - set :player_updated true; + if (is_key_down(KEY_LEFT)) { + me.pos.x = me.pos.x - 0.2; + player_updated = true; } - if (is_key_down :KEY_DOWN) { - set me.pos.z to {add me.pos.z 0.2}; - set :player_updated true; + if (is_key_down(KEY_DOWN)) { + me.pos.z = me.pos.z + 0.2; + player_updated = true; } - if (is_key_down :KEY_UP) { - set me.pos.z to {sub me.pos.z 0.2}; - set :player_updated true; + if (is_key_down(KEY_UP)) { + me.pos.z = me.pos.z - 0.2; + player_updated = true; } - sync_camera camera me; + sync_camera(s, me, camera); if (player_updated) { - set :players move me; - } else { - set :players ping me; + players = move(s, me); + } else { + players = ping(s, me); } - begin_drawing; - clear_background RAYWHITE; + begin_drawing(); + clear_background(RAYWHITE); - begin_mode_3d camera; + begin_mode_3d(camera); (* Draw floor *) - draw_grid 30 1.0; + draw_grid(30, 1.0); - draw_cube me.pos 0.5 0.5 0.5 me.apperance; + draw_cube(me.pos, 0.5, 0.5, 0.5, me.apperance); - map :player players { - draw_cube player.pos 0.5 0.5 0.5 player.apperance; + for (player in players) { + draw_cube(player.pos, 0.5, 0.5, 0.5, player.apperance); } - end_mode_3d; + end_mode_3d(); - end_drawing; - } - /* Detect window close button or ESC key */ + end_drawing(); + } - set :players to logout me; - close_window; /*Close window and OpenGL context */ -}; - -main; \ No newline at end of file + logout(me); + close_window(); (* Close window and OpenGL context *) +} diff --git a/docs/old/project-example-v1/src/common.ztl b/docs/old/project-example-v1/src/common.ztl index 1cb670f..ba64d16 100644 --- a/docs/old/project-example-v1/src/common.ztl +++ b/docs/old/project-example-v1/src/common.ztl @@ -1,19 +1,19 @@ -type :Vec { - f32 :x, - f32 :y, - f32 :z, -}; +type Vec { + x: f32, + y: f32, + z: f32, +} -type :Color { - i8 :r, - i8 :g, - i8 :b, -}; +type Color { + r: u8, + g: u8, + b: u8, +} -type :Player { - str :username, - Vec :pos, - Color :color, -}; +type Player { + username: str, + pos: Vec, + color: Color, +} -Color :purple {255 255 0}; +const purple = Color{255, 255, 0}; diff --git a/docs/old/project-example-v1/src/server.ztl b/docs/old/project-example-v1/src/server.ztl index 6e6f755..c8e4db6 100644 --- a/docs/old/project-example-v1/src/server.ztl +++ b/docs/old/project-example-v1/src/server.ztl @@ -1,11 +1,8 @@ use "common.ztl" -fn :main(i32, []str -> i32) { - set :argc to pop; - set :argv to pop; - - set s to tunnel "0.0.0.0:25565"; - s.host ( +fn main(argc: i32, argv: []str): i32 { + let s = tunnel(); + s.host("0.0.0.0:25565", version, auth, error, @@ -18,46 +15,45 @@ fn :main(i32, []str -> i32) { write, clunk, remove, - stat, - ); + stat); } -fn :version(9pmsg) { +fn version(m : 9pmsg) { } -fn :auth(9pmsg) { +fn auth(m : 9pmsg) { } -fn :error(9pmsg) { +fn error(m : 9pmsg) { } -fn :flush(9pmsg) { +fn flush(m : 9pmsg) { } -fn :attach(9pmsg) { +fn attach(m : 9pmsg) { } -fn :walk(9pmsg) { +fn walk(m : 9pmsg) { } -fn :open(9pmsg) { +fn open(m : 9pmsg) { } -fn :create(9pmsg) { +fn create(m : 9pmsg) { } -fn :read(9pmsg) { +fn read(m : 9pmsg) { } -fn :write(9pmsg) { +fn write(m : 9pmsg) { } -fn :clunk(9pmsg) { +fn clunk(m : 9pmsg) { } -fn :remove(9pmsg) { +fn remove(m : 9pmsg) { } -fn :stat(9pmsg) { +fn stat(m : 9pmsg) { } \ No newline at end of file diff --git a/docs/project-example-v2/project.ztl b/docs/project-example-v2/project.ztl index f1b049f..e9bf222 100644 --- a/docs/project-example-v2/project.ztl +++ b/docs/project-example-v2/project.ztl @@ -1,16 +1,18 @@ -fn build(c: ProjectConfig) { +fn :build (ProjectConfig) { + set c to pop; + c.name("MMO Project"); c.client([ LanguageSettings { - lang: "c", - file: "src/client.ztl", - outpath: "client/", - ffi: [ + "lang": "c", + "file": "src/client.ztl", + "outpath": "client/", + "ffi": [ FFISetting { "name":"raylib", "library":"$RAYLIB_PATH/libraylib.a", - "path":"", + "path":"./", "build": "make build", } ] @@ -19,27 +21,27 @@ fn build(c: ProjectConfig) { c.server([ LanguageSettings { - lang: "javascript", - file: "src/server.ztl", - outpath: "server/" + "lang": "javascript", + "file": "src/server.ztl", + "outpath": "server/" } ]); c.common([ LanguageSettings { - lang: "c", - file: "src/common.ztl", - outpath: "client/" + "lang": "c", + "file": "src/common.ztl", + "outpath": "client/" }, LanguageSettings { - lang: "javascript", - file: "src/common.ztl", - outpath: "server/" + "lang": "javascript", + "file": "src/common.ztl", + "outpath": "server/" }, LanguageSettings { - lang: "sqlite", - file: "src/common.ztl", - outpath: "db/" + "lang": "sqlite", + "file": "src/common.ztl", + "outpath": "db/" } ]); diff --git a/docs/project-example-v2/src/client.ztl b/docs/project-example-v2/src/client.ztl index 2f5fe8e..290a2f3 100644 --- a/docs/project-example-v2/src/client.ztl +++ b/docs/project-example-v2/src/client.ztl @@ -1,93 +1,101 @@ use "common.ztl" -fn login(s: 9p, p: Player, password: str): []Player { - s.auth(p.username, password) - return s.read("players") -} +fn :login (9p Player str -> []Player) { + set s to pop; + set p to pop; + set password to pop; -fn main(argc: i32, argv: []str): i32 { - const screen_width = 800; - const screen_height = 450; + s.auth(p.username, password); + return s.read("players"); +}; - let username = argv[0]; - let password = argv[1]; - let s = tunnel("localhost:25565"); - s.attach(); +fn :main (i32 str[i32] -> i32) { /* str[i32] is the same as Map in JS*/ + set :argc to pop; + set :argv to pop; - let me = Player( + set :screen_width to i32 800; + set :screen_height to i32 450; + + set :username to argv[0]; + set :password to argv[1]; + + set :me to Player { username, - Vec(0.0, 1.0, 2.0), - purple - ); - let players = login(s, me, password); + vec {0.0 1.0 2.0}, + purple, + }; - let camera = Camera3D( - Vec(0.0, 1.0, 0.0), - 45.0, - :CAMERA_PERSPECTIVE, - Vec( - me.pos.x + 10.0, - me.pos.y + 10.0, - me.pos.z - ), - me.pos - ); + set :players to Player[] { login me password; }; - init_window("zwl client : raylib", screen_width, screen_height); - set_target_fps(60); + set :camera to Camera3D { + vec {0.0 1.0 0.0}, + i32 45.0, + atom :CAMERA_PERSPECTIVE, + vec { + add me.pos.x 10.0, + add me.pos.y 10.0, + me.pos.z, + }, + me.pos, + }; - (* Main game loop *) - while ( not window_should_close() ) { - let player_updated = false; + init_window "zwl client : raylib" screen_width screen_height; + set_target_fps 60; - if (is_key_down(KEY_RIGHT)) { - me.pos.x = me.pos.x + 0.2; - player_updated = true; + /* Main game loop */ + while ( not window_should_close ) { + + if (is_key_down :KEY_RIGHT) { + set me.pos.x to {add me.pos.x 0.2}; + set :player_updated true; } - if (is_key_down(KEY_LEFT)) { - me.pos.x = me.pos.x - 0.2; - player_updated = true; + if (is_key_down :KEY_LEFT) { + set me.pos.x to {sub me.pos.x 0.2}; + set :player_updated true; } - if (is_key_down(KEY_DOWN)) { - me.pos.z = me.pos.z + 0.2; - player_updated = true; + if (is_key_down :KEY_DOWN) { + set me.pos.z to {add me.pos.z 0.2}; + set :player_updated true; } - if (is_key_down(KEY_UP)) { - me.pos.z = me.pos.z - 0.2; - player_updated = true; + if (is_key_down :KEY_UP) { + set me.pos.z to {sub me.pos.z 0.2}; + set :player_updated true; } - sync_camera(s, me, camera); + sync_camera camera me; if (player_updated) { - players = move(s, me); - } else { - players = ping(s, me); + set :players move me; + } else { + set :players ping me; } - begin_drawing(); - clear_background(RAYWHITE); + begin_drawing; + clear_background RAYWHITE; - begin_mode_3d(camera); + begin_mode_3d camera; - (* Draw floor *) - draw_grid(30, 1.0); + /* Draw floor */ + draw_grid 30 1.0; - draw_cube(me.pos, 0.5, 0.5, 0.5, me.apperance); + draw_cube me.pos 0.5 0.5 0.5 me.apperance; - for (player in players) { - draw_cube(player.pos, 0.5, 0.5, 0.5, player.apperance); + map :player players { + draw_cube player.pos 0.5 0.5 0.5 player.apperance; } - end_mode_3d(); + end_mode_3d; - end_drawing(); - } + end_drawing; + } + /* Detect window close button or ESC key */ - logout(me); - close_window(); (* Close window and OpenGL context *) -} + set :players to logout me; + close_window; /*Close window and OpenGL context */ +}; + +main; \ No newline at end of file diff --git a/docs/project-example-v2/src/common.ztl b/docs/project-example-v2/src/common.ztl index ba64d16..1cb670f 100644 --- a/docs/project-example-v2/src/common.ztl +++ b/docs/project-example-v2/src/common.ztl @@ -1,19 +1,19 @@ -type Vec { - x: f32, - y: f32, - z: f32, -} +type :Vec { + f32 :x, + f32 :y, + f32 :z, +}; -type Color { - r: u8, - g: u8, - b: u8, -} +type :Color { + i8 :r, + i8 :g, + i8 :b, +}; -type Player { - username: str, - pos: Vec, - color: Color, -} +type :Player { + str :username, + Vec :pos, + Color :color, +}; -const purple = Color{255, 255, 0}; +Color :purple {255 255 0}; diff --git a/docs/project-example-v2/src/server.ztl b/docs/project-example-v2/src/server.ztl index c8e4db6..6e6f755 100644 --- a/docs/project-example-v2/src/server.ztl +++ b/docs/project-example-v2/src/server.ztl @@ -1,8 +1,11 @@ use "common.ztl" -fn main(argc: i32, argv: []str): i32 { - let s = tunnel(); - s.host("0.0.0.0:25565", +fn :main(i32, []str -> i32) { + set :argc to pop; + set :argv to pop; + + set s to tunnel "0.0.0.0:25565"; + s.host ( version, auth, error, @@ -15,45 +18,46 @@ fn main(argc: i32, argv: []str): i32 { write, clunk, remove, - stat); + stat, + ); } -fn version(m : 9pmsg) { +fn :version(9pmsg) { } -fn auth(m : 9pmsg) { +fn :auth(9pmsg) { } -fn error(m : 9pmsg) { +fn :error(9pmsg) { } -fn flush(m : 9pmsg) { +fn :flush(9pmsg) { } -fn attach(m : 9pmsg) { +fn :attach(9pmsg) { } -fn walk(m : 9pmsg) { +fn :walk(9pmsg) { } -fn open(m : 9pmsg) { +fn :open(9pmsg) { } -fn create(m : 9pmsg) { +fn :create(9pmsg) { } -fn read(m : 9pmsg) { +fn :read(9pmsg) { } -fn write(m : 9pmsg) { +fn :write(9pmsg) { } -fn clunk(m : 9pmsg) { +fn :clunk(9pmsg) { } -fn remove(m : 9pmsg) { +fn :remove(9pmsg) { } -fn stat(m : 9pmsg) { +fn :stat(9pmsg) { } \ No newline at end of file