//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ private void UpdateShapeRectChildren() { if (!ControlChildShapes) { return; } TreeUpdater tree = GetComponent <TreeUpdater>(); for (int i = 0; i < tree.TreeChildrenThisFrame.Count; i++) { TreeUpdater child = tree.TreeChildrenThisFrame[i]; HoverShapeRect childRect = child.GetComponent <HoverShapeRect>(); if (childRect == null) { continue; } childRect.Controllers.Set(SizeXName, this); childRect.Controllers.Set(SizeYName, this); childRect.SizeX = SizeX; childRect.SizeY = SizeY; } }
/*--------------------------------------------------------------------------------------------*/ protected override void UpdateFillMesh(HoverMesh pSegmentMesh, SliderUtil.SegmentInfo pSegmentInfo, float pStartPos, float pEndPos) { HoverShapeRect meshShapeRect = pSegmentMesh.GetComponent <HoverShapeRect>(); HoverMeshRect meshRect = (HoverMeshRect)pSegmentMesh; pSegmentMesh.Controllers.Set(SettingsControllerMap.TransformLocalPosition + ".x", this); pSegmentMesh.Controllers.Set(SettingsControllerMap.TransformLocalPosition + ".y", this); pSegmentMesh.Controllers.Set(HoverMesh.DisplayModeName, this); meshRect.Controllers.Set(HoverMeshRect.UvTopName, this); meshRect.Controllers.Set(HoverMeshRect.UvBottomName, this); meshShapeRect.SizeY = pSegmentInfo.EndPosition - pSegmentInfo.StartPosition; pSegmentMesh.DisplayMode = (pSegmentInfo.IsFill ? HoverMesh.DisplayModeType.SliderFill : HoverMesh.DisplayModeType.Standard); meshRect.UvTop = (UseTrackUv ? Mathf.InverseLerp(pStartPos, pEndPos, pSegmentInfo.StartPosition) : 0); meshRect.UvBottom = (UseTrackUv ? Mathf.InverseLerp(pStartPos, pEndPos, pSegmentInfo.EndPosition) : 1); Vector3 localPos = pSegmentMesh.transform.localPosition; localPos.x = (InsetLeft - InsetRight) / 2; localPos.y = (pSegmentInfo.StartPosition + pSegmentInfo.EndPosition) / 2; pSegmentMesh.transform.localPosition = localPos; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ protected override void UpdateMesh() { HoverShapeRect shape = GetComponent <HoverShapeRect>(); float innerProg = GetDimensionProgress(InnerSizeType); float outerProg = GetDimensionProgress(OuterSizeType); float outerW; float outerH; float innerW; float innerH; if (shape.SizeX >= shape.SizeY) { outerH = shape.SizeY * outerProg; innerH = shape.SizeY * innerProg; outerW = shape.SizeX - (shape.SizeY - outerH); innerW = shape.SizeX - (shape.SizeY - innerH); } else { outerW = shape.SizeX * outerProg; innerW = shape.SizeX * innerProg; outerH = shape.SizeY - (shape.SizeX - outerW); innerH = shape.SizeY - (shape.SizeX - innerW); } MeshUtil.BuildHollowRectangleMesh(vMeshBuild, outerW, outerH, innerW, innerH); UpdateAutoUv(shape, outerW, outerH); UpdateMeshUvAndColors(); vMeshBuild.Commit(); vMeshBuild.CommitColors(); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ protected override void UpdateTickMeshes() { HoverShapeRect shapeRect = gameObject.GetComponent <HoverShapeRect>(); vTickSizeX = Mathf.Max(0, shapeRect.SizeX - InsetLeft - InsetRight) * TickRelativeSizeX; base.UpdateTickMeshes(); }
/*--------------------------------------------------------------------------------------------*/ protected override void ActivateFillMesh(HoverMesh pSegmentMesh) { HoverShapeRect meshShapeRect = pSegmentMesh.GetComponent <HoverShapeRect>(); pSegmentMesh.Controllers.Set(SettingsControllerMap.GameObjectActiveSelf, this); RendererUtil.SetActiveWithUpdate(pSegmentMesh, (meshShapeRect.SizeY > 0)); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ protected override void UpdateFillMeshes() { HoverShapeRect shapeRect = gameObject.GetComponent <HoverShapeRect>(); vMeshSizeX = Mathf.Max(0, shapeRect.SizeX - InsetLeft - InsetRight); base.UpdateFillMeshes(); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ private void UpdateTrackShape(HoverShapeRect pShapeRect, HoverRendererSlider pRendSlider) { HoverShapeRect trackShapeRect = (HoverShapeRect)pRendSlider.Track.GetShape(); trackShapeRect.Controllers.Set(HoverShapeRect.SizeXName, this); trackShapeRect.Controllers.Set(HoverShapeRect.SizeYName, this); trackShapeRect.SizeX = pShapeRect.SizeX; trackShapeRect.SizeY = pShapeRect.SizeY; }
/*--------------------------------------------------------------------------------------------*/ protected override void ResetFillMesh(HoverMesh pSegmentMesh) { HoverShapeRect meshShapeRect = pSegmentMesh.GetComponent <HoverShapeRect>(); meshShapeRect.Controllers.Set(HoverShapeRect.SizeXName, this); meshShapeRect.Controllers.Set(HoverShapeRect.SizeYName, this); meshShapeRect.SizeX = vMeshSizeX; meshShapeRect.SizeY = 0; }
/*--------------------------------------------------------------------------------------------*/ protected virtual void UpdateMeshShape(HoverMesh pMesh, float pSizeX, float pSizeY, bool pShowMesh = true) { HoverShapeRect meshShape = pMesh.GetComponent <HoverShapeRect>(); pMesh.Controllers.Set(SettingsControllerMap.GameObjectActiveSelf, this); meshShape.Controllers.Set(HoverShapeRect.SizeXName, this); meshShape.Controllers.Set(HoverShapeRect.SizeYName, this); RendererUtil.SetActiveWithUpdate(pMesh, (pShowMesh && pMesh.IsMeshVisible)); meshShape.SizeX = pSizeX; meshShape.SizeY = pSizeY; }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ public override void TreeUpdate() { HoverRendererSlider rendSlider = gameObject.GetComponent <HoverRendererSlider>(); HoverShapeRect shapeRect = gameObject.GetComponent <HoverShapeRect>(); HoverShapeRect handleShapeRect = (HoverShapeRect)rendSlider.HandleButton.GetShape(); HoverShapeRect jumpShapeRect = (HoverShapeRect)rendSlider.JumpButton.GetShape(); shapeRect.SizeY = Mathf.Max(shapeRect.SizeY, handleShapeRect.SizeY); UpdateTrackShape(shapeRect, rendSlider); UpdateButtonWidth(shapeRect, handleShapeRect); UpdateButtonWidth(shapeRect, jumpShapeRect); UpdateButtonPositions(rendSlider); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ protected override void UpdateInfoWithShape() { HoverRendererSlider rendSlider = gameObject.GetComponent <HoverRendererSlider>(); HoverShapeRect shapeRect = gameObject.GetComponent <HoverShapeRect>(); HoverShapeRect handleShapeRect = (HoverShapeRect)rendSlider.HandleButton.GetShape(); HoverShapeRect jumpShapeRect = (HoverShapeRect)rendSlider.JumpButton.GetShape(); TickSizeY = Mathf.Max(0, TickSizeY); vInfo.TrackStartPosition = -shapeRect.SizeY / 2; vInfo.TrackEndPosition = shapeRect.SizeY / 2; vInfo.HandleSize = handleShapeRect.SizeY; vInfo.JumpSize = (rendSlider.AllowJump ? jumpShapeRect.SizeY : 0); vInfo.TickSize = TickSizeY; }
/*--------------------------------------------------------------------------------------------*/ public override float GetSliderValueViaNearestWorldPosition(Vector3 pNearestWorldPosition, Transform pSliderContainerTx, HoverShape pHandleButtonShape) { HoverShapeRect buttonShapeRect = (pHandleButtonShape as HoverShapeRect); if (buttonShapeRect == null) { Debug.LogError("Expected slider handle to have a '" + typeof(HoverShapeRect).Name + "' component attached to it.", this); return(0); } Vector3 nearLocalPos = pSliderContainerTx.InverseTransformPoint(pNearestWorldPosition); float halfTrackSizeY = (SizeY - buttonShapeRect.SizeY) / 2; return(Mathf.InverseLerp(-halfTrackSizeY, halfTrackSizeY, nearLocalPos.y)); }
/*--------------------------------------------------------------------------------------------*/ protected void UpdateAutoUv(HoverShapeRect pShapeRect, float pOuterW, float pOuterH) { if (!AutoUvViaSizeType) { return; } Controllers.Set(UvTopName, this); Controllers.Set(UvBottomName, this); Controllers.Set(UvLeftName, this); Controllers.Set(UvRightName, this); UvTop = Mathf.Lerp(0.5f, 0, pOuterH / pShapeRect.SizeY); UvBottom = 1 - UvTop; UvLeft = Mathf.Lerp(0.5f, 0, pOuterW / pShapeRect.SizeX); UvRight = 1 - UvLeft; }
/*--------------------------------------------------------------------------------------------*/ protected override void UpdateTickMesh(HoverMesh pTickMesh, SliderUtil.SegmentInfo pTickInfo) { HoverShapeRect meshShapeRect = pTickMesh.GetComponent <HoverShapeRect>(); pTickMesh.Controllers.Set(SettingsControllerMap.GameObjectActiveSelf, this); pTickMesh.Controllers.Set(SettingsControllerMap.TransformLocalPosition + ".x", this); pTickMesh.Controllers.Set(SettingsControllerMap.TransformLocalPosition + ".y", this); meshShapeRect.Controllers.Set(HoverShapeRect.SizeXName, this); meshShapeRect.Controllers.Set(HoverShapeRect.SizeYName, this); meshShapeRect.SizeX = vTickSizeX; meshShapeRect.SizeY = pTickInfo.EndPosition - pTickInfo.StartPosition; Vector3 localPos = pTickMesh.transform.localPosition; localPos.x = (InsetLeft - InsetRight) / 2; localPos.y = (pTickInfo.StartPosition + pTickInfo.EndPosition) / 2; pTickMesh.transform.localPosition = localPos; RendererUtil.SetActiveWithUpdate(pTickMesh, !pTickInfo.IsHidden); }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ private void UpdateMeshes() { HoverFillButton fillButton = gameObject.GetComponent <HoverFillButton>(); HoverShapeRect shapeRect = gameObject.GetComponent <HoverShapeRect>(); float totalEdgeThick = EdgeThickness * 2; float insetSizeX = Mathf.Max(0, shapeRect.SizeX - totalEdgeThick); float insetSizeY = Mathf.Max(0, shapeRect.SizeY - totalEdgeThick); if (fillButton.Background != null) { UpdateMeshShape(fillButton.Background, insetSizeX, insetSizeY); } if (fillButton.Highlight != null) { UpdateMeshShape(fillButton.Highlight, insetSizeX, insetSizeY); } if (fillButton.Selection != null) { UpdateMeshShape(fillButton.Selection, insetSizeX, insetSizeY); } if (fillButton.Edge != null) { HoverIndicator meshInd = fillButton.Edge.GetComponent <HoverIndicator>(); float minSize = Mathf.Min(shapeRect.SizeX, shapeRect.SizeY); meshInd.Controllers.Set(HoverIndicator.HighlightProgressName, this); meshInd.HighlightProgress = 1 - totalEdgeThick / minSize; //TODO: hack/workaround UpdateMeshShape(fillButton.Edge, shapeRect.SizeX, shapeRect.SizeY, fillButton.ShowEdge); } }
/*--------------------------------------------------------------------------------------------*/ private void UpdateButtonWidth(HoverShapeRect pShapeRect, HoverShapeRect pButtonShapeRect) { pButtonShapeRect.Controllers.Set(HoverShapeRect.SizeXName, this); pButtonShapeRect.SizeX = pShapeRect.SizeX; }