chore: initial commit
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace MoreMountains.Tools
|
||||
{
|
||||
/// <summary>
|
||||
/// This component, added to a line renderer, will let you fill a list of transforms, and bind their positions to the linerenderer's positions.
|
||||
/// </summary>
|
||||
[RequireComponent(typeof(LineRenderer))]
|
||||
public class MMLineRendererDriver : MonoBehaviour
|
||||
{
|
||||
[Header("Position Drivers")]
|
||||
|
||||
/// the list of targets - their quantity has to match the LineRenderer's positions count
|
||||
public List<Transform> Targets;
|
||||
/// whether or not to keep both in sync at update
|
||||
public bool BindPositionsToTargetsAtUpdate = true;
|
||||
|
||||
[Header("Binding")]
|
||||
|
||||
/// a test button
|
||||
[MMInspectorButton("Bind")]
|
||||
public bool BindButton;
|
||||
|
||||
protected LineRenderer _lineRenderer;
|
||||
protected bool _countsMatch = false;
|
||||
|
||||
/// <summary>
|
||||
/// On Awake we initialize our driver
|
||||
/// </summary>
|
||||
protected virtual void Awake()
|
||||
{
|
||||
Initialization();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Grabs the line renderer, tests counts
|
||||
/// </summary>
|
||||
protected virtual void Initialization()
|
||||
{
|
||||
_lineRenderer = this.gameObject.GetComponent<LineRenderer>();
|
||||
_countsMatch = CheckPositionCounts();
|
||||
if (!_countsMatch)
|
||||
{
|
||||
Debug.LogWarning(this.name + ", MMLineRendererDriver's Targets list doesn't have the same amount of entries as the LineRender's Positions array. It won't work.");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// On Update we bind our positions to targets if needed
|
||||
/// </summary>
|
||||
protected virtual void Update()
|
||||
{
|
||||
if (BindPositionsToTargetsAtUpdate)
|
||||
{
|
||||
BindPositionsToTargets();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A method meant to be called by the inspector button
|
||||
/// </summary>
|
||||
protected virtual void Bind()
|
||||
{
|
||||
Initialization();
|
||||
BindPositionsToTargets();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Goes through all the targets and assigns their positions to the LineRenderer's positions
|
||||
/// </summary>
|
||||
public virtual void BindPositionsToTargets()
|
||||
{
|
||||
if (!_countsMatch)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < Targets.Count; i++)
|
||||
{
|
||||
_lineRenderer.SetPosition(i, Targets[i].position);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Makes sure the counts match
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected virtual bool CheckPositionCounts()
|
||||
{
|
||||
return Targets.Count == _lineRenderer.positionCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user