示例#1
0
 public void SliceToRemove(PiUI.PiData sliceToRemove)
 {
     if (!slicesToRemove.Contains(sliceToRemove))
     {
         slicesToRemove.Add(sliceToRemove);
     }
 }
示例#2
0
    private void SpawnNewPoi(PiUI.PiData poiNoteData, bool isRandom)
    {
        if (!isRandom)
        {
            if (!isPoiMenuOpen)
            {
                return;
            }

            poiNoteMenu.CloseMenu();
            isPoiMenuOpen = false;
        }
        else
        {
            if (Random.value > 0.5f)
            {
                nextPoiSize = PoiSizeType.BigPoi;
            }
            else
            {
                nextPoiSize = PoiSizeType.SmolPoi;
            }

            float personalityChance = Random.value;
            if (Random.value < 0.3f)
            {
                nextPoiPersonality = PoiPersonalityType.ShiPoi;
            }
            else if (Random.value < 0.6f)
            {
                nextPoiPersonality = PoiPersonalityType.NormiPoi;
            }
            else
            {
                nextPoiPersonality = PoiPersonalityType.FabPoi;
            }

            int randomNoteIndex = (int)Random.Range(0, poiNoteMenu.piData.Length - 0.5f);
            poiNoteData = poiNoteMenu.piData[randomNoteIndex];
        }
        nextPoiNote  = poiNoteData.order;
        nextPoiColor = poiNoteData.highlightedColor;

        poofEffectParticle.Play();
        spawnPoint.GetComponent <AudioSource>().Play();
        GameObject newPoi = Instantiate(poiPrefab, spawnPoint.position, Quaternion.identity);

        newPoi.GetComponent <PoiController>().SetPoiProperties(nextPoiSize, nextPoiNote, nextPoiColor, nextPoiPersonality);
    }
    public void SetData(PiUI.PiData piData, float iR, float oR, PiUI creator)
    {
        parent = creator;
        if (!thisImg || !sliceIcon || !sliceLabel)
        {
            thisImg    = GetComponent <Image>( );
            sliceIcon  = transform.GetChild(0).GetComponent <Image>( );
            sliceLabel = GetComponentInChildren <Text>( );
        }
        innerRadius    = iR;
        outerRadius    = oR;
        normalColor    = piData.nonHighlightedColor;
        highlightColor = piData.highlightedColor;
        disabledColor  = piData.disabledColor;
        clickEvent     = piData.onSlicePressed;
        //new
        id          = piData.id;
        onClickMenu = piData.onClickMenu;

        if (parent.fade)
        {
            thisImg.color = Color.clear;
        }
        maxAngle = transform.rotation.eulerAngles.z;
        minAngle = transform.rotation.eulerAngles.z - (thisImg.fillAmount * 360);
        if (transform.rotation.eulerAngles.z == 359f || transform.rotation.eulerAngles.z == 0)
        {
            transform.rotation = Quaternion.identity;
            maxAngle           = 359f;
            minAngle           = 359f - (thisImg.fillAmount * 360);
        }
        sliceIcon.rectTransform.sizeDelta = new Vector2(piData.iconSize, piData.iconSize);

        sliceLabel.text               = piData.sliceLabel;
        sliceIcon.sprite              = piData.icon;
        sliceIcon.transform.position  = Center( );
        sliceLabel.transform.position = Center( ) - new Vector2(0, sliceIcon.rectTransform.sizeDelta.y + parent.textVerticalOffset) * parent.scaleModifier * transform.localScale.magnitude;
        isInteractable = piData.isInteractable;
        onHoverEvents  = piData.hoverFunctions;
        if (onHoverEvents)
        {
            onHoverEnter = piData.onHoverEnter;
            onHoverExit  = piData.onHoverExit;
        }
    }
