protected override void OnUpdate(GameTime time, int updateCounter)
        {
            if (Session.CurrentAtom != null)
            {
                Session.CurrentAtom.Update(time);
            }
            if (Session.NextAtom != null)
            {
                Session.NextAtom.Update(time);
            }

            GridRenderer.Update(time);
        }
Exemple #2
0
        /// <summary>
        /// Creates a new level editor.
        /// </summary>
        public Editor()
        {
            input    = SceneManager.Input;
            renderer = new GridRenderer(null, layout);

            InitUI();
            InitLowerFrame();

            worldIndex = Settings.Current.EditorWorld;
            levelIndex = Settings.Current.EditorLevel;

            LoadWorld();
            LoadLevel();
        }
 private void OnEnable()
 {
     if (slot == null)
     {
         slot = GetComponent <EnergyDeviceSlot>();
     }
     if (grid == null)
     {
         grid = GetComponentInChildren <GridRenderer>();
     }
     if (meter == null)
     {
         meter = GetComponentInChildren <EnergyAccumulatorMeter>();
     }
 }
Exemple #4
0
        public PintaCanvas()
        {
            cr = new CanvasRenderer ();
            gr = new GridRenderer (cr);

            // Keep the widget the same size as the canvas
            PintaCore.Workspace.CanvasSizeChanged += delegate (object sender, EventArgs e) {
                SetRequisition (PintaCore.Workspace.CanvasSize);
            };

            // Update the canvas when the image changes
            PintaCore.Workspace.CanvasInvalidated += delegate (object sender, CanvasInvalidatedEventArgs e) {
                if (e.EntireSurface)
                    GdkWindow.Invalidate ();
                else
                    GdkWindow.InvalidateRect (e.Rectangle, false);
            };

            // Give mouse press events to the current tool
            ButtonPressEvent += delegate (object sender, ButtonPressEventArgs e) {
                if (PintaCore.Workspace.HasOpenDocuments)
                    PintaCore.Tools.CurrentTool.DoMouseDown (this, e, PintaCore.Workspace.WindowPointToCanvas (e.Event.X, e.Event.Y));
            };

            // Give mouse release events to the current tool
            ButtonReleaseEvent += delegate (object sender, ButtonReleaseEventArgs e) {
                if (PintaCore.Workspace.HasOpenDocuments)
                    PintaCore.Tools.CurrentTool.DoMouseUp (this, e, PintaCore.Workspace.WindowPointToCanvas (e.Event.X, e.Event.Y));
            };

            // Give mouse move events to the current tool
            MotionNotifyEvent += delegate (object sender, MotionNotifyEventArgs e) {
                if (!PintaCore.Workspace.HasOpenDocuments)
                    return;

                Cairo.PointD point = PintaCore.Workspace.ActiveWorkspace.WindowPointToCanvas (e.Event.X, e.Event.Y);

                if (PintaCore.Workspace.ActiveWorkspace.PointInCanvas (point))
                    PintaCore.Chrome.LastCanvasCursorPoint = point.ToGdkPoint ();

                if (PintaCore.Tools.CurrentTool != null)
                    PintaCore.Tools.CurrentTool.DoMouseMove (sender, e, point);
            };

            // Handle key press/release events
            KeyPressEvent += new KeyPressEventHandler (PintaCanvas_KeyPressEvent);
            KeyReleaseEvent += new KeyReleaseEventHandler (PintaCanvas_KeyReleaseEvent);
        }
Exemple #5
0
    // Use this for initialization
    void Start()
    {
        terrainRenderer = new GridRenderer();

        terrainRenderer.Init(Battle.MAX_BATTLE_FILED_X, Battle.MAX_BATTLE_FILED_Y, 10, 0, "grid/mat_terrain", "Terrain");

        gridRenderer = new GridRenderer();

        gridRenderer.Init(Battle.MAX_BATTLE_FILED_X, Battle.MAX_BATTLE_FILED_Y, 2, 0.1f, "grid/mat_grid", "Grid");

        SkillAttackFlyAttributeConfig.Initialize();
        UnitConfig.Initialize();

        battleplayer = new Battleplayer();
        battleplayer.Init();
    }
Exemple #6
0
    public void OnRenderObject()
    {
        if (renderGrid)
        {
            Matrix4x4 localToWorld =
                Matrix4x4.TRS(gridCornerOffset, Quaternion.identity, Vector3.one)
                * transform.localToWorldMatrix;

            GridRenderer.RenderGrid((x, y) => GetGrid(x, y),
                                    gridX,
                                    gridY,
                                    localToWorld,
                                    gridXVec,
                                    gridYVec, Color.white);
        }
    }
