Files
XCEngine/managed/GameScripts/PhysicsApiProbe.cs

73 lines
2.8 KiB
C#

using XCEngine;
namespace Gameplay
{
public sealed class PhysicsApiProbe : MonoBehaviour
{
public bool InitialHasRigidbody;
public bool AddedRigidbody;
public bool HasRigidbodyAfterAdd;
public bool RigidbodyLookupSucceeded;
public int ObservedBodyType;
public float ObservedMass;
public float ObservedLinearDamping;
public float ObservedAngularDamping;
public bool ObservedUseGravity;
public bool ObservedEnableCCD;
public Vector3 ObservedLinearVelocity;
public Vector3 ObservedAngularVelocity;
public bool RaycastHitDetected;
public string RaycastHitName = string.Empty;
public float RaycastHitDistance;
public bool RaycastHitWasTrigger;
public Vector3 RaycastHitPoint;
public Vector3 RaycastHitNormal;
public void Start()
{
InitialHasRigidbody = HasComponent<Rigidbody>();
AddedRigidbody = AddComponent<Rigidbody>() != null;
HasRigidbodyAfterAdd = HasComponent<Rigidbody>();
RigidbodyLookupSucceeded = TryGetComponent(out Rigidbody rigidbody);
if (rigidbody != null)
{
rigidbody.bodyType = PhysicsBodyType.Dynamic;
rigidbody.mass = 2.5f;
rigidbody.linearDamping = 0.25f;
rigidbody.angularDamping = 0.5f;
rigidbody.useGravity = false;
rigidbody.enableCCD = true;
rigidbody.linearVelocity = new Vector3(0.0f, 0.0f, 0.0f);
rigidbody.angularVelocity = new Vector3(0.0f, 1.0f, 0.0f);
ObservedBodyType = (int)rigidbody.bodyType;
ObservedMass = rigidbody.mass;
ObservedLinearDamping = rigidbody.linearDamping;
ObservedAngularDamping = rigidbody.angularDamping;
ObservedUseGravity = rigidbody.useGravity;
ObservedEnableCCD = rigidbody.enableCCD;
ObservedLinearVelocity = rigidbody.linearVelocity;
ObservedAngularVelocity = rigidbody.angularVelocity;
rigidbody.AddForce(new Vector3(10.0f, 0.0f, 0.0f), ForceMode.Impulse);
}
RaycastHitDetected = Physics.Raycast(
new Vector3(0.0f, 3.0f, 0.0f),
new Vector3(0.0f, 0.0f, -1.0f),
out RaycastHit hit,
10.0f);
if (RaycastHitDetected)
{
RaycastHitName = hit.gameObject != null ? hit.gameObject.name : string.Empty;
RaycastHitDistance = hit.distance;
RaycastHitWasTrigger = hit.isTrigger;
RaycastHitPoint = hit.point;
RaycastHitNormal = hit.normal;
}
}
}
}