BITFALL/Assets/Plugins/FImpossible Creations/Plugins - Level Design/PGG/Mod Graph/Mod Spawns/MR_ApplyPrefabToSpawn.cs

49 lines
1.9 KiB
C#
Raw Normal View History

2023-11-30 00:23:23 +08:00
using FIMSpace.Generating.Planning.PlannerNodes;
using FIMSpace.Graph;
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
using FIMSpace.Generating.Rules;
namespace FIMSpace.Generating.Planning.ModNodes.Operations
{
public class MR_ApplyPrefabToSpawn : PlannerRuleBase
{
public override string GetDisplayName(float maxWidth = 120) { return wasCreated ? ("Apply Prefab") : "Apply Prefab To Spawn Data"; }
public override string GetNodeTooltipDescription { get { return "Setting different prefab to be spawned by the spawn data"; } }
public override Color GetNodeColor() { return new Color(0.7f, 0.55f, 0.25f, 0.9f); }
public override bool IsFoldable { get { return false; } }
public override Vector2 NodeSize { get { return new Vector2(184, _EditorFoldout ? 144 : 104); } }
public override bool DrawInputConnector { get { return true; } }
public override bool DrawOutputConnector { get { return true; } }
public override EPlannerNodeType NodeType { get { return EPlannerNodeType.WholeFieldPlacement; } }
[Port(EPortPinType.Input, 1)] public PGGSpawnPort TargetSpawn;
[Port(EPortPinType.Input, 1)] public PGGUniversalPort Prefab;
public override void Execute(PlanGenerationPrint print, PlannerResult newResult)
{
TargetSpawn.TriggerReadPort(true);
var spawn = TargetSpawn.GetFirstConnectedSpawn;
if (TargetSpawn.IsConnected == false) spawn = MG_Spawn;
if (FGenerators.IsNull(spawn)) { return; }
GameObject prefab = null;
Prefab.TriggerReadPort(true);
object val = Prefab.GetPortValueSafe;
if (val == null) { return; }
prefab = val as GameObject;
if (prefab == null) { return; }
spawn.Prefab = prefab;
spawn.TryDetectMeshInPrefab();
}
}
}