12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using UnityEngine;
- using System.Collections.Generic;
- [AddComponentMenu("Modifiers/Rolled")]
- public class MegaRolled : MegaModifier
- {
- public float radius = 1.0f;
- public Transform roller;
- public float splurge = 1.0f;
- public MegaAxis fwdaxis = MegaAxis.Z;
- Matrix4x4 mat = new Matrix4x4();
- Vector3[] offsets;
- Plane plane;
- float height = 0.0f;
- public override string ModName() { return "Rolled"; }
- public override string GetHelpURL() { return "?page_id=1292"; }
- public override Vector3 Map(int i, Vector3 p)
- {
- if ( i >= 0 )
- {
- p = tm.MultiplyPoint3x4(p); // tm may have an offset gizmo etc
- if ( p.z > rpos.z )
- {
- p.y *= delta; //height;
- p.x += (1.0f - delta) * splurge * p.x;
- p.z += (1.0f - delta) * splurge * (p.z - rpos.z);
- }
- p = invtm.MultiplyPoint3x4(p);
- }
- return p;
- }
- public override bool ModLateUpdate(MegaModContext mc)
- {
- return Prepare(mc);
- }
- Vector3 rpos;
- public bool clearoffsets = false;
- float delta = 0.0f;
- public override bool Prepare(MegaModContext mc)
- {
- if ( !roller )
- return false;
- rpos = transform.worldToLocalMatrix.MultiplyPoint3x4(roller.position);
- height = rpos.y - radius;
- if ( offsets == null || offsets.Length != mc.mod.verts.Length )
- offsets = new Vector3[mc.mod.verts.Length];
- mat = Matrix4x4.identity;
- SetAxis(mat);
- tm = Matrix4x4.identity;
- if ( clearoffsets )
- {
- clearoffsets = false;
- for ( int i = 0; i < offsets.Length; i++ )
- {
- offsets[i] = Vector3.zero;
- }
- }
- if ( height < mc.bbox.Size().y )
- delta = height / mc.bbox.Size().y;
- else
- delta = 1.0f;
- return true;
- }
- public override void PrepareMT(MegaModifiers mc, int cores)
- {
- }
- public override void DoWork(MegaModifiers mc, int index, int start, int end, int cores)
- {
- if ( index == 0 )
- Modify(mc);
- }
- }
|