Exemple #7
0
        private void InitScene()
        {
            myScene = new Scene();

            myOnyxInstance = Onyx3DEngine.Instance;
            myOnyxInstance.Init();

            SceneObject  teapot     = new SceneObject("Teapot");
            MeshRenderer teapotMesh = teapot.AddComponent <MeshRenderer>();

            teapotMesh.Mesh = myOnyxInstance.Resources.GetMesh(BuiltInMesh.Teapot);
            teapot.Transform.LocalPosition = new Vector3(0, 0.5f, 0);
            teapotMesh.Material            = myOnyxInstance.Resources.GetMaterial(BuiltInMaterial.Default);
            teapot.Parent = myScene.Root;



            SceneObject  teapot2     = new SceneObject("Teapot2");
            MeshRenderer teapot2Mesh = teapot2.AddComponent <MeshRenderer>();

            teapot2Mesh.Mesh                = myOnyxInstance.Resources.GetMesh(BuiltInMesh.Teapot);
            teapot2Mesh.Material            = myOnyxInstance.Resources.GetMaterial(BuiltInMaterial.Default);
            teapot2.Transform.LocalScale    = new Vector3(0.5f, 0.5f, 0.5f);
            teapot2.Transform.LocalPosition = new Vector3(2, 0, 2);
            teapot2.Transform.LocalRotation = Quaternion.FromEulerAngles(new Vector3(0, 90, 0));
            teapot2.Parent = myScene.Root;

            myTeapot = teapot2;

            // Editor objects --------------------------------------

            SceneObject grid = new SceneObject("Grid");

            myGridRenderer = grid.AddComponent <GridRenderer>();
            myGridRenderer.GenerateGridMesh(100, 100, 0.25f, 0.25f);
            myGridRenderer.Material = myOnyxInstance.Resources.GetMaterial(BuiltInMaterial.Unlit);
            myGridRenderer.Material.Properties["color"].Data = new Vector4(1, 1, 1, 0.1f);

            //myBox = teapot.AddComponent<BoxRenderer>();
            //myBox.Material = myOnyxInstance.Resources.GetMaterial(BuiltInMaterial.UnlitVertexColor);

            mNavigation.CreateCamera();

            UpdateTreeView();
        }
        static void Main(string[] args)
        {
            var gridCollection = new TileUtfGridCollection();

            // Add a polygon
            var polygon = new TileUtfGridCoords();

            polygon.PointList.Add(new PointF(50, 50));
            polygon.PointList.Add(new PointF(50, 100));
            polygon.PointList.Add(new PointF(100, 100));
            polygon.PointList.Add(new PointF(100, 50));

            polygon.UtfShapeType = UtfShapeType.Polygon;
            polygon.LineWidth = 10;
            polygon.Id = 1;
            polygon.Name = "Eranu";

            gridCollection.Collection.Add(polygon);

            // Add a line
            var line = new TileUtfGridCoords();

            line.PointList.Add(new PointF(200, 200));
            line.PointList.Add(new PointF(200, 300));
            line.PointList.Add(new PointF(300, 300));
            line.PointList.Add(new PointF(300, 200));

            line.UtfShapeType = UtfShapeType.Line;
            line.LineWidth = 5;
            line.Id = 2;
            line.Name = "Oovavu";

            gridCollection.Collection.Add(line);

            // Render the shapes
            var gridRenderer = new GridRenderer();

            var json = gridRenderer.GetUtfGrid(gridCollection).JsonString;

            Console.WriteLine(json);
            Console.ReadLine();

            // System.IO.File.WriteAllText(@"C:\temp\grid.json", json);
        }
        // --------------------------------------------------------------------

        private void InitializeEditor()
        {
            Onyx3DEngine.InitMain(renderCanvas.Context, renderCanvas.WindowInfo);
            mOnyxInstance = Onyx3DEngine.Instance;

            mNavigation.CreateCamera();

            mObjectHandler = new ObjectHandler(mOnyxInstance, renderCanvas, mNavigation.Camera);
            mObjectHandler.OnTransformModified += OnTransformModifiedFromObjectHandler;

            selectedObjectInspector.InspectorChanged += OnInspectorChanged;

            SceneObject grid = new SceneObject("Grid");

            mGridRenderer = grid.AddComponent <GridRenderer>();
            mGridRenderer.GenerateGridMesh(100, 100, 0.25f, 0.25f, Vector3.One);
            mGridRenderer.Material = mOnyxInstance.Resources.GetMaterial(BuiltInMaterial.Unlit);
            mGridRenderer.Material.Properties["color"].Data = new Vector4(1, 1, 1, 0.1f);
        }
