Firstborn/Assets/Editor/Mod Builder/ModBuilderScript.cs
Schaken-Mods 774d18a99d 5/18/2023 Update
made most of the game Moddable. There is an in editor tool to make the mods and set them all up, and im making an external tool that will show your mods, lets you edit any information and it will pack it up and upload it. currently working on the uploading. Next I will make the game able to download and install. - Fuck Nexus.
2023-05-18 20:28:45 -05:00

163 lines
5.9 KiB
C#

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
using UnityEngine.AddressableAssets;
public class ModBuilderScript : EditorWindow
{
private string ModName = "";
private string Author = "";
private string Description = "";
public Sprite MyImage;
private string Version = "1.0";
private string Category = "Armor";
[MenuItem("Schaken-Mods/Mod Builder/Open Window")]
private static void OpenWindow() {
ModBuilderScript window = GetWindow<ModBuilderScript>();
// Set Title
Texture2D icon = (Texture2D)AssetDatabase.LoadAssetAtPath("Assets/Editor/Mod Builder/ModBuilder.png", typeof(Texture2D));
GUIContent titleContent = new GUIContent("Mod Builder", icon);
window.titleContent = titleContent;
window.minSize = new Vector2(340, 410);
window.maxSize = new Vector2(340, 410);
window.Show();
}
private void OnGUI() {
EditorGUIUtility.labelWidth = 45;
EditorGUILayout.Space(10);
EditorGUILayout.BeginVertical("box");
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Selected Category: "+Category)) {
GenericMenu menu = new GenericMenu();
menu.AddItem(new GUIContent("Armor"), false, str => SetCategory("Armor"), "");
menu.AddItem(new GUIContent("NPC"), false, str => SetCategory("NPC"), "");
menu.AddItem(new GUIContent("Static Item"), false, str => SetCategory("Static Item"), "");
menu.AddItem(new GUIContent("Weapon"), false, str => SetCategory("Weapon"), "");
menu.AddDisabledItem(new GUIContent("Testing/SubCategory"));
menu.ShowAsContext();
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Mod Name: ", GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
ModName = GUILayout.TextField(ModName, 25, GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Version: ", GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
Version = GUILayout.TextField(Version, GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Author: ", GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
Author = GUILayout.TextField(Author, 25, GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Short Description: ", GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
Description = GUILayout.TextArea(Description, GUILayout.Height(100), GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Preview Picture: ", GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
MyImage = (Sprite)EditorGUILayout.ObjectField(MyImage, typeof(Sprite), false, GUILayout.Height(EditorGUIUtility.singleLineHeight), GUILayout.MaxWidth(160), GUILayout.MinWidth(160));
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
Sprite s = (MyImage) ? MyImage as Sprite : (Sprite)AssetDatabase.LoadAssetAtPath("Assets/Textures/UI/Background.png", typeof(Sprite));
EditorGUI.DrawTextureTransparent(new Rect(17, 225, 300, 160), s.texture);
EditorGUILayout.EndHorizontal();
EditorGUILayout.Space(165);
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("Build Mod", GUILayout.MaxWidth(320), GUILayout.MinWidth(320)))
{
Debug.Log("Button pressed: "); //UnityEngine.Addressables.BuildPath
string NewPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+@"\My Games\Firstborn\Mods\"+ModName+@"\";
// I need to make the folder here!
string ProcessingPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+@"\My Games\Firstborn\Mods\{ProcessFolder}";
//string NewPath2 = UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.kBuildPath;
//UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.kLocalBuildPathValue = NewPath;
//string NewPath3 = UnityEngine.AddressableAssets.Addressables.BuildPath;
//UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.kBuildPath = NewPath;
//Debug.Log(NewPath3);
UnityEditor.AddressableAssets.Settings.AddressableAssetSettings.BuildPlayerContent();
if (!Directory.Exists(NewPath))
Directory.CreateDirectory(NewPath);
DirectoryInfo d = new DirectoryInfo(ProcessingPath);
foreach (var file in d.GetFiles()) {
Debug.Log("File Found: "+file.Name);
if (file.Name.Contains(".json")) {
string A;
using (var sr = new StreamReader(file.FullName)) {
A = sr.ReadToEnd();
A = A.Replace("{ProcessFolder}", ModName);
}
file.Delete();
using (StreamWriter sw = File.CreateText(NewPath + "mod.json")) {
sw.WriteLine(A);
}
} else if (file.Name.Contains(".hash")) {
Directory.Move(file.FullName, NewPath + "mod.hash");
} else {
Directory.Move(file.FullName, NewPath + file.Name);
}
}
// build Info.info
using (StreamWriter sw = File.CreateText(NewPath + "Info.fc1")) {
sw.WriteLine("Author:"+Author+";");
sw.WriteLine("Description:"+Description+";");
sw.WriteLine("Version:"+Version+";");
sw.WriteLine("Created:"+DateTime.Now.ToString()+";");
sw.WriteLine("Category:"+Category+";");
}
string OrigImage = AssetDatabase.GetAssetPath(MyImage);
Debug.Log("OrigImage "+OrigImage);
File.Copy(OrigImage, NewPath+"Image.png");
}
EditorGUILayout.EndHorizontal();
EditorGUILayout.EndVertical();
}
private void SetCategory(string A) {
Category = A;
}
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}