Files
BITFALL/Assets/Plugins/FImpossible Creations/Plugins - Level Design/PGG/Rules Logics/Modelling/SR_RandomMesh.cs
CortexCore ba342d6627 1
2023-11-30 00:23:23 +08:00

65 lines
2.4 KiB
C#

#if UNITY_EDITOR
using UnityEditor;
using FIMSpace.FEditor;
#endif
using UnityEngine;
using System.Collections.Generic;
namespace FIMSpace.Generating.Rules.Modelling
{
public class SR_RandomMesh : SpawnRuleBase, ISpawnProcedureType
{
public override string TitleName() { return "Spawn Random Mesh Renderer"; }
public override string Tooltip() { return "Generating object with Mesh Renderer with mesh choosed from provided list. (thanks to this node you don't need to create prefab with single mesh renderer!)"; }
public EProcedureType Type { get { return EProcedureType.Event; } }
private GameObject preparedScheme = null;
[FPD_Layers] public int TargetLayer = 0;
public bool Static = false;
public Material DefaultMaterial;
[Space(5)]
public List<Mesh> RandomMeshes = new List<Mesh>();
public override void PreGenerateResetRule(FGenGraph<FieldCell, FGenPoint> grid, FieldSetup preset, FieldSpawner callFrom)
{
if (RandomMeshes.Count == 0) return;
if (callFrom.TemporaryPrefabOverride != null)
{
return;
}
if (preparedScheme) { FGenerators.DestroyObject(preparedScheme); }
string name = "";
if (OwnerSpawner != null) name = OwnerSpawner.Name + "-RandomMesh";
else name = "RandomMesh";
preparedScheme = new GameObject(name);
preparedScheme.layer = TargetLayer;
preparedScheme.isStatic = Static;
preparedScheme.AddComponent<MeshFilter>();
preparedScheme.AddComponent<MeshRenderer>().sharedMaterial = DefaultMaterial;
preparedScheme.transform.position = new Vector3(10000, -10000, 10000);
preparedScheme.hideFlags = HideFlags.HideAndDontSave;
callFrom.SetTemporaryPrefabToSpawn(preparedScheme);
}
public override void CellInfluence(FieldSetup preset, FieldModification mod, FieldCell cell, ref SpawnData spawn, FGenGraph<FieldCell, FGenPoint> grid, Vector3? restrictDirection = null)
{
if (RandomMeshes.Count == 0) return;
Mesh randMesh = RandomMeshes[FGenerators.GetRandom(0, RandomMeshes.Count)];
spawn.OnGeneratedEvents.Add(o =>
{
o.GetComponent<MeshFilter>().sharedMesh = randMesh;
});
}
}
}