1use rlua::prelude::*;
2use serde::{Deserialize, Serialize};
3
4use crate::WarpackRunMode;
5
6pub mod util;
7pub mod compiler;
8pub mod macros;
9pub mod fs;
10pub mod mpq;
11pub mod launcher;
12pub mod object;
13
14#[derive(Serialize, Deserialize)]
15struct ProjectLayout {
16 #[serde(rename = "mapsDirectory")]
17 maps_directory: String,
18 #[serde(rename = "srcDirectory")]
19 src_directory: String,
20 #[serde(rename = "libDirectory")]
21 lib_directory: String,
22 #[serde(rename = "targetDirectory")]
23 target_directory: String,
24}
25
26pub fn setup_ceres_environ(ctx: LuaContext, run_mode: WarpackRunMode, script_args: Vec<String>) {
27 const CERES_BUILDSCRIPT_LIB: &str = include_str!("../resource/buildscript_lib.lua");
28
29 let globals = ctx.globals();
30
31 let ceres_table = ctx.create_table().unwrap();
32
33 ceres_table
34 .set("registerMacro", macros::get_register_luafn(ctx))
35 .unwrap();
36 ceres_table
37 .set("compileScript", compiler::get_compile_script_luafn(ctx))
38 .unwrap();
39
40 ceres_table
41 .set(
42 "runMode",
43 ctx.create_function(move |ctx, _: ()| match run_mode {
44 WarpackRunMode::RunMap => Ok(ctx.create_string("run")),
45 WarpackRunMode::Build => Ok(ctx.create_string("build")),
46 WarpackRunMode::LiveReload => Ok(ctx.create_string("reload")),
47 })
48 .unwrap(),
49 )
50 .unwrap();
51
52 ceres_table
53 .set(
54 "getScriptArgs",
55 ctx.create_function(move |_, _: ()| Ok(script_args.clone()))
56 .unwrap(),
57 )
58 .unwrap();
59
60 ceres_table
61 .set("runWarcraft", launcher::get_runmap_luafn(ctx))
62 .unwrap();
63
64 let fs_table = fs::get_fs_module(ctx);
65 let mpq_table = mpq::get_mpq_module(ctx);
66 let object_table = object::get_object_module(ctx);
67
68 globals.set("fs", fs_table).unwrap();
69 globals.set("mpq", mpq_table).unwrap();
70 globals.set("objdata", object_table).unwrap();
71 globals.set("warpack", ceres_table).unwrap();
72
73 ctx.load(CERES_BUILDSCRIPT_LIB)
74 .set_name("buildscript_lib.lua")
75 .unwrap()
76 .exec()
77 .unwrap();
78}