Example #1
0
        /// <summary>
        /// Based on current state, either deactivates this UnityCurve, activates this UnityCurve, or switches to a curve while already active.
        /// </summary>
        /// <param name="curveToChangeTo">The desired curve to change to. If null, deactivates this UnityCurve.</param>
        public void ChangeToCurve(Curve curveToChangeTo)
        {
            // Deactivate this UnityCurve once we hit start index
            if (curveToChangeTo == null && Active)
            {
                Deactivate();
            }

            // Check if this UnityCurve has not been activated yet
            if (curveToChangeTo != null && !Active)
            {
                Activate(curveToChangeTo);
            }

            // Normal case: deactivate current curve and activate next
            if (curveToChangeTo != null && Active)
            {
                PreviousCurveValue = Value;
                CurrentCurve.Deactivate();
                CurrentCurve = curveToChangeTo;
                CurrentCurve.Activate();
                CurrentCurveValue = 0;
                CurrentCurveTime  = 0;
            }
        }
Example #2
0
    //met à jour les positions des sliders sur l'interface
    private void UpdateSliders()
    {
        //Nettoyage des sliders
        foreach (BoxSlider slider in sliders)
        {
            Destroy(slider.gameObject);
        }
        sliders = new List <BoxSlider>();

        List <Vector2> keys = CurrentCurve.GetKeys();

        foreach (Vector2 key in keys)
        {
            GameObject   sliderObj = Instantiate(sliderPref, transform);
            BoxSliderKey boxSlider = sliderObj.GetComponent <BoxSliderKey>();
            sliderObj.SetActive(EditCurve);

            Vector2 keyScreen = CurveToScreen(key);
            boxSlider.ValueX        = keyScreen.x;
            boxSlider.ValueY        = keyScreen.y;
            boxSlider.editableCurve = this;

            sliders.Add(boxSlider);
        }
    }
Example #3
0
    //récupère la position de la souris pour déterminer si il faut afficher la nouvelle clé, et la créer
    private void ProcessMouseInput()
    {
        Vector2 mouseScreenPos = Input.mousePosition;
        Vector2 mouseLocalPos  = Rect.PointToNormalized(rect.rect, rect.InverseTransformPoint(mouseScreenPos));

        //la position du marker, dans le repère local
        Vector2 keyMarkerPos = new Vector2(
            mouseLocalPos.x,
            CurveToScreenY(CurrentCurve.Get(mouseLocalPos.x * TimeSpan))
            );

        bool canAddKey = Mathf.Abs(mouseLocalPos.y - keyMarkerPos.y) < distToAddKey;

        foreach (Vector2 key in CurrentCurve.GetKeys())
        {
            // canAddKey = canAddKey && (mouseLocalPos - CurveToScreen(key) ).sqrMagnitude > distToAddKey * distToAddKey;
            canAddKey = canAddKey && Mathf.Abs(mouseLocalPos.x - CurveToScreen(key).x) > distToAddKey; //???
        }
        AddKeyMarker.SetActive(canAddKey);
        if (canAddKey)
        {
            AddKeyMarker.transform.localPosition = Rect.NormalizedToPoint(rect.rect, keyMarkerPos);
            if (Input.GetMouseButtonDown(0))
            {
                AddKey(ScreenToCurve(keyMarkerPos));
            }
        }
    }
Example #4
0
 /// <summary>
 /// Dectivates this UnityCurve and ends curve modulation.
 /// Resets all variables.
 /// </summary>
 public void Deactivate()
 {
     CurrentCurve.Deactivate();
     CurrentCurve       = null;
     CurrentCurveTime   = 0;
     TotalCurveTime     = 0;
     PreviousCurveValue = defaultValue;
     CurrentCurveValue  = 0;
     deactivationEvent.Invoke();
 }
Example #5
0
    //supprime un slider
    public void RemoveSlider(BoxSlider slider)
    {
        int id = sliders.IndexOf(slider);

        sliders.Remove(slider);
        Destroy(slider.gameObject);

        CurrentCurve.RemoveKeyAt(id);
        UpdateLineRender();
    }
Example #6
0
    //met à jour l'affichage de la courbe
    private void UpdateLineRender()
    {
        if (rend == null)
        {
            return;
        }

        for (int i = 0; i < rend.Points.Length; i++)
        {
            rend.Points[i].y = CurveToScreenY(CurrentCurve.Get(rend.Points[i].x * TimeSpan));
        }
        rend.SetAllDirty();
    }
Example #7
0
    //applique les modifs depuis le slider vers la courbe, et met a jour l'affichage
    public void UpdateCurveKey(BoxSlider changedSlider)
    {
        //tri de la liste des sliders, et conservation des indice avant et après le tri
        int oldId = sliders.IndexOf(changedSlider);

        sliders.Sort(CompSliders);
        int newId = sliders.IndexOf(changedSlider);

        if (oldId > newId)
        {
            int tmp = oldId;
            oldId = newId;
            newId = tmp;
        }
        for (int id = oldId; id <= newId; id++)
        {
            BoxSliderKey currentSlider = sliders[id].GetComponent <BoxSliderKey>();
            Vector2      keyPos        = ScreenToCurve(new Vector2(currentSlider.ValueX, currentSlider.ValueY));
            CurrentCurve.ChangeKeyById(id, keyPos);
        }
        UpdateLineRender();
    }
Example #8
0
 //ajoute une clé a la courbe et met a jour l'affichage
 public void AddKey(Vector2 key)
 {
     CurrentCurve.AddKey(key);
     UpdateSliders();
     UpdateLineRender();
 }