using System.Collections.Generic; using OWML.Common; using QSB.Utility; using UnityEngine; namespace QSB.BodyCustomization; public class BodyCustomizer : MonoBehaviour, IAddComponentOnStart { private Dictionary skinMap = new(); private Dictionary jetpackMap = new(); public AssetBundle SkinsBundle { get; private set; } public static BodyCustomizer Instance { get; private set; } private void Start() { Instance = this; } public void OnBundleLoaded(AssetBundle bundle) { DebugLog.DebugWrite($"OnBundleLoaded", MessageType.Info); SkinsBundle = bundle; LoadAssets(); } private void LoadAssets() { DebugLog.DebugWrite($"Loading skin assets...", MessageType.Info); skinMap.Add("Default", LoadSkin("Type 0")); skinMap.Add("Type 1", LoadSkin("Type 1")); skinMap.Add("Type 2", LoadSkin("Type 2")); skinMap.Add("Type 3", LoadSkin("Type 3")); skinMap.Add("Type 4", LoadSkin("Type 4")); skinMap.Add("Type 5", LoadSkin("Type 5")); skinMap.Add("Type 6", LoadSkin("Type 6")); skinMap.Add("Type 7", LoadSkin("Type 7")); skinMap.Add("Type 8", LoadSkin("Type 8")); skinMap.Add("Type 9", LoadSkin("Type 9")); skinMap.Add("Type 10", LoadSkin("Type 10")); skinMap.Add("Type 11", LoadSkin("Type 11")); skinMap.Add("Type 12", LoadSkin("Type 12")); skinMap.Add("Type 13", LoadSkin("Type 13")); skinMap.Add("Type 14", LoadSkin("Type 14")); skinMap.Add("Type 15", LoadSkin("Type 15")); skinMap.Add("Type 16", LoadSkin("Type 16")); skinMap.Add("Type 17", LoadSkin("Type 17")); jetpackMap.Add("Orange", LoadJetpack("default")); jetpackMap.Add("Yellow", LoadJetpack("yellow")); jetpackMap.Add("Red", LoadJetpack("red")); jetpackMap.Add("Pink", LoadJetpack("pink")); jetpackMap.Add("Purple", LoadJetpack("purple")); jetpackMap.Add("Dark Blue", LoadJetpack("darkblue")); jetpackMap.Add("Light Blue", LoadJetpack("lightblue")); jetpackMap.Add("Cyan", LoadJetpack("cyan")); jetpackMap.Add("Green", LoadJetpack("green")); } private (Texture2D d, Texture2D n) LoadSkin(string skinName) { DebugLog.DebugWrite($"LoadSkin {skinName}", MessageType.Info); var number = skinName.Replace($"Type ", ""); return (SkinsBundle.LoadAsset($"Assets/GameAssets/Texture2D/Skin Variations/{number}d.png"), SkinsBundle.LoadAsset($"Assets/GameAssets/Texture2D/Skin Variations/{number}n.png")); } private Texture2D LoadJetpack(string jetpackName) { DebugLog.DebugWrite($"LoadJetpack {jetpackName}", MessageType.Info); return SkinsBundle.LoadAsset($"Assets/GameAssets/Texture2D/Jetpack Variations/{jetpackName}.png"); } public void CustomizeRemoteBody(GameObject REMOTE_Traveller_HEA_Player_v2, GameObject fakeHead, string skinType, string jetpackType) { DebugLog.DebugWrite($"CustomizeRemoteBody skin:{skinType} jetpack:{jetpackType}", MessageType.Info); var headMesh = REMOTE_Traveller_HEA_Player_v2.transform.Find("player_mesh_noSuit:Traveller_HEA_Player/player_mesh_noSuit:Player_Head"); var skinMaterial = headMesh.GetComponent().material; skinMaterial.SetTexture("_MainTex", skinMap[skinType].albedo); skinMaterial.SetTexture("_BumpMap", skinMap[skinType].normal); var fakeHeadMaterial = fakeHead.GetComponent().material; fakeHeadMaterial.SetTexture("_MainTex", skinMap[skinType].albedo); fakeHeadMaterial.SetTexture("_BumpMap", skinMap[skinType].normal); var jetpackMesh = REMOTE_Traveller_HEA_Player_v2.transform.Find("Traveller_Mesh_v01:Traveller_Geo/Traveller_Mesh_v01:Props_HEA_Jetpack"); var jetpackMaterial = jetpackMesh.GetComponent().material; jetpackMaterial.SetTexture("_MainTex", jetpackMap[jetpackType]); } }