59 lines
1.6 KiB
C#
59 lines
1.6 KiB
C#
using UnityEngine;
|
|
using Unity.Profiling;
|
|
using System;
|
|
using System.Collections;
|
|
|
|
namespace Obi{
|
|
|
|
/**
|
|
* Small helper class that lets you specify Obi-only properties for rigidbodies.
|
|
*/
|
|
|
|
[ExecuteInEditMode]
|
|
public abstract class ObiRigidbodyBase : MonoBehaviour
|
|
{
|
|
|
|
public bool kinematicForParticles = false;
|
|
|
|
protected ObiRigidbodyHandle rigidbodyHandle;
|
|
public ObiRigidbodyHandle Handle
|
|
{
|
|
get
|
|
{
|
|
// don't check rigidbodyHandle.isValid:
|
|
// CreateRigidbody may defer creation, so we get a non-null, but invalid handle.
|
|
// If calling handle again right away before it becomes valid, it will call CreateRigidbody() again and create a second handle to the same body.
|
|
if (rigidbodyHandle == null)
|
|
{
|
|
var world = ObiColliderWorld.GetInstance();
|
|
|
|
// create the material:
|
|
rigidbodyHandle = world.CreateRigidbody();
|
|
rigidbodyHandle.owner = this;
|
|
}
|
|
return rigidbodyHandle;
|
|
}
|
|
}
|
|
|
|
protected virtual void OnEnable()
|
|
{
|
|
rigidbodyHandle = ObiColliderWorld.GetInstance().CreateRigidbody();
|
|
rigidbodyHandle.owner = this;
|
|
}
|
|
|
|
public void OnDisable()
|
|
{
|
|
ObiColliderWorld.GetInstance().DestroyRigidbody(rigidbodyHandle);
|
|
}
|
|
|
|
public abstract void UpdateIfNeeded(float stepTime);
|
|
|
|
/**
|
|
* Reads velocities back from the solver.
|
|
*/
|
|
public abstract void UpdateVelocities(Vector3 linearDelta, Vector3 angularDelta);
|
|
|
|
}
|
|
}
|
|
|