Пример #1
0
    public static void OnSceneGUI()
    {
        if (m_level == null)
        {
            return;
        }
        if (Editing)
        {
            //	if(m_grid.ContentsMesh == null) { m_grid.RebuildMeshes(); }

            var e = Event.current;

            Vector2 worldPos = Camera.main.ScreenToWorldPoint(Event.current.mousePosition);

            Ray   targetRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
            Plane zeroPlane = new Plane(new Vector3(0.0f, 0.0f, -1.0f), new Vector3(1.0f, 0.0f, 0.0f));

            float hit;
            if (zeroPlane.Raycast(targetRay, out hit))
            {
                var hitLocation = targetRay.GetPoint(hit);

                float size = HandleUtility.GetHandleSize(hitLocation) * 0.2f;
                Handles.SphereCap(0, hitLocation, Quaternion.identity, size);

                if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown))
                {
                    Point gridPosition = GameObject.FindObjectOfType <Level>().GetGrid().GetCellIndices(hitLocation);

                    if (gridPosition != null)
                    {
                        m_layout.SetTileContents(gridPosition.x, gridPosition.y, e.button == 0);

                        Level.Instance.LoadFromLayout(m_layout);
                    }
                }
            }

            if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown) && (e.button == 0 || e.button == 1) || (e.type == EventType.Layout))
            {
                Event.current.Use();


                HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive));
            }
        }
    }