using System; using UnityEngine; [AddComponentMenu("Modifiers/Hump")] public class MegaHump : MegaModifier { public float amount; public float cycles = 1f; public float phase; public bool animate; public float speed = 1f; public MegaAxis axis = MegaAxis.Z; private float amt; private Vector3 size = Vector3.zero; public override string ModName() { return "Hump"; } public override string GetHelpURL() { return "?page_id=207"; } public override Vector3 Map(int i, Vector3 p) { p = tm.MultiplyPoint3x4(p); switch (axis) { case MegaAxis.X: p.x += amt * Mathf.Sin(Mathf.Sqrt(p.x * p.x / size.x) + Mathf.Sqrt(p.y * p.y / size.y) * (float)Math.PI / 0.1f * ((float)Math.PI / 180f * cycles) + phase); break; case MegaAxis.Y: p.y += amt * Mathf.Sin(Mathf.Sqrt(p.y * p.y / size.y) + Mathf.Sqrt(p.x * p.x / size.x) * (float)Math.PI / 0.1f * ((float)Math.PI / 180f * cycles) + phase); break; case MegaAxis.Z: p.z += amt * Mathf.Sin(Mathf.Sqrt(p.x * p.x / size.x) + Mathf.Sqrt(p.y * p.y / size.y) * (float)Math.PI / 0.1f * ((float)Math.PI / 180f * cycles) + phase); break; } return invtm.MultiplyPoint3x4(p); } public override bool ModLateUpdate(MegaModContext mc) { if (animate) { phase += Time.deltaTime * speed; } return Prepare(mc); } public override bool Prepare(MegaModContext mc) { size = bbox.Size(); amt = amount / 100f; return true; } }