namespace Zinnia.Cast.Operation.Conversion
{
using System;
using UnityEngine;
///
/// Converts any supported caster to a .
///
public class ToLinecastConverter : CastConverter
{
///
public override bool ConvertFromBoxCast(PhysicsCast customCast, out RaycastHit hitData, Vector3 center, Vector3 halfExtents, Vector3 direction, Quaternion orientation, float maxDistance)
{
Vector3 endPosition = GetProjectedPoint(center, direction, maxDistance);
return customCast.CustomLinecast(center, endPosition, out hitData, false);
}
///
public override ArraySegment ConvertFromBoxCastAll(PhysicsCast customCast, Vector3 center, Vector3 halfExtents, Vector3 direction, Quaternion orientation, float maxDistance)
{
throw new NotImplementedException("There is no implementation of `Physics.LinecastAll`");
}
///
public override bool ConvertFromCapsuleCast(PhysicsCast customCast, out RaycastHit hitData, Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance)
{
Vector3 origin = GetCenterVector(point1, point2);
Vector3 endPosition = GetProjectedPoint(origin, direction, maxDistance);
return customCast.CustomLinecast(origin, endPosition, out hitData, false);
}
///
public override ArraySegment ConvertFromCapsuleCastAll(PhysicsCast customCast, Vector3 point1, Vector3 point2, float radius, Vector3 direction, float maxDistance)
{
throw new NotImplementedException("There is no implementation of `Physics.LinecastAll`");
}
///
public override bool ConvertFromLinecast(PhysicsCast customCast, out RaycastHit hitData, Vector3 startPosition, Vector3 endPosition)
{
return customCast.CustomLinecast(startPosition, endPosition, out hitData, false);
}
///
public override bool ConvertFromRaycast(PhysicsCast customCast, out RaycastHit hitData, Ray ray, float maxDistance)
{
Vector3 endPosition = GetProjectedPoint(ray.origin, ray.direction, maxDistance);
return customCast.CustomLinecast(ray.origin, endPosition, out hitData, false);
}
///
public override ArraySegment ConvertFromRaycastAll(PhysicsCast customCast, Ray ray, float maxDistance)
{
throw new NotImplementedException("There is no implementation of `Physics.LinecastAll`");
}
///
public override bool ConvertFromSphereCast(PhysicsCast customCast, out RaycastHit hitData, Vector3 origin, float radius, Vector3 direction, float maxDistance)
{
Vector3 endPosition = GetProjectedPoint(origin, direction, maxDistance);
return customCast.CustomLinecast(origin, endPosition, out hitData, false);
}
///
public override ArraySegment ConvertFromSphereCastAll(PhysicsCast customCast, Vector3 origin, float radius, Vector3 direction, float maxDistance)
{
throw new NotImplementedException("There is no implementation of `Physics.LinecastAll`");
}
}
}