mirror of
https://github.com/nothke/quality-control.git
synced 2024-12-23 08:17:29 +00:00
63 lines
1.3 KiB
C#
63 lines
1.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace Nothke.Interaction.Items
|
|
{
|
|
public class RigidbodyInteractable : Interactable
|
|
{
|
|
public Rigidbody rb;
|
|
public bool rotateAroundPoint;
|
|
|
|
[System.NonSerialized]
|
|
public bool held;
|
|
|
|
private void Awake()
|
|
{
|
|
if (!rb)
|
|
rb = GetComponent<Rigidbody>();
|
|
}
|
|
|
|
public override void Use(InteractionController im)
|
|
{
|
|
base.Use(im);
|
|
|
|
DragRigidbody.e.Attach(im.hit, !rotateAroundPoint);
|
|
DragRigidbody.e.OnSlipped += Unhold;
|
|
}
|
|
|
|
public override void StartHold()
|
|
{
|
|
base.StartHold();
|
|
manager.FreezeDetection();
|
|
|
|
held = true;
|
|
|
|
OnStartedHold();
|
|
}
|
|
|
|
public override void EndHold()
|
|
{
|
|
base.EndHold();
|
|
|
|
if (!held)
|
|
return;
|
|
|
|
DragRigidbody.e.End();
|
|
|
|
Unhold();
|
|
}
|
|
|
|
void Unhold()
|
|
{
|
|
manager.UnfreezeDetection();
|
|
manager.LockFreeLook(false);
|
|
DragRigidbody.e.OnSlipped -= Unhold;
|
|
held = false;
|
|
OnEndedHold();
|
|
}
|
|
|
|
protected virtual void OnStartedHold() { }
|
|
protected virtual void OnEndedHold() { }
|
|
}
|
|
} |