mirror of
https://github.com/FriendshipIsEpic/FiE-Game.git
synced 2024-11-30 00:48:00 +01:00
134 lines
3.5 KiB
C#
134 lines
3.5 KiB
C#
|
/*******************************************************************************************
|
|||
|
* Author: Lane Gresham, AKA LaneMax
|
|||
|
* Websites: http://resurgamstudios.com
|
|||
|
* Description: Used for cgf trigger, used creating a hover effect using the cgf object.
|
|||
|
*******************************************************************************************/
|
|||
|
using UnityEngine;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
|
|||
|
namespace CircularGravityForce
|
|||
|
{
|
|||
|
public class CGF_HoverTrigger : MonoBehaviour
|
|||
|
{
|
|||
|
#region Properties
|
|||
|
|
|||
|
[SerializeField, Tooltip("Circular gravity force object used for the hover trigger.")]
|
|||
|
private CGF cgf;
|
|||
|
public CGF Cgf
|
|||
|
{
|
|||
|
get { return cgf; }
|
|||
|
set { cgf = value; }
|
|||
|
}
|
|||
|
|
|||
|
[SerializeField, Tooltip("Hover force power.")]
|
|||
|
private float forcePower = 30f;
|
|||
|
public float ForcePower
|
|||
|
{
|
|||
|
get { return forcePower; }
|
|||
|
set { forcePower = value; }
|
|||
|
}
|
|||
|
|
|||
|
[SerializeField, Tooltip("Hover distance.")]
|
|||
|
private float hoverDistance = 3f;
|
|||
|
public float HoverDistance
|
|||
|
{
|
|||
|
get { return hoverDistance; }
|
|||
|
set { hoverDistance = value; }
|
|||
|
}
|
|||
|
|
|||
|
[SerializeField, Tooltip("Max distace it can hover.")]
|
|||
|
private float maxDistance = 10f;
|
|||
|
public float MaxDistance
|
|||
|
{
|
|||
|
get { return maxDistance; }
|
|||
|
set { maxDistance = value; }
|
|||
|
}
|
|||
|
|
|||
|
[SerializeField, Tooltip("Layer mask used from the ray cast.")]
|
|||
|
private LayerMask layerMask = -1;
|
|||
|
public LayerMask _layerMask
|
|||
|
{
|
|||
|
get { return layerMask; }
|
|||
|
set { layerMask = value; }
|
|||
|
}
|
|||
|
|
|||
|
private float gizmoSize = .25f;
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Gizmos
|
|||
|
|
|||
|
void OnDrawGizmos()
|
|||
|
{
|
|||
|
Vector3 fwd = this.transform.TransformDirection(Vector3.forward);
|
|||
|
|
|||
|
RaycastHit hitInfo;
|
|||
|
|
|||
|
if (cgf != null)
|
|||
|
{
|
|||
|
gizmoSize = (cgf.Size / 8f);
|
|||
|
if (gizmoSize > .25f)
|
|||
|
gizmoSize = .25f;
|
|||
|
else if (gizmoSize < -.25f)
|
|||
|
gizmoSize = -.25f;
|
|||
|
}
|
|||
|
|
|||
|
Color activeColor = Color.cyan;
|
|||
|
Color nonActiveColor = Color.white;
|
|||
|
|
|||
|
if (Physics.Raycast(this.transform.position, fwd, out hitInfo, maxDistance, _layerMask))
|
|||
|
{
|
|||
|
if (hitInfo.distance < maxDistance)
|
|||
|
{
|
|||
|
Gizmos.color = activeColor;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Gizmos.color = nonActiveColor;
|
|||
|
}
|
|||
|
|
|||
|
Gizmos.DrawLine(this.transform.position, hitInfo.point);
|
|||
|
Gizmos.DrawSphere(hitInfo.point, gizmoSize);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Gizmos.color = Color.white;
|
|||
|
Gizmos.DrawLine(this.transform.position, this.transform.position + (fwd * MaxDistance));
|
|||
|
}
|
|||
|
|
|||
|
Gizmos.DrawSphere(this.transform.position, gizmoSize);
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Unity Functions
|
|||
|
|
|||
|
void Update()
|
|||
|
{
|
|||
|
Vector3 fwd = this.transform.TransformDirection(Vector3.forward);
|
|||
|
|
|||
|
RaycastHit hitInfo;
|
|||
|
|
|||
|
if (Physics.Raycast(this.transform.position, fwd, out hitInfo, maxDistance, _layerMask))
|
|||
|
{
|
|||
|
if (hitInfo.distance < maxDistance)
|
|||
|
{
|
|||
|
float proportionalHeight = (HoverDistance - hitInfo.distance) / HoverDistance;
|
|||
|
cgf.ForcePower = proportionalHeight * ForcePower;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
cgf.ForcePower = 0f;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
cgf.ForcePower = 0f;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
}
|
|||
|
}
|