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