//Arrow_freq //public InputField arrow_freq_Input; //public Slider arrow_freq_Slider; //bool bArrow_freq_SliderOn = false; public void onArrow_freq_EditComplete(string str) { float value = float.Parse(arrow_freq_Input.text); if (value < arrow_freq_Slider.maxValue && value > arrow_freq_Slider.minValue) { arrow_freq_Slider.value = value; } } public void onArrow_freq_SliderValueChanged() { float value = arrow_freq_Slider.value; arrow_freq_Input.text = value.ToString("F2") + " Hz"; bArrow_freq_SliderOn = true; } //Brush_freq //public InputField brush_freq_Input; //public Slider brush_freq_Slider; //bool bBrush_freq_SliderOn = false; public void onBrush_freq_EditComplete(string str) { float value = float.Parse(brush_freq_Input.text); if (value < brush_freq_Slider.maxValue && value > brush_freq_Slider.minValue) { brush_freq_Slider.value = value; } } public void onBrush_freq_SliderValueChanged() { float value = brush_freq_Slider.value; brush_freq_Input.text = value.ToString("F2") + " Hz"; bBrush_freq_SliderOn = true; } //AB_Ratio //public InputField ab_ratio_Input; //public Slider ab_ratio_Slider; //bool bAB_Ratio_SliderOn = false; public void onAB_Ratio_EditComplete(string str) { float value = float.Parse(ab_ratio_Input.text); if (value < ab_ratio_Slider.maxValue && value > ab_ratio_Slider.minValue) { ab_ratio_Slider.value = value; } } public void onAB_Ratio_SliderValueChanged() { float value = ab_ratio_Slider.value; ab_ratio_Input.text = value.ToString("F2") + " "; bAB_Ratio_SliderOn = true; } //Seg_len //public InputField seg_len_Input; //public Slider seg_len_Slider; //bool bSeg_len_SliderOn = false; public void onSeg_len_EditComplete(string str) { float value = float.Parse(seg_len_Input.text); if (value < seg_len_Slider.maxValue && value > seg_len_Slider.minValue) { seg_len_Slider.value = value; } } public void onSeg_len_SliderValueChanged() { float value = seg_len_Slider.value; seg_len_Input.text = value.ToString("F2") + " --"; bSeg_len_SliderOn = true; } //Phasor_len //public InputField phasor_len_Input; //public Slider phasor_len_Slider; //bool bPhasor_len_SliderOn = false; public void onPhasor_len_EditComplete(string str) { float value = float.Parse(seg_len_Input.text); if (value < phasor_len_Slider.maxValue && value > phasor_len_Slider.minValue) { phasor_len_Slider.value = value; } } public void onPhasor_len_SliderValueChanged()//len to width { float value = phasor_len_Slider.value; phasor_len_Input.text = value.ToString("F2") + " --"; bPhasor_len_SliderOn = true; } //Max_Segments //public InputField max_segments_Input; //public Slider max_segments_Slider; //bool bMax_Segments_SliderOn = false; public void onMax_Segments_EditComplete(string str) { float value = float.Parse(max_segments_Input.text); if (value < max_segments_Slider.maxValue && value > max_segments_Slider.minValue) { max_segments_Slider.value = value; } } public void onMax_Segments_SliderValueChanged() { float value = max_segments_Slider.value; max_segments_Input.text = value.ToString("F2") + " Segs"; bMax_Segments_SliderOn = true; } //Duration //public InputField duration_Input; //public Slider duration_Slider; //bool bDuration_SliderOn = false; public void onDuration_EditComplete(string str) { float value = float.Parse(duration_Input.text); if (value < duration_Slider.maxValue && value > duration_Slider.minValue) { duration_Slider.value = value; } } public void onDuration_SliderValueChanged() { float value = duration_Slider.value; duration_Input.text = value.ToString("F2") + " secs"; bDuration_SliderOn = true; }
using UnityEngine; using System.Collections; using UnityEngine.UI; public class UI_Control : MonoBehaviour { public Canvas UI_Canvas; public Sprite locked_sprite; public Sprite unlocked_sprite; public Button lock_Unlock_Button; public Sprite rotate_off_sprite; public Sprite rotate_on_sprite; public Button rotate_Button; public Sprite rotate_OnNavSphere_off_sprite; public Sprite rotate_OnNavSphere_on_sprite; public Button rotate_OnNavSphere_Button; bool isOn = false; bool _isLocked_NavSpheretoCam = false; bool rotateOn = false; bool _rotateOnNavSphere = false; GameObject Argos_Camera; GameObject NavSphere_Pivot; GameObject Argos_NavSphere; void Start () { Argos_Camera = GameObject.Find("Argos_Camera"); NavSphere_Pivot = GameObject.Find("NavSphere_Pivot"); Argos_NavSphere = GameObject.Find("Argos_NavSphere"); } public bool isLocked_NavSpheretoCam { get { return _isLocked_NavSpheretoCam; } } public bool rotateOnNavSphere { get { return _rotateOnNavSphere; } } public void onRotateButton() { rotateOn = !rotateOn; SpriteState st = new SpriteState(); if (rotateOn) { rotate_Button.image.sprite = rotate_on_sprite; st.pressedSprite = rotate_off_sprite; } else { rotate_Button.image.sprite = rotate_off_sprite; st.pressedSprite = rotate_on_sprite; } rotate_Button.spriteState = st; } public void onRotateOnNavSphereButton() { _rotateOnNavSphere = !_rotateOnNavSphere; SpriteState st = new SpriteState(); if (_rotateOnNavSphere) { rotate_OnNavSphere_Button.image.sprite = rotate_OnNavSphere_on_sprite; st.pressedSprite = rotate_OnNavSphere_off_sprite; } else { rotate_OnNavSphere_Button.image.sprite = rotate_OnNavSphere_off_sprite; st.pressedSprite = rotate_OnNavSphere_on_sprite; } rotate_OnNavSphere_Button.spriteState = st; } public void onNavSphereLockUnlockButton() { _isLocked_NavSpheretoCam = !_isLocked_NavSpheretoCam; SpriteState st = new SpriteState(); if (_isLocked_NavSpheretoCam) { lock_Unlock_Button.image.sprite = locked_sprite; st.pressedSprite = unlocked_sprite; Quaternion q0 = Argos_Camera.transform.rotation; Quaternion q1 = NavSphere_Pivot.transform.rotation; Argos_NavSphere.transform.rotation = q1 * Quaternion.Inverse(q0)* Argos_NavSphere.transform.rotation; NavSphere_Pivot.transform.rotation = q0; } else { lock_Unlock_Button.image.sprite = unlocked_sprite; st.pressedSprite = locked_sprite; } lock_Unlock_Button.spriteState = st; } public void onUIButtonDown() { isOn = !isOn; UI_Canvas.gameObject.SetActive(isOn); } void Update () { } }
using UnityEngine; using System.Collections; public class ValueUpdate : MonoBehaviour { private UnityEngine.UI.Slider my_slider; private UnityEngine.UI.InputField my_field; void Start() { my_slider = gameObject.GetComponent<UnityEngine.UI.Slider>(); my_field = gameObject.GetComponent<UnityEngine.UI.InputField>(); } public void UpdateValueFromFloat(float value) { Debug.Log("float value changed: " + value); if (my_slider) { my_slider.value = value; } if (my_field) { my_field.text = value.ToString(); } } public void UpdateValueFromString(string value) { Debug.Log("string value changed: " + value); if (my_slider) { my_slider.value = float.Parse(value); } if (my_field) { my_field.text = value; } } }
using UnityEngine; using System.Collections; using ProceduralToolkit; using UnityEngine.UI; public class Argos_Brush : MonoBehaviour { Mesh mesh; [SerializeField] Material _material; MaterialPropertyBlock _block; private ArgosMeshDraft amDraft; public ArgosMeshDraft AmDraft { get { return amDraft; } } void Start () { MeshFilter mf = GetComponent<MeshFilter>(); if (mf.mesh == null) mf.mesh = new Mesh(); mesh = mf.mesh; amDraft = new ArgosMeshDraft(); _block = new MaterialPropertyBlock(); } float accumTime = 0f; void Update () { accumTime += Time.deltaTime; amDraft.QuadListUpdate(); GetComponent<MeshFilter>().mesh = amDraft.ToMesh(); float angle = 5f * accumTime; Graphics.DrawMesh(GetComponent<MeshFilter>().mesh, new Vector3(0f,0f,0f), Quaternion.Euler(0f, 0f, angle), _material, gameObject.layer, null, 0, _block); Graphics.DrawMesh(GetComponent<MeshFilter>().mesh, new Vector3(0f, 0f, 0f), Quaternion.Euler(0f, angle,0f ), _material, gameObject.layer, null, 0, _block) } public int GetNumVertices() { return amDraft.vertices.Count; } public Vector3 GetVertex(int i) { return amDraft.vertices[i]; } public void SetVertex(int i, Vector3 v) { amDraft.vertices[i] = v; } public void MeshDraft_ToMesh() { if (amDraft != null) { GetComponent<MeshFilter>().mesh = amDraft.ToMesh(); } } public void initAddMeshDraft(MeshDraft md) { MeshFilter mf = GetComponent<MeshFilter>(); if (mf.mesh == null) mf.mesh = new Mesh(); mesh = mf.mesh; amDraft = new ArgosMeshDraft(); if (amDraft != null) { amDraft.Add(md); GetComponent<MeshFilter>().mesh = amDraft.ToMesh(); } } public void Paint(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, Color col, float duration) { if (amDraft != null) { amDraft.Quad_Paint(v0, v1, v2, v3, col, duration); } } public void AddMeshDraft(MeshDraft md) { if (amDraft != null) { amDraft.Add(md); GetComponent<MeshFilter>().mesh = amDraft.ToMesh(); } } public void AddMeshDraft_Only(MeshDraft md) { if (amDraft != null) { amDraft.Add(md); } } public void AddQuad(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3) { if (amDraft != null) { amDraft.Add(MeshDraft.Quad(v0, v1, v2, v3)); GetComponent<MeshFilter>().mesh = amDraft.ToMesh(); } } public void AddQuad(Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3, Color col) { if (amDraft != null) { amDraft.Add(MeshDraft.Quad(v0, v1, v2, v3, col)); GetComponent<MeshFilter>().mesh = amDraft.ToMesh(); } } }
using UnityEngine; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; public class ARGOS_12HORNS : MonoBehaviour { //The following Cartesian coordinates define the vertices //of an icosahedron with edge-length 2, //centered at the origin: //(0, ±1, ±φ) //(±1, ±φ, 0) //(±φ, 0, ±1) public float freq = 0.05f; static float Phi = (Mathf.Sqrt(5f) + 1f)/2f; Vector3[] v12HORNS = new Vector3[] { new Vector3(0, 1f, Phi), new Vector3(0, -1f, Phi), new Vector3(-Phi, 0, 1), new Vector3(Phi, 0, 1f), new Vector3(1f, Phi,0), new Vector3(1f, -Phi,0), new Vector3(-1f, Phi,0), new Vector3(-1f, -Phi, 0), new Vector3(0, 1f, -Phi), new Vector3(0, -1f, -Phi), new Vector3(-Phi, 0, -1f), new Vector3(Phi, 0, -1f) }; public GameObject NavSphereWindowPrefab; bool isOn_HeadUpDisplay = false; public Button LockNavSphereButt; public Button RotateNavSphereButt; List<Vector3> v12HORN_Norms = new List<Vector3>(); List<GameObject> goCircs = new List<GameObject>(); public float minLen = 0.01f; public float radius = 5f; public float phasorLength = 0.2f; public float freq2 = 1f; public float ratio = 0.5f; float tAccum = 0f; List<Vector3> vList = new List<Vector3>(); Vector3 vLast = Vector3.zero; float tLast = 0f; float lastAngle; public GameObject psRiderPreFab; GameObject psRiderInst; PS_Rider psRider; Phasor phasor_0; int[] Color_12_RGB = { 0xffff00, 0xffc700, 0xff9100, 0xff6301, 0xff0000, 0xc6037e, 0x713697, 0x713697, 0x444ea1, 0x2772b2, 0x2772b2, 0x008e5b, 0x008e5b, 0x8ac819, }; Color fromRGB(int col, float alpha) { Color c; c.r = ((float)((col & 0xff0000) >> 16)) / 256f; c.g = ((float)((col & 0x00ff00) >> 8)) / 256f; c.b = ((float)((col & 0x0000ff))) / 256f; c.a = alpha; return c; } void Start () { float mag = v12HORNS[0].magnitude; for (int i = 0; i < 12; i++) v12HORN_Norms.Add(v12HORNS[1] / mag); float alpha; Quaternion q; for(int i = 0; i<12; i++) { q = Quaternion.LookRotation(v12HORNS[i]); goCircs.Add((GameObject)Instantiate(NavSphereWindowPrefab, v12HORNS[i], q)); goCircs[i].gameObject.transform.SetParent(transform); goCircs[i].transform.localScale = new Vector3(12.34f, 12.34f, 12.34f); goCircs[i].GetComponentInChildren<Phasor>().freq = freq; goCircs[i].GetComponentInChildren<Canvas>().GetComponentInChildren<Text>().text = i.ToString(); alpha = goCircs[i].GetComponentInChildren<Canvas>().GetComponentInChildren<Text>().color.a; goCircs[i].GetComponentInChildren<Canvas>().GetComponentInChildren<Text>().color = fromRGB(Color_12_RGB[i], alpha); alpha = goCircs[i].GetComponent<Renderer>().material.color.a; goCircs[i].GetComponent<Renderer>().material.color = fromRGB(Color_12_RGB[i], alpha); goCircs[i].gameObject.SetActive(isOn_HeadUpDisplay); } GetComponent<MeshRenderer>().enabled = isOn_HeadUpDisplay; LockNavSphereButt.gameObject.SetActive(isOn_HeadUpDisplay); RotateNavSphereButt.gameObject.SetActive(isOn_HeadUpDisplay); InitTestPainting(); } void InitTestPainting() { psRiderInst = (GameObject)Instantiate(psRiderPreFab, Vector3.zero, Quaternion.identity); psRider = psRiderInst.GetComponent<PS_Rider>(); phasor_0 = goCircs[0].GetComponentInChildren<Phasor>(); } float phasorUpdate() { float angle = freq * 360f * tAccum; phasor_0.transform.localRotation = Quaternion.Euler(0f, 0f, angle); return angle; } void phasorSubFrame(float angle) { phasor_0.transform.localRotation = Quaternion.Euler(0f, 0f, angle); } void Update () { tAccum += Time.deltaTime; float currAngle = phasorUpdate(); Vector3 vCurr = Func(tAccum); vCurr.Normalize(); vCurr *= radius; Vector3 vPointing = vCurr - vLast; vList.Clear(); if(vPointing.magnitude > minLen) { float numSegs = vPointing.magnitude / minLen; if (numSegs > 10) numSegs = 10f; float t = tLast; float delt = (tAccum - tLast) / numSegs; float angle = lastAngle; float deltThet = (currAngle - lastAngle) / numSegs; for(int i = 0; i<numSegs;i++) { phasorSubFrame(angle); vCurr = Func(t); vCurr.Normalize(); vCurr *= radius; vList.Add(vCurr); t += delt; angle += deltThet; } } psRider.paintList(vList); tLast = tAccum; vLast = vCurr; lastAngle = currAngle; } Vector3 Func(float t) { return v12HORNS[0] + phasor_0.transform.right * phasorLength * ((1f - ratio) + ratio * Mathf.Sin(freq2 * 2f * Mathf.PI * t)); } void collect_quads(float radius) { } public void onDisplayICO_Button() { isOn_HeadUpDisplay = !isOn_HeadUpDisplay; for(int i = 0; i<12; i++) { goCircs[i].gameObject.SetActive(isOn_HeadUpDisplay); } GetComponent<MeshRenderer>().enabled = isOn_HeadUpDisplay; LockNavSphereButt.gameObject.SetActive(isOn_HeadUpDisplay); RotateNavSphereButt.gameObject.SetActive(isOn_HeadUpDisplay); } public void onScaleSlider() { //float scale = Slide.value; //for(int i = 0; i<12; i++) //{ // goCircs[i].transform.localScale = new Vector3(scale, scale, scale); // goCircs[i].GetComponentInChildren<Phasor>().freq = freq; //} //slideText.text = scale.ToString(); } }
using UnityEngine; using System.Collections; using ProceduralToolkit; using System.Collections.Generic; using System.IO; public class PS_Rider : MonoBehaviour { StreamWriter sWrite; public ArgosMeshDraft_Fibonacci AMD_Base; GameObject goMyPivot; GameObject goTweenFollower; GameObject goPrintHead; Quaternion qStart; Quaternion qEnd; int m_startLoc; int m_toLoc; int m_deltLoc; int m_numPoints; public float m_pathTime; Quaternion myPaintRotation = Quaternion.identity; Vector3 vLastLoc, v1curr, v2curr, v1last, v2last; float minPaintLen = 0.01f; float lineWidth = 0.1f; int iStartPaint = 0; Argos_NavSphere argos_NavSphere; GameObject gO_InstancedPrefab; public Argos_Brush aBrush_Prefab; Argos_Brush brushInst; Color selColor = new Color(1f, 1f, 1f, 1f); bool bInited; void Start() { brushInst = Instantiate(aBrush_Prefab); //paintInst.transform.SetParent(transform); } public void initFromSpawner(int FibLoc, int delt, int numPoints, float pathTime ) { //sWrite = new StreamWriter("Fibo_Rider4.csv"); m_startLoc = FibLoc; m_deltLoc = delt; m_toLoc = FibLoc + delt; m_pathTime = pathTime; m_numPoints = numPoints; GameObject gFibSphere = GameObject.Find("Fibonacci_Sphere"); ArgosFibonacci aF = gFibSphere.GetComponent<ArgosFibonacci>(); AMD_Base = aF.aMF_Base; Quaternion q0, q1; q0 = Quaternion.LookRotation(AMD_Base.funcVerts[m_startLoc].vPos.normalized); q1 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); transform.rotation = q0; transform.position = AMD_Base.funcVerts[FibLoc].vPos; goTweenFollower = transform.Find("TweenFollower").gameObject; goPrintHead = transform.Find("brush_S_PS").gameObject; goMyPivot = new GameObject(); goMyPivot.transform.position = new Vector3(0, 0, 0); goMyPivot.transform.rotation = Quaternion.identity; transform.SetParent(goMyPivot.transform); goTweenFollower.transform.SetParent(transform);//this goTweenFollower.transform.position = Vector3.zero; qEnd = q1 * Quaternion.Inverse(q0); qStart = Quaternion.identity; //iTween.MoveTo(goTweenFollower, iTween.Hash("x", 1, "time", m_pathTime, "easetype", "easeInOutBack", "onstart", "fibTweenStarted", "onstartparams", "FIB Rider Started...", "onupdate", "fibTweenUpdate", "onupdateparams", FibLoc.ToString(), "oncomplete", "fibTweenComplete", "oncompleteparams", "fib Tween DONE", "onCompleteTarget", gameObject, "onStartTarget", gameObject, "onUpdateTarget", gameObject)); m_numPoints--; } int[] testFibLoc = new int[3] { 2, 450, 750 }; int currFibLoc = -1; public int getNextFibLoc() { if(++currFibLoc>testFibLoc.Length-1) currFibLoc = 0; return testFibLoc[currFibLoc]; } float accumLerp = 0.0f; void Update() { //Vector3 p = transform.position; //paint(p); if (bInited) { accumLerp += Time.deltaTime; float t = CubicEaseOut(accumLerp, 0, 1, m_pathTime); if (accumLerp > m_pathTime) { accumLerp = 0f; t = 1f; LerpComplete(); } else { LerpUpdate(t); } } } public void paintList(List<Vector3> pL) { if (pL.Count < 2) return; Vector3 len = pL[0] - vLastLoc; Vector3 vFwd = pL[0].normalized; Vector3 vUp = Vector3.Cross(vFwd, len); vUp.Normalize(); v1last = vLastLoc + (lineWidth / 2f) * vUp; v2last = vLastLoc - (lineWidth / 2f) * vUp; for (int i = 1; i < pL.Count; i++) { v1curr = pL[i] + (lineWidth / 2f) * vUp; v2curr = pL[i] - (lineWidth / 2f) * vUp; brushInst.Paint(v2last, v1last, v1curr, v2curr, selColor, 3.0f); v1last = v1curr; v2last = v2curr; } vLastLoc = pL[pL.Count - 1]; } Vector3 vLastLerp; void LerpUpdate(float t) { //Update Slerp Position goMyPivot.transform.rotation = Quaternion.LerpUnclamped(qStart, qEnd, t); Vector3 p = transform.position; paint(p); // Calc Tangent to movement Vector3 vDir = transform.position - vLastLerp; vDir.Normalize(); Vector3 vNorm = Vector3.Cross(vDir, transform.forward); vNorm.Normalize(); PulseTimer += Time.deltaTime; float amp; float mag = 0.4f; amp = mag * CubicEaseOut(PulseTimer, 1f, -1f, 0.3f); goPrintHead.GetComponent<ParticleSystem>().startSize = amp + 0.1f; //goPrintHead.transform.rotation = goMyPivot.transform.rotation; //goPrintHead.transform.position = transform.position - amp * vNorm; vLastLerp = transform.position; } void LerpComplete() { Quaternion q0, q1; goMyPivot.transform.rotation = Quaternion.LerpUnclamped(qStart, qEnd, 1.0f); q0 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); m_toLoc = (m_toLoc + 900) % 2500; //if (m_toLoc > 2000) m_toLoc = m_startLoc; q1 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); qEnd = q1 * Quaternion.Inverse(q0) * goMyPivot.transform.rotation; qStart = goMyPivot.transform.rotation; goTweenFollower.transform.position = Vector3.zero; } public void initFromEventSytem(ArgosMeshDraft_Fibonacci amd_F, float pathTime) { m_startLoc = getNextFibLoc(); m_toLoc = getNextFibLoc(); m_pathTime = pathTime; AMD_Base = amd_F; Quaternion q0, q1; q0 = Quaternion.LookRotation(AMD_Base.funcVerts[m_startLoc].vPos.normalized); q1 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); transform.rotation = q0; transform.position = AMD_Base.funcVerts[m_startLoc].vPos; goTweenFollower = transform.Find("TweenFollower").gameObject; goPrintHead = transform.Find("brush_S_PS").gameObject; goMyPivot = new GameObject(); goMyPivot.transform.position = new Vector3(0, 0, 0); goMyPivot.transform.rotation = Quaternion.identity; transform.SetParent(goMyPivot.transform); goTweenFollower.transform.SetParent(transform);//this goTweenFollower.transform.position = Vector3.zero; //public Argos_Brush aBrush_Prefab; //Argos_Brush brushInst; brushInst = Instantiate(aBrush_Prefab); brushInst.transform.rotation = Quaternion.identity; brushInst.transform.localPosition = Vector3.zero; qEnd = q1 * Quaternion.Inverse(q0); qStart = Quaternion.identity; bInited = true; //iTween.MoveTo(goTweenFollower, iTween.Hash("x", 1, "time", m_pathTime, "easetype", "linear", "onstart", "SODTweenStarted", "onupdate", "SODTweenUpdate", "oncomplete", "SODTweenComplete", "onCompleteTarget", gameObject, "onStartTarget", gameObject, "onUpdateTarget", gameObject)); } float PulseTimer = float.MaxValue; public void onEventTween() { PulseTimer = 0; accumLerp = 0; Quaternion q0, q1; q0 = goMyPivot.transform.rotation;// Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); m_toLoc = (m_toLoc + 900) % 2500; q1 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); qEnd = q1 * Quaternion.Inverse(q0) * goMyPivot.transform.rotation; qStart = goMyPivot.transform.rotation; } void SODTweenStarted() { } Vector3 vLast; void SODTweenUpdate() { //Update Slerp Position float sTime = goTweenFollower.transform.position.x; goMyPivot.transform.rotation = Quaternion.LerpUnclamped(qStart, qEnd, sTime); Vector3 p = transform.position; paint(p); // Calc Tangent to movement Vector3 vDir = transform.position - vLast; vDir.Normalize(); Vector3 vNorm = Vector3.Cross(vDir, transform.forward); vNorm.Normalize(); PulseTimer += Time.deltaTime; float amp; float mag = 0.4f; amp = mag*CubicEaseOut(PulseTimer, 1f, -1f, 0.3f); goPrintHead.GetComponent<ParticleSystem>().startSize = amp+0.1f; //goPrintHead.transform.rotation = goMyPivot.transform.rotation; //goPrintHead.transform.position = transform.position - amp * vNorm; vLast = transform.position; } /// float t, float b, float c, float d /// </summary> /// <param name="current">how long into the ease are we</param> /// <param name="initialValue">starting value if current were 0</param> /// <param name="totalChange">total change in the value (not the end value, but the end - start)</param> /// <param name="duration">the total amount of time (when current == duration, the returned value will == initial + totalChange)</param> /// <returns></returns> public static float CubicEaseOut(float t, float b, float c, float d) { if (t < d) { return c * ((t = t / d - 1) * t * t + 1) + b; } else { return b + c; } } public static float CubicEaseIn(float t, float b, float c, float d) { if (t < d) { return c * (t /= d) * t * t + b; } else { return b + c; } } void SODTweenComplete() { //Quaternion q0, q1; //goMyPivot.transform.rotation = Quaternion.LerpUnclamped(qStart, qEnd, 1.0f); //q0 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); //m_toLoc = (m_toLoc + 900)%2500; //if (m_toLoc > 2000) m_toLoc = m_startLoc; //q1 = Quaternion.LookRotation(AMD_Base.funcVerts[m_toLoc].vPos.normalized); //qEnd = q1 * Quaternion.Inverse(q0) * goMyPivot.transform.rotation; //qStart = goMyPivot.transform.rotation; //goTweenFollower.transform.position = Vector3.zero; //iTween.MoveTo(goTweenFollower, iTween.Hash("x", 1, "time", m_pathTime, "easetype", "linear", "onstart", "SODTweenStarted", "onupdate", "SODTweenUpdate", "oncomplete", "SODTweenComplete", "onCompleteTarget", gameObject, "onStartTarget", gameObject, "onUpdateTarget", gameObject)); } int CBcount = 0; //float fAccumTime = 0.0f; void fibTweenUpdate(string textToDisplay) { float sTime = goTweenFollower.transform.position.x; goMyPivot.transform.rotation = Quaternion.LerpUnclamped(qStart, qEnd, sTime); CBcount++; } public void paint(Vector3 p) { Vector3 vCurrLoc = p; Quaternion LocalRotation = myPaintRotation; //myPaintRotation * Quaternion.Inverse(argos_Sphere.transform.rotation); vCurrLoc = LocalRotation* vCurrLoc; if (vCurrLoc != vLastLoc) { Vector3 len = vCurrLoc - vLastLoc; if (len.magnitude > minPaintLen) { Vector3 vFwd = p.normalized;//userMovement.cursorTran.screenProjTrans.forward; Vector3 vFwdRtd = LocalRotation * vFwd; Vector3 vUp = Vector3.Cross(vFwdRtd, len); vUp.Normalize(); v1curr = vCurrLoc + (lineWidth / 2f) * vUp; v2curr = vCurrLoc - (lineWidth / 2f) * vUp; //sWrite.WriteLine("len =" + v2last.ToString("F3") + " vFwdRtd =" + vFwdRtd.ToString("F3") + " vUp =" + vUp.ToString("F3") + " vLastLoc =" + vLastLoc.ToString("F3") + " vCurrLoc =" + vCurrLoc.ToString("F3")); if (++iStartPaint > 2) //don't write 2 times though { brushInst.Paint(v2last, v1last, v1curr, v2curr, selColor, 3.0f);//TIME FOR TESTING //sWrite.WriteLine("v0 =" + v2last.ToString("F3") + "v1 =" + v1last.ToString("F3") + "v2 =" + v1curr.ToString("F3") + "v3 =" + v2curr.ToString("F3")); } vLastLoc = vCurrLoc; v1last = v1curr; v2last = v2curr; //if (currPE_Idx > -1 && paintList[currPE_Idx].Mdraft != null) // InfoLineTxt.text = " Pn = " + (paintList[currPE_Idx].Mdraft.triangles.Count / 2).ToString(); } } } }