59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using BITKit;
|
|
using UnityEngine;
|
|
using UnityEngine.Animations;
|
|
|
|
namespace BITFALL.Props
|
|
{
|
|
public class Prop_ReplaceOnSleep : MonoBehaviour
|
|
{
|
|
[SerializeField] private Transform prefab;
|
|
[SerializeField] private new Rigidbody rigidbody;
|
|
private readonly IntervalUpdate _interval = new(0.16f);
|
|
private Collider _collider;
|
|
private void FixedUpdate()
|
|
{
|
|
if (rigidbody.IsSleeping() && _interval.AllowUpdate)
|
|
{
|
|
ReplaceImmediate(_collider.transform);
|
|
}
|
|
}
|
|
|
|
public void ReplaceImmediate(Transform root=null)
|
|
{
|
|
var _transform = transform;
|
|
var instance = Instantiate(prefab);
|
|
instance.SetPositionAndRotation(_transform.position, _transform.rotation);
|
|
|
|
instance.TryGetComponent<Rigidbody>(out var _rigidbody);
|
|
if (root is not null && root.gameObject.isStatic is false)
|
|
{
|
|
instance.SetParentConstraint(root);
|
|
if (_rigidbody is not null)
|
|
{
|
|
//_rigidbody.isKinematic = true;
|
|
_rigidbody.isKinematic = true;
|
|
}
|
|
}
|
|
else if(_rigidbody is not null)
|
|
{
|
|
_rigidbody.velocity = rigidbody.velocity;
|
|
_rigidbody.angularVelocity = rigidbody.angularVelocity;
|
|
}
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
private void OnCollisionEnter(Collision other)
|
|
{
|
|
_collider = other.collider;
|
|
}
|
|
|
|
private void OnCollisionStay(Collision other)
|
|
{
|
|
_collider = other.collider;
|
|
}
|
|
}
|
|
}
|