1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
use crate::prelude::*;
use crate::Project;
use std::convert::TryFrom;
use std::ffi::OsStr;
pub struct UAT {
}
impl UAT {
fn find_project() -> Result<Project> {
let current_dir = std::env::current_dir()?;
let project = current_dir
.read_dir()?
.filter_map(|entry| entry.ok())
.find(|entry| entry.path().extension() == Some(&OsStr::new("uproject")))
.ok_or_else(|| Error::Message("Failed to find *.uproject".into()))?;
Project::try_from(project.path())
}
fn ue4editor_cmd(project: &Project) -> String {
format!("C:/Program Files/Epic Games/UE_{}/Engine/Binaries/Win64/UE4Editor-Cmd.exe", project.engine_association)
}
fn uat(project: &Project) -> String {
format!("C:/Program Files/Epic Games/UE_{}/Engine/Build/BatchFiles/RunUAT.bat", project.engine_association)
}
pub fn editor() -> Result<()> {
let project = Self::find_project()?;
std::process::Command::new(Self::ue4editor_cmd(&project))
.arg(project.path)
.status()?;
Ok(())
}
pub fn build() -> Result<()> {
let project = Self::find_project()?;
std::process::Command::new(Self::uat(&project))
.arg("BuildCookRun")
.arg(format!("-project=\"{}\"", project.path.display()))
.arg("-noP4")
.arg("-platform=Win64")
.arg("-clientconfig=Development")
.arg("-serverconfig=Development")
.arg("-cook")
.arg("-allmaps")
.arg("-build")
.arg("-stage")
.arg("-pak")
.arg("-archive")
.arg("-archivedirectory=\"output\"")
.status()?;
Ok(())
}
pub fn cook() -> Result<()> {
Ok(())
}
pub fn run() -> Result<()> {
Ok(())
}
}