mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-12 00:40:08 +00:00
Disable collisions on teleport / spawn
This commit is contained in:
parent
084767d1dd
commit
c777943664
@ -31,7 +31,7 @@ namespace QSB.TransformSync
|
||||
var body = Instantiate(GetPlayerModel());
|
||||
GetComponent<AnimationSync>().InitRemote(body);
|
||||
|
||||
var physicsBody = new GameObject();
|
||||
var physicsBody = new GameObject("PlayerBodySync");
|
||||
|
||||
var collider = physicsBody.AddComponent<CapsuleCollider>();
|
||||
collider.radius = 1;
|
||||
@ -40,6 +40,7 @@ namespace QSB.TransformSync
|
||||
|
||||
var rigidBodySync = physicsBody.AddComponent<RigidbodySync>();
|
||||
rigidBodySync.target = body;
|
||||
rigidBodySync.localColliderType = typeof(PlayerBody);
|
||||
|
||||
//var capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule).transform;
|
||||
//capsule.parent = rigidBodySync.transform;
|
||||
|
@ -9,22 +9,27 @@ namespace QSB.TransformSync
|
||||
class RigidbodySync : MonoBehaviour
|
||||
{
|
||||
public Transform target;
|
||||
public Type localColliderType;
|
||||
private Rigidbody _rigidbody;
|
||||
private Collider _collider;
|
||||
private Vector3 _prevPosition;
|
||||
private const float _collisionDisableMovementThreshold = 250;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
_collider = GetComponent<Collider>();
|
||||
_collider.isTrigger = true;
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
gameObject.AddComponent<OWRigidbody>();
|
||||
_rigidbody = gameObject.GetComponent<Rigidbody>();
|
||||
if (_rigidbody == null)
|
||||
{
|
||||
DebugLog.Screen("Could not add rigidbody");
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.Screen("Could yes add rigidbody");
|
||||
}
|
||||
_rigidbody.useGravity = false;
|
||||
_rigidbody.isKinematic = true;
|
||||
_prevPosition = transform.position;
|
||||
|
||||
InvokeRepeating(nameof(TryEnableCollisions), 1, 1);
|
||||
}
|
||||
|
||||
void FixedUpdate()
|
||||
@ -32,5 +37,38 @@ namespace QSB.TransformSync
|
||||
_rigidbody.MovePosition(target.position);
|
||||
_rigidbody.MoveRotation(target.rotation);
|
||||
}
|
||||
|
||||
void TryEnableCollisions()
|
||||
{
|
||||
if (!_collider.isTrigger)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var colliders = Physics.OverlapSphere(transform.position, 2);
|
||||
foreach (var collider in colliders)
|
||||
{
|
||||
if (collider.gameObject == gameObject)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (collider.GetComponentInParent(localColliderType) || collider.GetComponent<RigidbodySync>())
|
||||
{
|
||||
DebugLog.All("Occupied by", collider.name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
DebugLog.All("Enable collisions for", gameObject.name);
|
||||
_collider.isTrigger = false;
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (!_collider.isTrigger && (_prevPosition - transform.position).sqrMagnitude > _collisionDisableMovementThreshold)
|
||||
{
|
||||
DebugLog.All("Disable collisions for", gameObject.name);
|
||||
_collider.isTrigger = true;
|
||||
}
|
||||
_prevPosition = transform.position;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ namespace QSB.TransformSync
|
||||
= landingGearRight.localPosition
|
||||
+= Vector3.up * 3.762f;
|
||||
|
||||
var physicsBody = new GameObject();
|
||||
var physicsBody = new GameObject("ShipBodySync");
|
||||
|
||||
var collider = physicsBody.AddComponent<SphereCollider>();
|
||||
collider.radius = 5;
|
||||
@ -49,6 +49,7 @@ namespace QSB.TransformSync
|
||||
|
||||
var rigidBodySync = physicsBody.AddComponent<RigidbodySync>();
|
||||
rigidBodySync.target = remoteTransform;
|
||||
rigidBodySync.localColliderType = typeof(ShipBody);
|
||||
|
||||
//var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;
|
||||
//sphere.parent = rigidBodySync.transform;
|
||||
|
Loading…
x
Reference in New Issue
Block a user