Exemple #10
0
    // Use this for initialization
    void Start()
    {
        grid = GameObject.FindWithTag("grid");

        //Get the grid components
        if (grid != null)
        {
            gridRenderer = grid.GetComponent <GridRenderer>();
        }

        //Get the height and width from the renderer and copy
        //it locally
        gridHeight = gridRenderer.GridHeight;
        gridWidth  = gridRenderer.GridWidth;

        //Build an array to monitor cell positions based on
        //the size of the grid built by the renderer
        gridArray = new bool[gridWidth, gridHeight];
    }
Exemple #11
0
        public OpenGlEngine()
        {
            Load   += OnLoad;
            Paint  += OnPaint;
            Resize += OnResize;

            _dispatcherTimer.Tick    += ThreadIdle;
            _dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 13);

            Context.VSync = Vsync;
            _realCamera   = new Camera {
                Pan = 40, Yaw = -40, Z = 300, X = 0, Y = 0, Roll = 0
            };

            _objectRenderer     = new ObjectNormalRenderer();
            _gridRenderer       = new GridRenderer();
            _pointCloudRenderer = new PointCloudRenderer();

            _dispatcherTimer.Start();
        }
Exemple #12
0
        // XXX End XXX

        private void RenderWorld(World world, IMessage message)
        {
            if (Dispatcher.CheckAccess()) // Accessing from UI thread.
            {
                var grid = GridRenderer.RenderGrid(world.GridItems, (int)Math.Floor(MainGrid.ActualHeight));

                MainGrid.Children.Clear();
                MainGrid.Children.Add(grid);

                StatsStackPanel.Children.Clear();
                world.Tanks.Select(LabelRenderer.RenderTankProfile).ForEach(item => StatsStackPanel.Children.Add(item));

                // XXX Start XXX This violates programming style
                DrawBullets(world);
                // XXX End XXX
            }
            else
            {
                Dispatcher.Invoke(() => RenderWorld(world, message));
            }
        }
Exemple #13
0
        // --------------------------------------------------------------------

        public virtual void InitializeBasicScene()
        {
            Scene = new Scene(OnyxInstance);

            Camera = new PerspectiveCamera("MainCamera", 0.5f, (float)mFrameBuffer.Width / (float)mFrameBuffer.Height);
            Camera.Transform.LocalPosition = new Vector3(0, 1.45f, 3f);
            Camera.Transform.LocalRotation = OpenTK.Quaternion.FromAxisAngle(new Vector3(1, 0, 0), -0.45f);

            Scene.ActiveCamera = Camera;

            mCamPivot        = new SceneObject("camPivot");
            mCamPivot.Parent = Scene.Root;
            Camera.Parent    = mCamPivot;

            SceneObject grid = new SceneObject("Grid");

            mGridRenderer = grid.AddComponent <GridRenderer>();
            mGridRenderer.GenerateGridMesh(10, 10, 0.25f, 0.25f, new Vector3(0.8f, 0.8f, 0.8f));
            mGridRenderer.Material = OnyxInstance.Resources.GetMaterial(BuiltInMaterial.UnlitVertexColor);

            SceneObject light  = new SceneObject("Light");
            Light       lightC = light.AddComponent <Light>();

            light.Parent = Scene.Root;
            light.Transform.LocalPosition = new Vector3(1, 2, 1);
            lightC.Intensity = 5;

            SceneObject test = new SceneObject("ReflectionProbe");

            test.Parent = Scene.Root;
            test.Transform.LocalPosition = new Vector3(0, 0, 0);
            mReflectionProbe             = test.AddComponent <ReflectionProbe>();
            mReflectionProbe.Init(64);

            mReflectionProbe.Bake(OnyxInstance.Renderer);
        }
    public override void Awake()
    {
        base.Awake();
        Application.targetFrameRate = 60;


        //Tracker.SMARTEnabled = true;
        //Tracker.DeviceHeightAboveGround = 1.2f;
        //Tracker.OnTargetsLoaded.AddListener(OnTargetsLoaded);
        //Tracker.OnErrorLoadingTargets.AddListener(OnErrorLoadingTargets);
        //Tracker.OnStateChanged.AddListener(OnStateChanged);
        //Tracker.OnError.AddListener(OnError);
        //Tracker.OnScreenConversionComputed.AddListener(OnScreenConversionComputed);



        //instantTrackable.OnInitializationStarted.AddListener(OnSceneRecognized);
        //instantTrackable.OnInitializationStopped.AddListener(OnSceneLost);
        //instantTrackable.OnSceneRecognized.AddListener(OnSceneRecognized);
        //instantTrackable.OnSceneLost.AddListener(OnSceneLost);
        _gridRenderer = GetComponent <GridRenderer>();

        mainLight = GameObject.FindGameObjectWithTag(Tags.Light).GetComponent <Light>();
    }
        private static void RegisterGridRendererTree(IServiceCollection services)
        {
            services.AddSingleton(typeof(IGridRenderer), provider =>
            {
                var gridRowRenderer = new GridRowRenderer();
                gridRowRenderer.AddRenderer(new GridCellMasterActionRenderer());
                gridRowRenderer.AddRenderer(new GridCellRenderer());

                var gridBodyRenderer = new GridBodyRenderer(provider.GetRequiredService <ILogger <GridBodyRenderer> >());
                gridBodyRenderer.AddRenderer(gridRowRenderer);

                var gridRenderer = new GridRenderer(provider.GetRequiredService <ILogger <GridRenderer> >());
                gridRenderer.AddRenderer(new GridMesurablePartRenderer(
                                             new GridHeaderRenderer(provider.GetRequiredService <ILogger <GridHeaderRenderer> >()),
                                             provider.GetRequiredService <ILogger <GridMesurablePartRenderer> >())
                                         );

                gridRenderer.AddRenderer(new GridLoadingRenderer(), RendererType.BeforeTag);
                gridRenderer.AddRenderer(new GridMesurablePartRenderer(gridBodyRenderer, provider.GetRequiredService <ILogger <GridMesurablePartRenderer> >()));
                gridRenderer.AddRenderer(new GridPaginationRenderer(), RendererType.AfterTag);

                return(gridRenderer);
            });
        }
