Skip to content

Commit

Permalink
fix: improved KitbashManager errors
Browse files Browse the repository at this point in the history
  • Loading branch information
MSchmoecker committed Aug 27, 2023
1 parent 8d4de1d commit 85240d1
Showing 1 changed file with 28 additions and 20 deletions.
48 changes: 28 additions & 20 deletions JotunnLib/Managers/KitbashManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,12 @@ private void ApplyKitbashes()
{
kitbashObject.Prefab.FixReferences();
}

ApplyKitbash(kitbashObject);

Logger.LogDebug($"Kitbash for {kitbashObject} applied");
}
catch (Exception e)
{
Logger.LogError(e);
Logger.LogError(kitbashObject.SourceMod, e);
}
}

Expand All @@ -100,7 +99,7 @@ private bool ApplyKitbash(KitbashObject kitbashObject)
{
foreach (KitbashSourceConfig config in kitbashObject.Config.KitbashSources)
{
if (!Instance.Kitbash(kitbashObject.Prefab, config))
if (!Instance.Kitbash(kitbashObject, config))
{
return false;
}
Expand All @@ -117,58 +116,67 @@ private bool ApplyKitbash(KitbashObject kitbashObject)
return true;
}

private bool Kitbash(GameObject kitbashedPrefab, KitbashSourceConfig config)
private bool Kitbash(KitbashObject kitbashObject, KitbashSourceConfig config)
{
// Try to load a custom prefab
GameObject sourcePrefab = PrefabManager.Instance.GetPrefab(config.SourcePrefab);

// If no prefab is found, warn and return
if (!sourcePrefab)
{
Logger.LogWarning($"No prefab found for {config}");
Logger.LogWarning(kitbashObject.SourceMod, $"No prefab found for {config}");
return false;
}
GameObject sourceGameObject = sourcePrefab.transform.Find(config.SourcePath).gameObject;

Transform parentTransform = config.TargetParentPath != null ? kitbashedPrefab.transform.Find(config.TargetParentPath) : kitbashedPrefab.transform;
if (parentTransform == null)
Transform sourceTransform = sourcePrefab.transform.Find(config.SourcePath);

if (!sourceTransform)
{
Logger.LogWarning($"Target parent not found for {config}");
Logger.LogWarning(kitbashObject.SourceMod, $"Source path not found for {config}");
return false;
}
GameObject kitbashObject = Object.Instantiate(sourceGameObject, parentTransform);

kitbashObject.name = config.Name ?? sourceGameObject.name;
kitbashObject.transform.localPosition = config.Position;
kitbashObject.transform.localRotation = config.Rotation;
kitbashObject.transform.localScale = config.Scale;
GameObject kitbashPrefab = kitbashObject.Prefab;
Transform parentTransform = config.TargetParentPath != null ? kitbashPrefab.transform.Find(config.TargetParentPath) : kitbashPrefab.transform;

if (!parentTransform)
{
Logger.LogWarning(kitbashObject.SourceMod, $"Target parent not found for {config}");
return false;
}

GameObject sourceGameObject = sourceTransform.gameObject;
GameObject kitbashedObject = Object.Instantiate(sourceGameObject, parentTransform);
kitbashedObject.name = config.Name ?? sourceGameObject.name;
kitbashedObject.transform.localPosition = config.Position;
kitbashedObject.transform.localRotation = config.Rotation;
kitbashedObject.transform.localScale = config.Scale;

if (config.Materials != null)
{
Material[] sourceMaterials = GetSourceMaterials(config);

if (sourceMaterials == null)
{
Logger.LogWarning($"No materials found for {config}");
Logger.LogWarning(kitbashObject.SourceMod, $"No materials found for {config}");
return false;
}

SkinnedMeshRenderer[] targetSkinnedMeshRenderers = kitbashObject.GetComponentsInChildren<SkinnedMeshRenderer>();
SkinnedMeshRenderer[] targetSkinnedMeshRenderers = kitbashedObject.GetComponentsInChildren<SkinnedMeshRenderer>();

foreach (SkinnedMeshRenderer targetSkinnedMeshRenderer in targetSkinnedMeshRenderers)
{
targetSkinnedMeshRenderer.sharedMaterials = sourceMaterials;
targetSkinnedMeshRenderer.materials = sourceMaterials;
}

MeshRenderer[] targetMeshRenderers = kitbashObject.GetComponentsInChildren<MeshRenderer>();
MeshRenderer[] targetMeshRenderers = kitbashedObject.GetComponentsInChildren<MeshRenderer>();
foreach (MeshRenderer targetMeshRenderer in targetMeshRenderers)
{
targetMeshRenderer.sharedMaterials = sourceMaterials;
targetMeshRenderer.materials = sourceMaterials;
}

}

return true;
}

Expand Down

0 comments on commit 85240d1

Please sign in to comment.