Added spooky dark souls enemies
Added potential fix for items spawning near doorways (and enemies potentially using them)
This commit is contained in:
parent
882c4a0c3e
commit
37e3d6e9b1
8 changed files with 116 additions and 5 deletions
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue