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); } }