private void OnEnable()
        {
            if (Application.isEditor)
            {
                if (!circleRenderer)
                {
                    circleRenderer = GetComponent <MeshRenderer>();
                }
            }

            _shadeCorners  = new LinkedLerp.MaterialFloat("_Courners", startingValue: 0, startingSpeed: 10, circleRenderer);
            _shadeSelected = new LinkedLerp.MaterialFloat("_Selected", 0, 4, circleRenderer);
            _textureFadeIn = new LinkedLerp.MaterialFloat("_TextureFadeIn", 0, 10, circleRenderer);
            _localPos      = new LinkedLerp.TransformLocalPosition(transform, 90);
            _localScale    = new LinkedLerp.TransformLocalScale(circleRenderer.transform, 120);
            _texTransition = new LinkedLerp.RendererMaterialTextureTransition(circleRenderer);
        }
Esempio n. 2
0
        public static void OnNodeChange()
        {
            var newCenterNode = Shortcuts.CurrentNode;

            if (newCenterNode == null)
            {
                return;
            }

            LevelArea newCenterMesh = null;

            foreach (var m in allAreas)
            {
                if (m.source == newCenterNode)
                {
                    newCenterMesh = m;
                    break;
                }
            }

            if (!newCenterMesh)
            {
                return;
            }

            if (!meshesParentTf)
            {
                var go = GameObject.CreatePrimitive(PrimitiveType.Plane);
                go.name        = "WORLD ROOT";
                meshesParentTf = go.transform;
                meshesParentTf.transform.position    = Vector3.zero;
                _meshParentMeshRenderer              = go.GetComponent <MeshRenderer>();
                go.GetComponent <Collider>().enabled = false;
                positionLerp = new LinkedLerp.TransformPosition(meshesParentTf, 1000);
                scaleLerp    = new LinkedLerp.TransformLocalScale(meshesParentTf, 10);
                OnEditingNodesToggle();
            }
            else
            {
                UnparentAll();
            }

            var currentCenterNode = currentCenterMesh ? currentCenterMesh.source.AsNode : null;

            if (currentCenterMesh && (newCenterNode.IsDirectChildOf(currentCenterNode) ||
                                      currentCenterNode.IsDirectChildOf(newCenterNode)))
            {
                bool zoomingIn = newCenterNode.IsDirectChildOf(currentCenterNode);

                Debug.Log("Got zooming " + (zoomingIn ? "In" : "Out"));

                //Zoomin out is wrong

                float previousZoom = meshesParentTf.localScale.x;

                float newZoom =
                    (zoomingIn ? (1f / newCenterMesh.relativeZoom) :
                     currentCenterMesh.relativeZoom    // zooming out
                    ) / previousZoom;

                Vector3 currentCenter = meshesParentTf.position;

                meshesParentTf.position = zoomingIn ?
                                          newCenterMesh.transform.position :
                                          (currentCenter - currentCenterMesh.relativePosition * newZoom); // New mesh doesn't exist yet

                meshesParentTf.localScale = Vector3.one * newZoom;
            }
            else
            {
                meshesParentTf.position   = Vector3.zero;
                meshesParentTf.localScale = Vector3.one;
            }

            // currentCenterNode = newCenterNode;
            ParentAll();

            foreach (var m in allAreas)
            {
                if (m == newCenterMesh)
                {
                    currentCenterMesh         = m;
                    m.transform.localPosition = Vector3.zero;
                    m.transform.localScale    = Vector3.one * m.relativeZoom;
                }
                else
                {
                    m.transform.localPosition = m.relativePosition;
                    m.transform.localScale    = Vector3.one;
                }
            }
        }