Exemple #16
0
 // Start is called before the first frame update
 void Start()
 {
     myGridScript = MyGridObject.GetComponent <GridRenderer>();
 }
Exemple #17
0
 // Use this for initialization( Unity callback method)
 void Start()
 {
     gridRenderer = GameObject.Find("Canvas").GetComponent<GridRenderer>();
     grid = new Grid(128,128);
     pointA = new Vector2 (0, 0);
     pointB = new Vector2 (0, 0);
 }
        protected override void OnDraw(SpriteBatch batch)
        {
            GraphicsDevice.Clear(AppColors.WindowBackground);

            batch.Begin(SpriteSortMode.FrontToBack);

            // grid
            GridRenderer.Draw(batch, new Vector2(AppConstants.GridX, AppConstants.GridY));

            batch.End();


            batch.Begin();

            var y = AppConstants.GridY + 10;

            // time
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.GridRight, y), "Time:", AppColors.Descriptions);
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.WindowWidth - AppConstants.ScreenPadding - 140, y), TimeSpan.FromSeconds(Session.Time).ToString(@"hh\:mm\:ss"), AppColors.Texts);
            y += AppContents.DefaultFont.Data.LineHeight + 15;

            // score
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.GridRight, y), $"Score:", AppColors.Descriptions);
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.WindowWidth - AppConstants.ScreenPadding - 140, y), Session.Score.ToString("n0"), AppColors.Texts);
            y += AppContents.DefaultFont.Data.LineHeight + 15;

            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.GridRight, y), $"Atoms:", AppColors.Descriptions);
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.WindowWidth - AppConstants.ScreenPadding - 140, y), Session.Atoms.ToString("n0"), AppColors.Texts);
            y += AppContents.DefaultFont.Data.LineHeight + 5;

            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.GridRight, y), $"Molecules:", AppColors.Descriptions);
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.WindowWidth - AppConstants.ScreenPadding - 140, y), Session.Molecules.ToString("n0"), AppColors.Texts);
            y += AppContents.DefaultFont.Data.LineHeight + 5;

            // current/next atom
            y = AppConstants.WindowHeight - AppConstants.ScreenPadding - AppConstants.PreviewBoxHeight - AppContents.DefaultFont.Data.LineHeight - 8;

            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.GridRight, y), "Current", AppColors.Descriptions);
            batch.DrawBitmapFont(AppContents.DefaultFont, new Vector2(AppConstants.GridRight + AppConstants.PreviewBoxWidth + AppConstants.PreviewBoxPadding, y), "Next", AppColors.Descriptions);
            y += AppContents.DefaultFont.Data.LineHeight + 8;

            batch.DrawRect(new Rectangle(AppConstants.GridRight, y, AppConstants.PreviewBoxWidth, AppConstants.PreviewBoxHeight), 1, AppColors.PreviewBorder);
            batch.DrawRect(new Rectangle(AppConstants.GridRight + AppConstants.PreviewBoxWidth + AppConstants.PreviewBoxPadding, y, AppConstants.PreviewBoxWidth, AppConstants.PreviewBoxHeight), 1, AppColors.PreviewBorder);

            if (Session.CurrentAtom != null)
            {
                Session.CurrentAtom.Draw(batch,
                                         pos: new Vector2(
                                             AppConstants.GridRight + AppConstants.PreviewBoxWidth / 2,
                                             y + AppConstants.PreviewBoxHeight / 2), layerDepth: LayerDepth.Default);
            }

            if (Session.NextAtom != null)
            {
                Session.NextAtom.Draw(batch,
                                      pos: new Vector2(
                                          AppConstants.GridRight + AppConstants.PreviewBoxWidth + AppConstants.PreviewBoxPadding + AppConstants.PreviewBoxWidth / 2,
                                          y + AppConstants.PreviewBoxHeight / 2),
                                      layerDepth: LayerDepth.Default);
            }

            // atom grid preview
            if (Session.CurrentAtom != null && IsMouseOverGrid() && IsOnTop)
            {
                var gridPos = GetMouseGridPos();

                if (Grid.IsValidPos(gridPos.X, gridPos.Y) && !Grid.HasAtom(gridPos.X, gridPos.Y))
                {
                    if (Grid.CanSet(gridPos.X, gridPos.Y, Session.CurrentAtom))
                    {
                        Session.CurrentAtom.Draw(batch, new Vector2(
                                                     AppConstants.GridX + gridPos.X * Grid.TileSize + Grid.TileSize / 2,
                                                     AppConstants.GridY + gridPos.Y * Grid.TileSize + Grid.TileSize / 2),
                                                 LayerDepth.Default,
                                                 AppColors.AtomValidPos);
                    }
                    else
                    {
                        Session.CurrentAtom.Draw(batch, new Vector2(
                                                     AppConstants.GridX + gridPos.X * Grid.TileSize + Grid.TileSize / 2,
                                                     AppConstants.GridY + gridPos.Y * Grid.TileSize + Grid.TileSize / 2),
                                                 LayerDepth.Default,
                                                 AppColors.AtomInvalidPos);
                    }
                }
            }

            batch.End();
        }
