BITFALL/Assets/GSpawn - Level Designer/Scripts/Level Design/Object Spawn/PhysicsSimulationObjectMono.cs

74 lines
2.5 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
namespace GSpawn
{
[ExecuteInEditMode]
public class PhysicsSimulationObjectMono : MonoBehaviour
{
public bool is2DObject;
public bool hasRigidBody;
public bool isKinematic;
public Rigidbody2D rigidBody2D;
public Rigidbody rigidBody3D;
public Collider2D addedCollider2D;
public Collider addedCollider3D;
public Vector3 velocity { get { return is2DObject ? rigidBody2D.velocity : rigidBody3D.velocity; } }
public void onExitSimulation()
{
if (is2DObject)
{
if (addedCollider2D != null) Collider2D.DestroyImmediate(addedCollider2D);
if (!hasRigidBody) Rigidbody2D.DestroyImmediate(rigidBody2D);
else rigidBody2D.isKinematic = isKinematic;
}
else
{
if (addedCollider3D != null) Collider.DestroyImmediate(addedCollider3D);
if (!hasRigidBody) Rigidbody.DestroyImmediate(rigidBody3D);
else rigidBody3D.isKinematic = isKinematic;
}
}
public void onEnterSimulation()
{
is2DObject = gameObject.hierarchyHasSprite(false, false);
if (is2DObject)
{
rigidBody2D = gameObject.getRigidBody2D();
hasRigidBody = rigidBody2D != null;
isKinematic = rigidBody2D != null ? rigidBody2D.isKinematic : false;
if (rigidBody2D == null)
{
rigidBody2D = UndoEx.addComponent<Rigidbody2D>(gameObject);
rigidBody2D.isKinematic = false;
}
if (gameObject.getCollider2D() == null) addedCollider2D = UndoEx.addComponent<BoxCollider2D>(gameObject);
}
else
{
rigidBody3D = gameObject.getRigidBody();
hasRigidBody = rigidBody3D != null;
isKinematic = rigidBody3D != null ? rigidBody3D.isKinematic : false;
if (rigidBody3D == null)
{
rigidBody3D = UndoEx.addComponent<Rigidbody>(gameObject);
rigidBody3D.isKinematic = false;
}
if (gameObject.getCollider() == null) addedCollider3D = UndoEx.addComponent<BoxCollider>(gameObject);
}
}
}
}
#endif