using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using UnityEngine.ProBuilder;
namespace UnityEditor.ProBuilder
{
static class EntityUtility
{
const StaticEditorFlags StaticEditorFlags_All =
#if UNITY_2019_2_OR_NEWER
StaticEditorFlags.ContributeGI |
#else
StaticEditorFlags.LightmapStatic |
#endif
StaticEditorFlags.OccluderStatic |
StaticEditorFlags.BatchingStatic |
StaticEditorFlags.OccludeeStatic |
StaticEditorFlags.NavigationStatic |
StaticEditorFlags.OffMeshLinkGeneration |
StaticEditorFlags.ReflectionProbeStatic;
///
/// Sets the EntityType for the passed gameObject.
///
/// The type to set.
/// The gameObject to apply the EntityType to. Must contains pb_Object and pb_Entity components. Method does contain null checks.
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
public static void SetEntityType(EntityType newEntityType, GameObject target)
{
Entity ent = target.GetComponent();
if (ent == null)
ent = target.AddComponent();
ProBuilderMesh pb = target.GetComponent();
if (!ent || !pb)
return;
SetEditorFlags(StaticEditorFlags_All, target);
switch (newEntityType)
{
case EntityType.Detail:
case EntityType.Occluder:
SetBrush(target);
break;
case EntityType.Trigger:
SetTrigger(target);
break;
case EntityType.Collider:
SetCollider(target);
break;
case EntityType.Mover:
SetDynamic(target);
break;
}
ent.SetEntity(newEntityType);
}
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
static void SetBrush(GameObject target)
{
EntityType et = target.GetComponent().entityType;
if (et == EntityType.Trigger ||
et == EntityType.Collider)
{
ProBuilderMesh pb = target.GetComponent();
foreach (var face in pb.facesInternal)
face.material = BuiltinMaterials.defaultMaterial;
pb.ToMesh();
pb.Refresh();
}
}
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
static void SetDynamic(GameObject target)
{
EntityType et = target.GetComponent().entityType;
SetEditorFlags((StaticEditorFlags)0, target);
if (et == EntityType.Trigger ||
et == EntityType.Collider)
{
ProBuilderMesh pb = target.GetComponent();
foreach (var face in pb.facesInternal)
face.material = BuiltinMaterials.defaultMaterial;
pb.ToMesh();
pb.Refresh();
}
}
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
static void SetTrigger(GameObject target)
{
ProBuilderMesh pb = target.GetComponent();
foreach (var face in pb.facesInternal)
face.material = BuiltinMaterials.triggerMaterial;
SetIsTrigger(true, target);
SetEditorFlags((StaticEditorFlags)0, target);
pb.ToMesh();
pb.Refresh();
}
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
static void SetCollider(GameObject target)
{
ProBuilderMesh pb = target.GetComponent();
foreach (var face in pb.facesInternal)
face.material = BuiltinMaterials.colliderMaterial;
pb.ToMesh();
pb.Refresh();
SetEditorFlags((StaticEditorFlags)(StaticEditorFlags.NavigationStatic | StaticEditorFlags.OffMeshLinkGeneration),
target);
}
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
static void SetEditorFlags(StaticEditorFlags editorFlags, GameObject target)
{
GameObjectUtility.SetStaticEditorFlags(target, editorFlags);
}
[Obsolete("pb_Entity is deprecated. Manage static flags manually or use Set Trigger/Set Collider actions.")]
static void SetIsTrigger(bool val, GameObject target)
{
Collider[] colliders = InternalUtility.GetComponents(target);
foreach (Collider col in colliders)
{
if (val && col is MeshCollider)
((MeshCollider)col).convex = true;
col.isTrigger = val;
}
}
}
}