Exemple #19
0
 public GridClustered(string _FileName, GridRenderer _Renderer, int _SizeClusterRows, int _SizeClusterColumns) : base(_FileName, _Renderer)
 {
     GenerateClusters(_SizeClusterRows, _SizeClusterColumns);
 }
 protected override void OnStart()
 {
     Session      = new GameSession();
     Grid         = new AtomsGrid(AppContents, Session, AppConstants.GridTileSize, AppConstants.GridWidth, AppConstants.GridHeight);
     GridRenderer = new GridRenderer(Grid, Session);
 }
Exemple #21
0
 private static GridRenderer Instantiate()
 {
     _instance = new GridRenderer();
     return(_instance);
 }
Exemple #22
0
		void OnGUI () {
			if (_gridRenderer == null) _gridRenderer = new GridRenderer();
			Event currentEvent = Event.current;

			Rect scrollViewRect = new Rect(0, 0, position.width - SidebarWidth, position.height);
			Rect sidebarRect = new Rect(position.width - SidebarWidth, 0, SidebarWidth, position.height);

			OperatorInspector.DrawInspector(sidebarRect);

			ScrollPoint = GUI.BeginScrollView(scrollViewRect, ScrollPoint, Canvas);

			bool needsRepaint = false;

			// Mouse wheel event to control zoom
			if (currentEvent.type == EventType.ScrollWheel) {

				float previousZoom = Zoom;
				Vector2 pivotPoint = currentEvent.mousePosition / Zoom;
				float wheelDelta = Event.current.delta.y > 0 ? -0.1f : 0.1f;

				// Apply the delta to the zoom level and clamp to min and max
				Zoom = (Zoom + wheelDelta).Clamp(MinZoom, MaxZoom);
				Zoom = (float) System.Math.Round(Zoom, 2);
				
				if (previousZoom != Zoom) {
					// Keep the viewport anchored to the position of the mouse cursor
					float zoomDelta = Zoom - previousZoom;
					ScrollPoint += pivotPoint * zoomDelta;

					// Repaint if there was a zoom change (after clamping)
					needsRepaint = true;
				}

				currentEvent.Use();
			}

			Canvas = new Rect(0f, 0f, CanvasWidth * Zoom, CanvasHeight * Zoom);

			_gridRenderer.Draw(ScrollPoint, Zoom, Canvas);

			if (Template != null) {

				// Draw the connections
				Template.DrawConnections();

				// Draw the nodes
				string[] guids = new string[Template.Operators.Count];
				Template.Operators.Keys.CopyTo(guids, 0);
				for (int i = 0; i < guids.Length; i++) {
					Node node = GetNode(guids[i]); // kvp.Key = GUID
					needsRepaint = needsRepaint || node.EventsNeedRepaint(Zoom, this);
					node.Draw(Zoom);
				}

				// Handle left mouse button events
				if (currentEvent.button == 0) {

					// MouseDown
					if (currentEvent.type == EventType.MouseDown && CurrentEvent.Type == GEType.None) {
						CurrentEvent = new GraphEvent(GEType.Unresolved, GEContext.Grid, null, IOOutlet.None, currentEvent.mousePosition);
					}

					// MouseDrag
					if (currentEvent.type == EventType.MouseDrag && CurrentEvent.IsType(GEType.Unresolved, GEType.Drag) && CurrentEvent.Context == GEContext.Grid) {
						if (currentEvent.delta.magnitude > 0) {
							CurrentEvent = new GraphEvent(GEType.Drag, GEContext.Grid, null, IOOutlet.None);
							ScrollPoint.x += - currentEvent.delta.x;
							ScrollPoint.y += - currentEvent.delta.y;
							needsRepaint = true;
						}
					}

					// MouseUp
					if (currentEvent.type == EventType.MouseUp) {
						if (CurrentEvent.Type == GEType.Unresolved && CurrentEvent.Context == GEContext.Grid) {
							Selection.Clear();
							needsRepaint = true;
						}
						needsRepaint = needsRepaint || CurrentEvent.IsConnecting();
						CurrentEvent.Empty();
					}

				} // Left mouse down/drag/up

				// Right mouse button
				if (currentEvent.type == EventType.ContextClick) {
					var menu = new GenericMenu();

					var opTypes = Operator.GetAvailableOperators();
					foreach (var opType in opTypes) {
						string menuLabel = opType.Name;
						var meta = System.Attribute.GetCustomAttribute(opType, typeof(OperatorMetadataAttribute)) as OperatorMetadataAttribute;
						if (meta != null) {
							menuLabel = meta.Category + "/" + (meta.Title != null ? meta.Title : opType.Name);
						}
						var payload = new MenuActionPayload() {OperatorType=opType, Position=currentEvent.mousePosition / Zoom};
						menu.AddItem(new GUIContent(menuLabel), false, MenuAction, payload);
					}

					menu.ShowAsContext();
				}

				if (currentEvent.isKey && currentEvent.keyCode == KeyCode.Delete) {
					foreach (var node in Selection.Nodes) {
						Template.RemoveOperator(node.Operator);
					}
					Selection.Clear();
					needsRepaint = true;
				}

			}

			if (needsRepaint) {
				Repaint();
			}

			GUI.EndScrollView();

			// Current Zoom level
			float zoomLabelWidth = 150f;
			float zoomLabelHeight = 20f;
			Rect zoomLabelRect = new Rect(position.width - SidebarWidth - zoomLabelWidth - 20f, position.height - zoomLabelHeight - 20f, zoomLabelWidth, zoomLabelHeight);
			if (LabelStyle == null) {
				LabelStyle = new GUIStyle();
				LabelStyle.normal.textColor = Color.white;
				LabelStyle.alignment = TextAnchor.LowerRight;
			}
			GUI.Label(zoomLabelRect, string.Format("Zoom: {0}%", Zoom * 100f), LabelStyle);

		} // OnGUI
 public void Awake()
 {
     grid            = GetComponent <GridRenderer>();
     _gameController = gameControllerObj.GetComponent <GameController>();
     hazards         = _gameController.hazards;
 }
 // Start is called before the first frame update
 void Start()
 {
     dodgeBalls   = new List <Ball>(3);
     myGridScript = MyGridObject.GetComponent <GridRenderer>();
 }