102 lines
1.5 KiB
C#
102 lines
1.5 KiB
C#
using System;
|
|
using UnityEngine;
|
|
|
|
[AddComponentMenu("Modifiers/Radial Skew")]
|
|
public class MegaRadialSkew : MegaModifier
|
|
{
|
|
public float angle;
|
|
|
|
public MegaAxis axis;
|
|
|
|
public MegaAxis eaxis;
|
|
|
|
public bool biaxial;
|
|
|
|
public override string ModName()
|
|
{
|
|
return "RaidalSkew";
|
|
}
|
|
|
|
public override string GetHelpURL()
|
|
{
|
|
return "?page_id=305";
|
|
}
|
|
|
|
private Vector3 GetSkew(Vector3 p)
|
|
{
|
|
if (biaxial)
|
|
{
|
|
switch (axis)
|
|
{
|
|
case MegaAxis.X:
|
|
switch (eaxis)
|
|
{
|
|
case MegaAxis.Y:
|
|
p.x = (p.z = 0f);
|
|
break;
|
|
case MegaAxis.Z:
|
|
p.x = (p.y = 0f);
|
|
break;
|
|
default:
|
|
p.x = (p.y = 0f);
|
|
break;
|
|
}
|
|
break;
|
|
case MegaAxis.Y:
|
|
switch (eaxis)
|
|
{
|
|
case MegaAxis.X:
|
|
p.y = (p.z = 0f);
|
|
break;
|
|
case MegaAxis.Z:
|
|
p.x = (p.y = 0f);
|
|
break;
|
|
default:
|
|
p.x = (p.y = 0f);
|
|
break;
|
|
}
|
|
break;
|
|
case MegaAxis.Z:
|
|
switch (eaxis)
|
|
{
|
|
case MegaAxis.X:
|
|
p.y = (p.z = 0f);
|
|
break;
|
|
case MegaAxis.Y:
|
|
p.x = (p.z = 0f);
|
|
break;
|
|
default:
|
|
p.y = (p.z = 0f);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (axis)
|
|
{
|
|
case MegaAxis.X:
|
|
p.x = 0f;
|
|
break;
|
|
case MegaAxis.Y:
|
|
p.y = 0f;
|
|
break;
|
|
case MegaAxis.Z:
|
|
p.z = 0f;
|
|
break;
|
|
}
|
|
}
|
|
return p.normalized;
|
|
}
|
|
|
|
public override Vector3 Map(int i, Vector3 p)
|
|
{
|
|
p = tm.MultiplyPoint3x4(p);
|
|
float num = Mathf.Atan((float)Math.PI / 180f * angle);
|
|
Vector3 vector = GetSkew(p) * num * p[(int)axis];
|
|
p += vector;
|
|
return invtm.MultiplyPoint3x4(p);
|
|
}
|
|
}
|