warpack_core/lua/
mod.rs

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}