示例#4
0
    private void EditPoiMenus()
    {
        // Poi Personality Menu
        poiPersonalityMenu.openTransition  = PiUI.TransitionType.ScaleAndFan;
        poiPersonalityMenu.closeTransition = PiUI.TransitionType.ScaleAndFan;
        foreach (PiUI.PiData poiPersonalityData in poiPersonalityMenu.piData)
        {
            poiPersonalityData.onSlicePressed.AddListener(delegate { ShowPoiSizeMenu(poiPersonalityData); });
        }

        // Poi Size Menu
        poiSizeMenu.openTransition  = PiUI.TransitionType.ScaleAndFan;
        poiSizeMenu.closeTransition = PiUI.TransitionType.ScaleAndFan;
        foreach (PiUI.PiData poiSizeData in poiSizeMenu.piData)
        {
            poiSizeData.onSlicePressed.AddListener(delegate { ShowPoiNoteMenu(poiSizeData); });
        }

        // Poi Note Menu
        poiNoteMenu.openTransition  = PiUI.TransitionType.ScaleAndFan;
        poiNoteMenu.closeTransition = PiUI.TransitionType.ScaleAndFan;
        foreach (PiUI.PiData poiNoteData in poiNoteMenu.piData)
        {
            poiNoteData.onSlicePressed.AddListener(delegate { SpawnNewPoi(poiNoteData, false); });
        }

        // Edit colors
        poiNoteMenu.syncColors = false;
        float H          = 0f;
        float S          = 0.8f;
        float V          = 0.7f;
        float HIncrement = (float)1 / poiNoteMenu.piData.Length;

        // Color each pie based on a rainbow scheme
        for (int i = 0; i < poiNoteMenu.piData.Length; i++)
        {
            PiUI.PiData data = poiNoteMenu.piData[i];
            poiNoteMenu.piData[i].nonHighlightedColor = Color.HSVToRGB(H % 1, S, V);
            poiNoteMenu.piData[i].highlightedColor    = Color.HSVToRGB(H % 1, 1f, 1f);
            H += HIncrement;
        }
        poiNoteMenu.UpdatePiUI();
    }
示例#5
0
    private void ShowPoiNoteMenu(PiUI.PiData poiSizeData)
    {
        if (!Input.GetMouseButtonDown(0))
        {
            return;
        }
        switch (poiSizeData.sliceLabel)
        {
        case ("Big Poi"):
            nextPoiSize = PoiSizeType.BigPoi;
            break;

        case ("Smol Poi"):
            nextPoiSize = PoiSizeType.SmolPoi;
            break;
        }
        poiSizeMenu.CloseMenu();
        poiNoteMenu.OpenMenu(new Vector2(Screen.width / 2f, Screen.height / 2f));
    }
示例#6
0
    private void ShowPoiSizeMenu(PiUI.PiData poiPersonalityData)
    {
        if (!Input.GetMouseButtonDown(0))
        {
            return;
        }
        switch (poiPersonalityData.sliceLabel)
        {
        case ("Shi Poi"):
            nextPoiPersonality = PoiPersonalityType.ShiPoi;
            break;

        case ("Normi Poi"):
            nextPoiPersonality = PoiPersonalityType.NormiPoi;
            break;

        case ("Fab Poi"):
            nextPoiPersonality = PoiPersonalityType.FabPoi;
            break;
        }
        poiPersonalityMenu.CloseMenu();
        poiSizeMenu.OpenMenu(new Vector2(Screen.width / 2f, Screen.height / 2f));
    }
