// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value.
using UnityEngine;
namespace Animancer.Samples.Jobs
{
///
/// An sample component that calls
/// when the user clicks on the ground.
///
///
///
/// Sample:
///
/// Hit Impacts
///
///
/// https://kybernetik.com.au/animancer/api/Animancer.Samples.Jobs/ClickToHit
///
[AddComponentMenu(Strings.SamplesMenuPrefix + "Jobs - Click to Hit")]
[AnimancerHelpUrl(typeof(ClickToHit))]
public class ClickToHit : MonoBehaviour
{
/************************************************************************************************************************/
#if UNITY_PHYSICS_3D
/************************************************************************************************************************/
[SerializeField] private HitReceiver _HitReceiver;
[SerializeField] private float _LeftClickForce = 500;
[SerializeField] private float _RightClickForce = 300;
/************************************************************************************************************************/
protected virtual void Update()
{
if (SampleInput.LeftMouseDown)
HitTarget(_LeftClickForce);
else if (SampleInput.RightMouseDown)
HitTarget(_RightClickForce);
}
/************************************************************************************************************************/
private void HitTarget(float force)
{
// Get a ray from the main camera in the direction of the mouse cursor.
Ray ray = Camera.main.ScreenPointToRay(SampleInput.MousePosition);
// Raycast with it and stop trying to move it it doesn't hit anything.
if (!Physics.Raycast(ray, out RaycastHit raycastHit))// Note the exclamation mark !
return;
Vector3 direction = _HitReceiver.transform.position - raycastHit.point;
_HitReceiver.Hit(direction, force);
}
/************************************************************************************************************************/
#else
/************************************************************************************************************************/
protected virtual void Awake()
{
SampleReadMe.LogMissingPhysics3DModuleError(this);
}
/************************************************************************************************************************/
#endif
/************************************************************************************************************************/
}
}