Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
using Fluctio.FluctioSim.Common.Configuration;
using Fluctio.FluctioSim.Utils.General;
using UnityEngine;

namespace Fluctio.FluctioSim.Core.Components.MachineLearning.NumberProviders
{
	[AddComponentMenu(Config.PrefixedName+"/Machine Learning/Number Providers/Distance Calculator", Config.ComponentMenuOrder + 80)]
	public class DistanceNumberProvider : NumberProvider
	{
		[field: SerializeField] public Vector3Bool Components { get; private set; } = new (true);
		[field: SerializeField] public GameObject OrientationRelativeTo { get; private set; }
		[field: SerializeField] public GameObject Object1 { get; private set; }
		[field: SerializeField] public GameObject Object2 { get; private set; }
		
		[Tooltip("Can be negative. For example, if you want to get closer to the goal and punish for bigger distance.\nNumber = distance * distanceMultiplier")]
		[SerializeField] public float distanceMultiplier = -1;
		
		public override float GetNumber()
		{
			var positionDifference = Object1.transform.position - Object2.transform.position;
			var localPositionDifference = (OrientationRelativeTo == null)
				? positionDifference
				: OrientationRelativeTo.transform.InverseTransformDirection(positionDifference);
			var flattenedDifference = Components * localPositionDifference;
			var distance = flattenedDifference.magnitude;
			return distance * distanceMultiplier;
		}
	}
}