示例#7
0
    public override void OnInspectorGUI()
    {
        if (lastAngles == null)
        {
            lastAngles = new float[myTarget.piData.Length];
        }
        if (GUILayout.Button("Change PiCut State"))
        {
            myTarget.piCut.gameObject.SetActive(!myTarget.piCut.gameObject.activeInHierarchy);
        }
        if (GUILayout.Button("Sync Colors"))
        {
            myTarget.SyncColor( );
        }
        if (!myTarget.dynamicallyScaleToResolution)
        {
            if (!itemsNotToDraw.Contains("defaultResolution"))
            {
                itemsNotToDraw.Add("defaultResolution");
            }
        }
        else
        {
            itemsNotToDraw.Remove("defaultResolution");
        }
        if (!myTarget.outline)
        {
            if (!itemsNotToDraw.Contains("outlineColor"))
            {
                itemsNotToDraw.Add("outlineColor");
            }
        }
        else
        {
            itemsNotToDraw.Remove("outlineColor");
        }
        if (!myTarget.syncColors)
        {
            if (!itemsNotToDraw.Contains("syncNormal"))
            {
                itemsNotToDraw.Add("syncNormal");
            }
            if (!itemsNotToDraw.Contains("syncSelected"))
            {
                itemsNotToDraw.Add("syncSelected");
            }
            if (!itemsNotToDraw.Contains("syncDisabled"))
            {
                itemsNotToDraw.Add("syncDisabled");
            }
        }
        else
        {
            itemsNotToDraw.Remove("syncNormal");
            itemsNotToDraw.Remove("syncSelected");
            itemsNotToDraw.Remove("syncDisabled");
        }
        serializedObject.Update( );
        if (itemsNotToDraw.Count == 0)
        {
            EditorUtility.SetDirty(myTarget);
        }
        else
        {
            DrawPropertiesExcluding(serializedObject, itemsNotToDraw.ToArray( ));
            EditorUtility.SetDirty(myTarget);
        }
        serializedObject.ApplyModifiedProperties( );
        serializedObject.Update( );
        myTarget.piData = myTarget.piData.ToList( ).OrderBy(x => x.order).ToArray( );
        var sprop = serializedObject.FindProperty("piData");

        for (var i = 0; i < myTarget.piData.Length; i++)
        {
            if (!slicesToRemove.Contains(myTarget.piData[i]))
            {
                myTarget.piData[i].OnInspectorGUI(sprop.GetArrayElementAtIndex(i), myTarget, addSlice, removeSlice, angleUpdate);
            }
            if (i < myTarget.piData.Length - 1)
            {
                GUILayout.Space(10);
            }
        }
        if (myTarget.piData.Length < 1)
        {
            myTarget.piData = new PiUI.PiData[1];
        }
        myTarget.sliceCount = myTarget.piData.Length;
        if (slicesToAdd > 0)
        {
            Undo.RecordObject(myTarget, "Add Slice");
            PiUI.PiData[] tempArray = new PiUI.PiData[myTarget.piData.Length + slicesToAdd];
            for (int i = myTarget.piData.Length; i < tempArray.Length; i++)
            {
                tempArray[i] = new PiUI.PiData( );
                tempArray[i].SetValues(myTarget.piData[myTarget.piData.Length - 1]);
                tempArray[i].order = i;
            }
            for (int j = 0; j < myTarget.piData.Length; j++)
            {
                tempArray[j] = myTarget.piData[j];
            }
            slicesToAdd     = 0;
            myTarget.piData = tempArray;
        }
        else if (slicesToRemove.Count > 0 && myTarget.piData.Length > 1)
        {
            Undo.RecordObject(myTarget, "Removed Slice");
            PiUI.PiData[] tempArray   = new PiUI.PiData[myTarget.piData.Length - slicesToRemove.Count];
            int           addedSlices = 0;
            for (int i = 0; i < myTarget.piData.Length; i++)
            {
                if (!slicesToRemove.Contains(myTarget.piData[i]))
                {
                    tempArray[addedSlices]       = myTarget.piData[i];
                    tempArray[addedSlices].order = addedSlices;
                    addedSlices++;
                }
            }
            myTarget.piData = tempArray;
            slicesToRemove  = new List <PiUI.PiData>( );
        }
        serializedObject.ApplyModifiedProperties( );
        if (SumOfAngles() > 360)
        {
            for (int i = 0; i < myTarget.piData.Length; i++)
            {
                AngleUpdate(i);
            }
        }
        if (SumOfAngles() < 360)
        {
            myTarget.piData[myTarget.piData.Length - 1].angle = 360 - SumOfAngles( );
        }

        /*
         * if (myTarget.piData.Length != myTarget.sliceCount)
         * {
         *  if (myTarget.piData.Length < myTarget.sliceCount)
         *  {
         *      PiUI.PiData[] temp = new PiUI.PiData[myTarget.sliceCount];
         *      for (int j = 0; j < myTarget.piData.Length; ++)
         *      {
         *          PiUI.PiData instance = myTarget.piData[i];
         *          temp[i] = instance;
         *      }
         *      PiUI.PiData duplicateValue = myTarget.piData[myTarget.piData.Length - 1];
         *      for (int j = myTarget.piData.Length - 1; j < myTarget.sliceCount; j++)
         *      {
         *          PiUI.PiData instance = new PiUI.PiData( );
         *          if (duplicateValue != null)
         *              instance.SetValues(duplicateValue);
         *          temp[j] = instance;
         *      }
         *      myTarget.piData = temp;
         *  }
         *  else if (myTarget.piData.Length > myTarget.sliceCount)
         *  {
         *      PiUI.PiData[] temp = new PiUI.PiData[myTarget.sliceCount];
         *      for (int i = 0; i < myTarget.sliceCount; i++)
         *      {
         *          PiUI.PiData instance = myTarget.piData[i];
         *          temp[i] = instance;
         *      }
         *      myTarget.piData = temp;
         *  }
         *  lastAngles = new float[myTarget.piData.Length];
         * }
         * float sumOfAngles = 0;
         * for (int i = 0; i < myTarget.piData.Length; i++)
         * {
         *  if (myTarget.piData[i].angle == 0 || myTarget.piData[i].angle < 20)
         *  {
         *      myTarget.piData[i].angle = 360 / myTarget.sliceCount;
         *  }
         *  sumOfAngles += myTarget.piData[i].angle;
         * //  lastAngles[i] = myTarget.piData[i].angle;
         * }
         */
    }