void myPieSliceHoverFunction(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice, bool hover) { //Debug.Log("Pie Slice Hover: " + pieGraph.sliceLabels[aSlice.sliceIndex]); if (hover) { Vector3 newPos = graph.getPositionFromExplode(aSlice, 30); WMG_Anim.animPosition(aSlice.gameObject, 1, DG.Tweening.Ease.OutQuad, newPos); } else { Vector3 newPos = graph.getPositionFromExplode(aSlice, 0); WMG_Anim.animPosition(aSlice.gameObject, 1, DG.Tweening.Ease.OutQuad, newPos); } }
void InteractivityChanged() { if (interactivityEnabled) { explodeSymmetrical = false; } for (int i = 0; i < slices.Count; i++) { WMG_Pie_Graph_Slice pieSlice = slices[i].GetComponent <WMG_Pie_Graph_Slice>(); WMG_Raycatcher pieSliceRaycatcher = pieSlice.objectToColor.GetComponent <WMG_Raycatcher>(); if (pieSliceRaycatcher != null && !interactivityEnabled) { Destroy(pieSliceRaycatcher); } if (pieSliceRaycatcher == null && interactivityEnabled) { pieSlice.objectToColor.AddComponent <WMG_Raycatcher>(); } if (interactivityEnabled) { setAsNotInteractible(pieSlice.objectToLabel); } } Canvas canvas = null; getFirstCanvasOnSelfOrParent(this.transform, ref canvas); if (!canvas) { Debug.LogError("No Canvas found for Pie Graph"); return; } WMG_Raycaster canvasRaycaster = canvas.GetComponent <WMG_Raycaster>(); if (canvasRaycaster == null) { if (interactivityEnabled) { canvas.gameObject.AddComponent <WMG_Raycaster>(); } } else { if (!interactivityEnabled) { DestroyImmediate(canvasRaycaster); addRaycaster(canvas.gameObject); } } }
void myPieSliceHoverFunction(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice, bool hover) { //GlobalVariableBackground.Instance.conManager.WriteLog("Pie Slice Hover: " + pieGraph.sliceLabels[aSlice.sliceIndex]); if (hover) { Vector3 newPos = graph.getPositionFromExplode(aSlice, 30); WMG_Anim.animPosition(aSlice.gameObject, 1, DG.Tweening.Ease.OutQuad, newPos); } else { Vector3 newPos = graph.getPositionFromExplode(aSlice, 0); WMG_Anim.animPosition(aSlice.gameObject, 1, DG.Tweening.Ease.OutQuad, newPos); } }
void CreateOrDeleteSlicesBasedOnValues() { // Create pie slices based on sliceValues data for (int i = 0; i < numSlices; i++) { if (sliceLabels.Count <= i) { sliceLabels.Add(""); } if (sliceColors.Count <= i) { sliceColors.Add(Color.white); } if (slices.Count <= i) { GameObject curObj = CreateNode(nodePrefab, slicesParent); slices.Add(curObj); WMG_Pie_Graph_Slice pieSlice = curObj.GetComponent <WMG_Pie_Graph_Slice>(); setTexture(pieSlice.objectToColor, pieSprite); setTexture(pieSlice.objectToMask, pieSprite); changeExplodeSymmetrical(pieSlice); } if (legend.legendEntries.Count <= i) { legend.createLegendEntry(legendEntryPrefab); } } for (int i = slices.Count - 1; i >= 0; i--) { if (slices[i] != null && i >= numSlices) { WMG_Pie_Graph_Slice theSlice = slices[i].GetComponent <WMG_Pie_Graph_Slice>(); DeleteNode(theSlice); slices.RemoveAt(i); } } // If there are more sliceLegendEntries or slices than sliceValues data, delete the extras for (int i = legend.legendEntries.Count - 1; i >= 0; i--) { if (legend.legendEntries[i] != null && i >= numSlices) { legend.deleteLegendEntry(i); } } }
void initDoughnut() { if (doughnutHasInit) { return; } doughnutHasInit = true; GameObject temp = GameObject.Instantiate(nodePrefab) as GameObject; Texture2D origTex = getTexture(temp.GetComponent <WMG_Pie_Graph_Slice>().objectToColor); colors = origTex.GetPixels(); origColors = origTex.GetPixels(); pieSprite = WMG_Util.createSprite(origTex); Destroy(temp); for (int i = 0; i < slices.Count; i++) { WMG_Pie_Graph_Slice pieSlice = slices[i].GetComponent <WMG_Pie_Graph_Slice>(); setTexture(pieSlice.objectToColor, pieSprite); setTexture(pieSlice.objectToMask, pieSprite); } }
void myPieSliceHoverFunction(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice, bool hover) { Debug.Log("Pie Slice Hover: " + pieGraph.sliceLabels[aSlice.sliceIndex]); if (hover) { Vector3 newPos = graph.getPositionFromExplode(aSlice, 15); graph.WMG_Pie_Slice_MouseEnter -= myPieSliceHoverFunction; WMG_Anim.animPositionCallbackC(aSlice.gameObject, 1, DG.Tweening.Ease.OutQuad, newPos, () => { graph.WMG_Pie_Slice_MouseEnter += myPieSliceHoverFunction; }); } else { Vector3 newPos = graph.getPositionFromExplode(aSlice, 0); graph.WMG_Pie_Slice_MouseEnter -= myPieSliceHoverFunction; WMG_Anim.animPositionCallbackC(aSlice.gameObject, 1, DG.Tweening.Ease.OutQuad, newPos, () => { graph.WMG_Pie_Slice_MouseEnter += myPieSliceHoverFunction; }); } }
void myPieSliceClickFunction(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice) { //Debug.Log("Pie Slice Clicked: " + pieGraph.sliceLabels[aSlice.sliceIndex]); }
void myPieSliceClickFunction(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice) { //GlobalVariableBackground.Instance.conManager.WriteLog("Pie Slice Clicked: " + pieGraph.sliceLabels[aSlice.sliceIndex]); }
void OnEnable() { slice = (WMG_Pie_Graph_Slice)target; }
public Vector3 getPositionFromExplode(WMG_Pie_Graph_Slice slice, float amt) { float angle = Mathf.Deg2Rad * (-slice.slicePercentPosition + 90); return(new Vector3(amt * Mathf.Cos(angle), amt * Mathf.Sin(angle), 0)); }
void myPieSliceClickFunction(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice, UnityEngine.EventSystems.PointerEventData pointerEventData) { //Debug.Log("Pie Slice Clicked: " + pieGraph.sliceLabels[aSlice.sliceIndex]); }
public Vector3 getPositionFromExplode(WMG_Pie_Graph_Slice slice, float amt) { float angle = Mathf.Deg2Rad * (-slice.slicePercentPosition + 90); return new Vector3(amt * Mathf.Cos(angle), amt * Mathf.Sin(angle), 0); }
void SliceClickEvent(WMG_Pie_Graph pieGraph, WMG_Pie_Graph_Slice aSlice) { Debug.Log("== : " + aSlice.name); WMG_Anim.animScale(aSlice.gameObject, 0.5f, Ease.Linear, Vector3.one * 0.8f, 0); }
void changeExplodeSymmetrical(WMG_Pie_Graph_Slice pieSlice) { SetActive(pieSlice.objectToMask, explodeSymmetrical); if (explodeSymmetrical) { changeSpriteParent(pieSlice.objectToColor, pieSlice.objectToMask); } else { changeSpriteParent(pieSlice.objectToColor, pieSlice.gameObject); bringSpriteToFront(pieSlice.objectToLabel); } }
void UpdateVisuals(bool noAnim) { // Update internal bookkeeping variables UpdateData(); // Creates and deletes slices and slice legend objects based on the slice values CreateOrDeleteSlicesBasedOnValues(); if (totalVal == 0 && numSlices > 0) { return; // all values are 0, or mixed negative and positive values } // Update explode symmetrical for (int i = 0; i < numSlices; i++) { WMG_Pie_Graph_Slice pieSlice = slices[i].GetComponent <WMG_Pie_Graph_Slice>(); SetActive(pieSlice.objectToMask, explodeSymmetrical); if (explodeSymmetrical) { changeSpriteParent(pieSlice.objectToColor, pieSlice.objectToMask); } else { changeSpriteParent(pieSlice.objectToColor, pieSlice.gameObject); bringSpriteToFront(pieSlice.objectToLabel); } } int thePieSize = Mathf.RoundToInt(pieSize); updateBG(thePieSize); if (animationDuration == 0 && sortBy != sortMethod.None) { sortData(); } float curTotalRot = 0; if (!noAnim) { animSortSwap = false; // Needed because if sortAnimationDuration = 0, nothing sets animSortSwap to false } for (int i = 0; i < numSlices; i++) { // Update Pie Slices float newAngle = -1 * curTotalRot; if (newAngle < 0) { newAngle += 360; } WMG_Pie_Graph_Slice pieSlice = slices[i].GetComponent <WMG_Pie_Graph_Slice>(); if (sliceLabelType != WMG_Enums.labelTypes.None && !activeInHierarchy(pieSlice.objectToLabel)) { SetActive(pieSlice.objectToLabel, true); } if (sliceLabelType == WMG_Enums.labelTypes.None && activeInHierarchy(pieSlice.objectToLabel)) { SetActive(pieSlice.objectToLabel, false); } if (!explodeSymmetrical) { changeSpriteSize(pieSlice.objectToColor, thePieSize, thePieSize); } else { changeSpriteSize(pieSlice.objectToColor, thePieSize, thePieSize); changeSpriteSize(pieSlice.objectToMask, thePieSize + Mathf.RoundToInt(explodeLength * 4), thePieSize + Mathf.RoundToInt(explodeLength * 4)); } // Set Slice Data and maybe Other Slice Data Color sliceColor = sliceColors[i]; string sliceLabel = sliceLabels[i]; float sliceValue = sliceValues[i]; if (isOtherSlice && i == numSlices - 1) { sliceColor = includeOthersColor; sliceLabel = includeOthersLabel; sliceValue = otherSliceValue; } if (!LabelToSliceMap.ContainsKey(sliceLabel)) { LabelToSliceMap.Add(sliceLabel, pieSlice); } // Hide if 0 if (sliceValue == 0) { SetActive(pieSlice.objectToLabel, false); } float slicePercent = sliceValue / totalVal; pieSlice.slicePercent = slicePercent * 360; float afterExplodeAngle = newAngle * -1 + 0.5f * slicePercent * 360; float sliceLabelRadius = sliceLabelExplodeLength + thePieSize / 2; float sin = Mathf.Sin(afterExplodeAngle * Mathf.Deg2Rad); float cos = Mathf.Cos(afterExplodeAngle * Mathf.Deg2Rad); if (!noAnim && animationDuration > 0) { isAnimating = true; WMG_Anim.animFill(pieSlice.objectToColor, animationDuration, Ease.Linear, slicePercent); WMG_Anim.animPosition(pieSlice.objectToLabel, animationDuration, Ease.Linear, new Vector3(sliceLabelRadius * sin, sliceLabelRadius * cos)); int newI = i; WMG_Anim.animPositionCallbackC(slices[i], animationDuration, Ease.Linear, new Vector3(explodeLength * sin, explodeLength * cos), () => shrinkSlices(newI)); if (!explodeSymmetrical) { WMG_Anim.animRotation(pieSlice.objectToColor, animationDuration, Ease.Linear, new Vector3(0, 0, newAngle), false); WMG_Anim.animPosition(pieSlice.objectToColor, animationDuration, Ease.Linear, Vector3.zero); } else { WMG_Anim.animRotation(pieSlice.objectToColor, animationDuration, Ease.Linear, Vector3.zero, false); Vector2 newPos = new Vector2(-explodeLength * sin, -explodeLength * cos); float sin2 = Mathf.Sin(newAngle * Mathf.Deg2Rad); float cos2 = Mathf.Cos(newAngle * Mathf.Deg2Rad); WMG_Anim.animPosition(pieSlice.objectToColor, animationDuration, Ease.Linear, new Vector3(cos2 * newPos.x + sin2 * newPos.y, cos2 * newPos.y - sin2 * newPos.x)); // Mask WMG_Anim.animRotation(pieSlice.objectToMask, animationDuration, Ease.Linear, new Vector3(0, 0, newAngle), false); WMG_Anim.animFill(pieSlice.objectToMask, animationDuration, Ease.Linear, slicePercent); } } else { changeSpriteFill(pieSlice.objectToColor, slicePercent); pieSlice.objectToLabel.transform.localPosition = new Vector3(sliceLabelRadius * sin, sliceLabelRadius * cos); slices[i].transform.localPosition = new Vector3(explodeLength * sin, explodeLength * cos); if (!explodeSymmetrical) { pieSlice.objectToColor.transform.localEulerAngles = new Vector3(0, 0, newAngle); pieSlice.objectToColor.transform.localPosition = Vector3.zero; } else { pieSlice.objectToColor.transform.localEulerAngles = Vector3.zero; Vector2 newPos = new Vector2(-explodeLength * sin, -explodeLength * cos); float sin2 = Mathf.Sin(newAngle * Mathf.Deg2Rad); float cos2 = Mathf.Cos(newAngle * Mathf.Deg2Rad); pieSlice.objectToColor.transform.localPosition = new Vector3(cos2 * newPos.x + sin2 * newPos.y, cos2 * newPos.y - sin2 * newPos.x); // Mask pieSlice.objectToMask.transform.localEulerAngles = new Vector3(0, 0, newAngle); changeSpriteFill(pieSlice.objectToMask, slicePercent); } } // Update slice color changeSpriteColor(pieSlice.objectToColor, sliceColor); changeSpriteColor(pieSlice.objectToMask, sliceColor); // Update slice labels changeLabelText(pieSlice.objectToLabel, getLabelText(sliceLabel, sliceLabelType, sliceValue, slicePercent, numberDecimalsInPercents)); changeLabelFontSize(pieSlice.objectToLabel, sliceLabelFontSize); changeSpriteColor(pieSlice.objectToLabel, sliceLabelColor); // Update Gameobject names slices[i].name = sliceLabel; legend.legendEntries[i].name = sliceLabel; curTotalRot += slicePercent * 360; pieSlice.slicePercentPosition = curTotalRot - pieSlice.slicePercent / 2; // Update legend WMG_Legend_Entry entry = legend.legendEntries[i]; changeLabelText(entry.label, getLabelText(sliceLabel, legend.labelType, sliceValue, slicePercent, legend.numDecimals)); changeSpriteColor(entry.swatchNode, sliceColor); // Hide legend if 0 if (hideZeroValueLegendEntry) { if (sliceValue == 0) { SetActive(entry.gameObject, false); } else { SetActive(entry.gameObject, true); } } else { SetActive(entry.gameObject, true); } } legend.LegendChanged(); updateAutoCenter(); if (!setOrig) { setOrig = true; setOriginalPropertyValues(); } }
void UpdateVisuals(bool noAnim) { // Update internal bookkeeping variables UpdateData(); // Creates and deletes slices and slice legend objects based on the slice values CreateOrDeleteSlicesBasedOnValues(); // Update background changeSpriteHeight(background, Mathf.RoundToInt(pieSize + topBotPadding.x + topBotPadding.y)); changeSpriteWidth(background, Mathf.RoundToInt(pieSize + leftRightPadding.x + leftRightPadding.y)); changeSpriteSize(backgroundCircle, Mathf.RoundToInt(pieSize + bgCircleOffset), Mathf.RoundToInt(pieSize + bgCircleOffset)); Vector2 offset = getPaddingOffset(); changeSpritePositionTo(slicesParent, new Vector3(-offset.x, -offset.y)); if (animationDuration == 0 && sortBy != sortMethod.None) { sortData(); } float curTotalRot = 0; if (!noAnim) { animSortSwap = false; // Needed because if sortAnimationDuration = 0, nothing sets animSortSwap to false } for (int i = 0; i < numSlices; i++) { WMG_Legend_Entry entry = legend.legendEntries[i]; // Update Pie Slices float newAngle = -1 * curTotalRot; if (newAngle < 0) { newAngle += 360; } WMG_Pie_Graph_Slice pieSlice = slices[i].GetComponent <WMG_Pie_Graph_Slice>(); if (sliceLabelType != WMG_Enums.labelTypes.None && !activeInHierarchy(pieSlice.objectToLabel)) { SetActive(pieSlice.objectToLabel, true); } if (sliceLabelType == WMG_Enums.labelTypes.None && activeInHierarchy(pieSlice.objectToLabel)) { SetActive(pieSlice.objectToLabel, false); } if (!explodeSymmetrical) { changeSpriteSize(pieSlice.objectToColor, Mathf.RoundToInt(pieSize), Mathf.RoundToInt(pieSize)); } else { int newSize = Mathf.RoundToInt(pieSize + explodeLength * 2); changeSpriteSize(pieSlice.objectToColor, newSize, newSize); changeSpriteSize(pieSlice.objectToMask, newSize + Mathf.RoundToInt(explodeLength * 4), newSize + Mathf.RoundToInt(explodeLength * 4)); } // Set Slice Data and maybe Other Slice Data Color sliceColor = sliceColors[i]; string sliceLabel = sliceLabels[i]; float sliceValue = sliceValues[i]; if (isOtherSlice && i == numSlices - 1) { sliceColor = includeOthersColor; sliceLabel = includeOthersLabel; sliceValue = otherSliceValue; } // Hide if 0 if (sliceValue == 0) { SetActive(pieSlice.objectToLabel, false); } float slicePercent = sliceValue / totalVal; float afterExplodeAngle = newAngle * -1 + 0.5f * slicePercent * 360; float sliceLabelRadius = sliceLabelExplodeLength + pieSize / 2; float sin = Mathf.Sin(afterExplodeAngle * Mathf.Deg2Rad); float cos = Mathf.Cos(afterExplodeAngle * Mathf.Deg2Rad); if (!noAnim && animationDuration > 0) { isAnimating = true; WMG_Anim.animFill(pieSlice.objectToColor, animationDuration, Ease.Linear, slicePercent); WMG_Anim.animPosition(pieSlice.objectToLabel, animationDuration, Ease.Linear, new Vector3(sliceLabelRadius * sin, sliceLabelRadius * cos)); int newI = i; WMG_Anim.animPositionCallbackC(slices[i], animationDuration, Ease.Linear, new Vector3(explodeLength * sin, explodeLength * cos), () => shrinkSlices(newI)); if (!explodeSymmetrical) { WMG_Anim.animRotation(pieSlice.objectToColor, animationDuration, Ease.Linear, new Vector3(0, 0, newAngle), false); WMG_Anim.animPosition(pieSlice.objectToColor, animationDuration, Ease.Linear, Vector3.zero); } else { WMG_Anim.animRotation(pieSlice.objectToColor, animationDuration, Ease.Linear, Vector3.zero, false); Vector2 newPos = new Vector2(-explodeLength * sin, -explodeLength * cos); float sin2 = Mathf.Sin(newAngle * Mathf.Deg2Rad); float cos2 = Mathf.Cos(newAngle * Mathf.Deg2Rad); WMG_Anim.animPosition(pieSlice.objectToColor, animationDuration, Ease.Linear, new Vector3(cos2 * newPos.x + sin2 * newPos.y, cos2 * newPos.y - sin2 * newPos.x)); // Mask WMG_Anim.animRotation(pieSlice.objectToMask, animationDuration, Ease.Linear, new Vector3(0, 0, newAngle), false); WMG_Anim.animFill(pieSlice.objectToMask, animationDuration, Ease.Linear, slicePercent); } } else { changeSpriteFill(pieSlice.objectToColor, slicePercent); pieSlice.objectToLabel.transform.localPosition = new Vector3(sliceLabelRadius * sin, sliceLabelRadius * cos); slices[i].transform.localPosition = new Vector3(explodeLength * sin, explodeLength * cos); if (!explodeSymmetrical) { pieSlice.objectToColor.transform.localEulerAngles = new Vector3(0, 0, newAngle); pieSlice.objectToColor.transform.localPosition = Vector3.zero; } else { pieSlice.objectToColor.transform.localEulerAngles = Vector3.zero; Vector2 newPos = new Vector2(-explodeLength * sin, -explodeLength * cos); float sin2 = Mathf.Sin(newAngle * Mathf.Deg2Rad); float cos2 = Mathf.Cos(newAngle * Mathf.Deg2Rad); pieSlice.objectToColor.transform.localPosition = new Vector3(cos2 * newPos.x + sin2 * newPos.y, cos2 * newPos.y - sin2 * newPos.x); // Mask pieSlice.objectToMask.transform.localEulerAngles = new Vector3(0, 0, newAngle); changeSpriteFill(pieSlice.objectToMask, slicePercent); } } // Update slice color changeSpriteColor(pieSlice.objectToColor, sliceColor); changeSpriteColor(pieSlice.objectToMask, sliceColor); // Update slice labels changeLabelText(pieSlice.objectToLabel, getLabelText(sliceLabel, sliceLabelType, sliceValue, slicePercent, numberDecimalsInPercents)); pieSlice.objectToLabel.transform.localScale = new Vector3(sliceLabelFontSize, sliceLabelFontSize); // Update Gameobject names slices[i].name = sliceLabel; legend.legendEntries[i].name = sliceLabel; // Update legend changeLabelText(entry.label, getLabelText(sliceLabel, legend.labelType, sliceValue, slicePercent, legend.numDecimals)); changeSpriteColor(entry.swatchNode, sliceColor); // Hide legend if 0 if (sliceValue == 0) { SetActive(entry.gameObject, false); } else { SetActive(entry.gameObject, true); } curTotalRot += slicePercent * 360; } }