mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-14 06:40:41 +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());
|
var body = Instantiate(GetPlayerModel());
|
||||||
GetComponent<AnimationSync>().InitRemote(body);
|
GetComponent<AnimationSync>().InitRemote(body);
|
||||||
|
|
||||||
var physicsBody = new GameObject();
|
var physicsBody = new GameObject("PlayerBodySync");
|
||||||
|
|
||||||
var collider = physicsBody.AddComponent<CapsuleCollider>();
|
var collider = physicsBody.AddComponent<CapsuleCollider>();
|
||||||
collider.radius = 1;
|
collider.radius = 1;
|
||||||
@ -40,6 +40,7 @@ namespace QSB.TransformSync
|
|||||||
|
|
||||||
var rigidBodySync = physicsBody.AddComponent<RigidbodySync>();
|
var rigidBodySync = physicsBody.AddComponent<RigidbodySync>();
|
||||||
rigidBodySync.target = body;
|
rigidBodySync.target = body;
|
||||||
|
rigidBodySync.localColliderType = typeof(PlayerBody);
|
||||||
|
|
||||||
//var capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule).transform;
|
//var capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule).transform;
|
||||||
//capsule.parent = rigidBodySync.transform;
|
//capsule.parent = rigidBodySync.transform;
|
||||||
|
@ -9,22 +9,27 @@ namespace QSB.TransformSync
|
|||||||
class RigidbodySync : MonoBehaviour
|
class RigidbodySync : MonoBehaviour
|
||||||
{
|
{
|
||||||
public Transform target;
|
public Transform target;
|
||||||
|
public Type localColliderType;
|
||||||
private Rigidbody _rigidbody;
|
private Rigidbody _rigidbody;
|
||||||
|
private Collider _collider;
|
||||||
|
private Vector3 _prevPosition;
|
||||||
|
private const float _collisionDisableMovementThreshold = 250;
|
||||||
|
|
||||||
|
void Awake()
|
||||||
|
{
|
||||||
|
_collider = GetComponent<Collider>();
|
||||||
|
_collider.isTrigger = true;
|
||||||
|
}
|
||||||
|
|
||||||
void Start()
|
void Start()
|
||||||
{
|
{
|
||||||
gameObject.AddComponent<OWRigidbody>();
|
gameObject.AddComponent<OWRigidbody>();
|
||||||
_rigidbody = gameObject.GetComponent<Rigidbody>();
|
_rigidbody = gameObject.GetComponent<Rigidbody>();
|
||||||
if (_rigidbody == null)
|
|
||||||
{
|
|
||||||
DebugLog.Screen("Could not add rigidbody");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DebugLog.Screen("Could yes add rigidbody");
|
|
||||||
}
|
|
||||||
_rigidbody.useGravity = false;
|
_rigidbody.useGravity = false;
|
||||||
_rigidbody.isKinematic = true;
|
_rigidbody.isKinematic = true;
|
||||||
|
_prevPosition = transform.position;
|
||||||
|
|
||||||
|
InvokeRepeating(nameof(TryEnableCollisions), 1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FixedUpdate()
|
void FixedUpdate()
|
||||||
@ -32,5 +37,38 @@ namespace QSB.TransformSync
|
|||||||
_rigidbody.MovePosition(target.position);
|
_rigidbody.MovePosition(target.position);
|
||||||
_rigidbody.MoveRotation(target.rotation);
|
_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
|
= landingGearRight.localPosition
|
||||||
+= Vector3.up * 3.762f;
|
+= Vector3.up * 3.762f;
|
||||||
|
|
||||||
var physicsBody = new GameObject();
|
var physicsBody = new GameObject("ShipBodySync");
|
||||||
|
|
||||||
var collider = physicsBody.AddComponent<SphereCollider>();
|
var collider = physicsBody.AddComponent<SphereCollider>();
|
||||||
collider.radius = 5;
|
collider.radius = 5;
|
||||||
@ -49,6 +49,7 @@ namespace QSB.TransformSync
|
|||||||
|
|
||||||
var rigidBodySync = physicsBody.AddComponent<RigidbodySync>();
|
var rigidBodySync = physicsBody.AddComponent<RigidbodySync>();
|
||||||
rigidBodySync.target = remoteTransform;
|
rigidBodySync.target = remoteTransform;
|
||||||
|
rigidBodySync.localColliderType = typeof(ShipBody);
|
||||||
|
|
||||||
//var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;
|
//var sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform;
|
||||||
//sphere.parent = rigidBodySync.transform;
|
//sphere.parent = rigidBodySync.transform;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user