Added spooky dark souls enemies

Added potential fix for items spawning near doorways (and enemies potentially using them)
This commit is contained in:
LadyAliceMargatroid 2024-05-06 02:13:04 -07:00
parent 882c4a0c3e
commit 37e3d6e9b1
8 changed files with 116 additions and 5 deletions

View file

@ -6,6 +6,9 @@ using System.Threading.Tasks;
using UnityEngine;
using DunGen;
using ScarletMansion.DunGenPatch.Doorways;
using Unity.AI.Navigation;
using UnityEngine.AI;
using DunGen.Adapters;
namespace ScarletMansion.GamePatch.Managers {
public class DoorwayManager : MonoBehaviour {
@ -20,6 +23,39 @@ namespace ScarletMansion.GamePatch.Managers {
doorwayCleanup = new List<DoorwayCleanup>();
}
/*
private NavMeshSurface surface;
private GameObject meshGameObject;
private MeshFilter meshFilter;
void Update(){
if (surface == null){
surface = FindObjectOfType<NavMeshSurface>();
}
if (surface != null){
if (meshFilter == null){
meshGameObject = new GameObject("Nav Mesh V");
meshFilter = meshGameObject.AddComponent<MeshFilter>();
var renderer = meshGameObject.AddComponent<MeshRenderer>();
renderer.materials = new Material[1];
renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
}
var mesh = new Mesh();
var triangulation = NavMesh.CalculateTriangulation();
mesh.SetVertices(triangulation.vertices);
mesh.SetIndices(triangulation.indices, MeshTopology.Triangles, 0);
meshGameObject.transform.position = new Vector3(0f, 0.05f, 0f);
meshFilter.mesh = mesh;
}
}
*/
public void AddDoorwayCleanup(DoorwayCleanup dw){
doorwayCleanup.Add(dw);
}
@ -28,8 +64,20 @@ namespace ScarletMansion.GamePatch.Managers {
if (Instance && DunGenPatch.Patch.active) {
var doorwayCleanups = Instance.doorwayCleanup;
foreach(var d in doorwayCleanups){
d.SetBlockers(false);
d.Cleanup();
}
try{
var dungeonGen = RoundManager.Instance.dungeonGenerator;
var navmesh = dungeonGen.transform.parent.GetComponentInChildren<UnityNavMeshAdapter>();
navmesh.Run(dungeonGen.Generator);
Plugin.logger.LogInfo("Rebuild nav mesh");
} catch (Exception e){
Plugin.logger.LogError("Failed to rebuild nav mesh");
Plugin.logger.LogError(e.ToString());
}
}
}

View file

@ -9,6 +9,7 @@ using Unity.Netcode;
using GameNetcodeStuff;
using ScarletMansion.GamePatch.Items;
using ScarletMansion.GamePatch;
using ScarletMansion.GamePatch.Components;
namespace ScarletMansion {
@ -261,6 +262,45 @@ namespace ScarletMansion {
}
}
public void RequestEvilSkinApply(NetworkObjectReference reference, string enemyName) {
if (PluginConfig.Instance.paintingEnemyEvilSkinValue && ScarletBedroom.ENEMY_EVIL_LIST.Contains(enemyName)) {
RequestEvilSkinApplyClientRpc(reference);
}
}
[ClientRpc]
public void RequestEvilSkinApplyClientRpc(NetworkObjectReference reference){
void ApplyMaterialToRenderers<T>(T[] renderers) where T: Renderer{
foreach(var render in renderers) {
var mats = render.materials;
for(var i = 0; i < mats.Length; i++) {
var material = new Material(Assets.networkObjectList.ghostMaterial);
material.mainTexture = mats[i].mainTexture;
mats[i] = material;
}
render.materials = mats;
}
}
if (reference.TryGet(out var obj)){
var enemy = obj.GetComponentInParent<EnemyAI>();
if (enemy == null) return;
var enemyName = enemy.name;
try {
Plugin.logger.LogInfo($"Applying evil material to {enemyName}");
ApplyMaterialToRenderers(enemy.GetComponentsInChildren<SkinnedMeshRenderer>());
ApplyMaterialToRenderers(enemy.GetComponentsInChildren<MeshRenderer>());
} catch (Exception e){
Plugin.logger.LogWarning($"Failed to apply evil material to {enemyName}");
Plugin.logger.LogWarning(e.ToString());
}
}
}
}
public static class ScarletNetworkManagerUtility {