示例#1
0
        public override void OnResolutionChanged(int w, int h, int oldw, int oldh)
        {
            base.OnResolutionChanged(w, h, oldw, oldh);

            LightAOE.OnResolutionChanged(w, h, oldw, oldh);
            MagnetAOE.OnResolutionChanged(w, h, oldw, oldh);
        }
示例#2
0
        public override void Update()
        {
            base.Update();

            LightAOE.Update();
            MagnetAOE.Update();
            Logics.GameInputHandler.Update();
        }
示例#3
0
        public override void LoadContent()
        {
            GridDraw.LoadContent();
            base.LoadContent();

            LightAOE.LoadContent();
            MagnetAOE.LoadContent();
        }
示例#4
0
        public override void Initialize()
        {
            Layer          = -1000;
            ShouldBeScaled = false;
            base.Initialize();

            LightAOE.Initialize();
            MagnetAOE.Initialize();
        }
示例#5
0
        public override void Draw(Renderer renderer)
        {
            if (Main.curState.StartsWith("GAME"))
            {
                //Grid
                #region Grid
                MicroWorld.Graphics.GUI.GridDraw.DrawGrid();
                #endregion


                //AoE-s
                #region AoE-s
                renderer.End();
                renderer.BeginUnscaled(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.AnisotropicClamp, DepthStencilState.None, RasterizerState.CullNone);
                LightAOE.Draw(renderer);
                MagnetAOE.Draw(renderer);
                renderer.End();
                renderer.Begin();
                #endregion


                //Components
                #region Components
                Components.ComponentsManager.Draw();
                Components.ComponentsManager.PostDraw();
                #endregion


                //SelectedGhost
                #region SelectedGhost
                if (MicroWorld.Graphics.GUI.GUIEngine.s_componentSelector.SelectedComponent.Text != "Cursor" &&
                    InputEngine.curMouse.X > GUI.Scene.ComponentSelector.CSTile.SIZE_X && !Logics.GameInputHandler.isLine)// &&
                //!MicroWorld.Graphics.GUI.GUIEngine.s_componentSelector.SelectedComponent.IsComponentOfType<Components.Properties.IDragDropPlacable>())
                {
                    int x = (int)((InputEngine.curMouse.X) / Settings.GameScale - Settings.GameOffset.X);
                    int y = (int)((InputEngine.curMouse.Y) / Settings.GameScale - Settings.GameOffset.Y);
                    Components.Component.Rotation rot = Logics.GameInputHandler.GhostRotation;
                    Vector2 size = MicroWorld.Graphics.GUI.GUIEngine.s_componentSelector.SelectedComponentGraphics.GetSizeRotated(rot);
                    Logics.GridHelper.GridCoords(ref x, ref y);
                    Logics.PlacableAreasManager.MakePlacable(ref x, ref y, (int)size.X, (int)size.Y);
                    Logics.GridHelper.GridCoords(ref x, ref y);
                    Vector2 so = MicroWorld.Graphics.GUI.GUIEngine.s_componentSelector.SelectedComponentGraphics.GetCenter(rot);
                    int     nx = x - (int)so.X, ny = y - (int)so.Y;

                    bool b = GraphicsEngine.CanDrawGhostComponent(ref nx, ref ny, (int)size.X, (int)size.Y);

                    Color c = Main.renderer.Overlay;
                    if (!b)
                    {
                        renderer.Overlay = Color.Red * 0.5f;
                    }
                    if (InputEngine.curMouse.LeftButton == ButtonState.Pressed &&
                        GUI.GUIEngine.s_componentSelector.SelectedComponent.Avalable == 0)
                    {
                        Main.renderer.Overlay = Main.Ticks % 40 < 20 ? Color.Red : c;
                    }
                    MicroWorld.Graphics.GUI.GUIEngine.s_componentSelector.SelectedComponentGraphics.DrawGhost(
                        nx,
                        ny,
                        Main.renderer, Logics.GameInputHandler.GhostRotation);
                    Main.renderer.Overlay = c;

                    #region Dotted Lines
                    MicroWorld.Graphics.GUI.GUIEngine.s_componentSelector.SelectedComponentGraphics.DrawBorder(
                        nx, ny, Logics.GameInputHandler.GhostRotation, renderer);
                    #endregion
                }
                #endregion


                //RemovingComponentsVisuals
                #region RemovingComponentsVisuals
                MicroWorld.Graphics.Effects.Effects.DrawRemovingVisuals();
                #endregion


                //MouseOverComponent
                #region MouseOverComponent
                if (Logics.GameInputHandler.MouseOverComponent != null)
                {
                    Logics.GameInputHandler.MouseOverComponent.Graphics.DrawBorder(renderer);
                }
                #endregion


                //wire
                #region Wire
                if (Logics.GameInputHandler.isLine)
                {
                    lock (Logics.GameInputHandler.pendingWirePath)
                        Components.Graphics.WireGraphics.DrawWire(Logics.GameInputHandler.pendingWirePath);

                    #region Dotted Lines
                    if (Logics.GameInputHandler.pendingWirePath != null && Logics.GameInputHandler.pendingWirePath.Count > 0)
                    {
                        //optimization
                        List <Vector2> l = new List <Vector2>();
                        Vector2        v1 = new Vector2(), v2 = new Vector2();
                        lock (Logics.GameInputHandler.pendingWirePath)
                        {
                            l.Add(new Vector2(Logics.GameInputHandler.pendingWirePath[0].X, Logics.GameInputHandler.pendingWirePath[0].Y));
                            for (int i = 1; i < Logics.GameInputHandler.pendingWirePath.Count - 1; i++)
                            {
                                v1 = new Vector2(Logics.GameInputHandler.pendingWirePath[i].X - Logics.GameInputHandler.pendingWirePath[i - 1].X,
                                                 Logics.GameInputHandler.pendingWirePath[i].Y - Logics.GameInputHandler.pendingWirePath[i - 1].Y);
                                v2 = new Vector2(Logics.GameInputHandler.pendingWirePath[i + 1].X - Logics.GameInputHandler.pendingWirePath[i].X,
                                                 Logics.GameInputHandler.pendingWirePath[i + 1].Y - Logics.GameInputHandler.pendingWirePath[i].Y);

                                if (((v1.X != 0) != (v2.X != 0)) ||
                                    (v1.Y != 0) != (v2.Y != 0))
                                {
                                    l.Add(new Vector2(Logics.GameInputHandler.pendingWirePath[i].X, Logics.GameInputHandler.pendingWirePath[i].Y));
                                }
                            }
                            l.Add(new Vector2(Logics.GameInputHandler.pendingWirePath[Logics.GameInputHandler.pendingWirePath.Count - 1].X,
                                              Logics.GameInputHandler.pendingWirePath[Logics.GameInputHandler.pendingWirePath.Count - 1].Y));
                        }
                        //draw
                        Components.Graphics.WireGraphics.DrawBorder(l, renderer);
                    }
                    #endregion
                }
                #endregion


                //dnd
                #region DnD
                if (Logics.GameInputHandler.isComponentDnD)
                {
                    int x = (int)((InputEngine.curMouse.X) / Settings.GameScale - Settings.GameOffset.X);
                    int y = (int)((InputEngine.curMouse.Y) / Settings.GameScale - Settings.GameOffset.Y);
                    Logics.PlacableAreasManager.MakePlacable(ref x, ref y);
                    MicroWorld.Logics.GridHelper.GridCoords(ref x, ref y);
                    Logics.GameInputHandler.DnDComponent.DrawGhost(Main.renderer,
                                                                   (int)Logics.GameInputHandler.pendingWireP1.X, (int)Logics.GameInputHandler.pendingWireP1.Y, x, y);

                    #region Dotted Lines
                    (Logics.GameInputHandler.DnDComponent as Components.Component).Graphics.DrawBorder(renderer);
                    #endregion
                }
                #endregion


                //Pending placable area
                #region PlacableAreas
                if (PlacableAreasCreator.create)
                {
                    int x = InputEngine.curMouse.X, y = InputEngine.curMouse.Y;
                    Utilities.Tools.ScreenToGameCoords(ref x, ref y);
                    Logics.GridHelper.GridCoords(ref x, ref y);
                    RenderHelper.DrawDottedLinesToBorders(new Point[] { new Point(x, y) }, Color.White, renderer, true);
                }

                if (Logics.GameInputHandler.isPlacableAreaPending)
                {
                    int x = (int)Logics.GameInputHandler.pendingWireP1.X;
                    int y = (int)Logics.GameInputHandler.pendingWireP1.Y;
                    int w = InputEngine.curMouse.X;
                    int h = InputEngine.curMouse.Y;
                    Utilities.Tools.ScreenToGameCoords(ref w, ref h);
                    Logics.GridHelper.GridCoords(ref w, ref h);
                    if (w < x)
                    {
                        int t = w;
                        w = x;
                        x = t;
                    }
                    if (h < y)
                    {
                        int t = h;
                        h = y;
                        y = t;
                    }
                    w -= x;
                    h -= y;
                    Main.renderer.Draw(GraphicsEngine.pixel, new Rectangle((int)x, (int)y, (int)w, (int)h), Color.Yellow * 0.4f);
                    RenderHelper.DrawDottedLinesToBorders(
                        new Point[] {
                        new Point(x, y),
                        new Point(x + w, y),
                        new Point(x, y + h),
                        new Point(x + w, y + h)
                    },
                        Color.White, renderer, true);
                }
                else
                {
                    //highlight deleting area
                    if (Graphics.GUI.Scene.PlacableAreasCreator.delete)
                    {
                        Rectangle r;
                        for (int i = 0; i < Logics.PlacableAreasManager.areas.Count; i++)
                        {
                            r = Logics.PlacableAreasManager.areas[i];
                            int x = InputEngine.curMouse.X;
                            int y = InputEngine.curMouse.Y;
                            Utilities.Tools.ScreenToGameCoords(ref x, ref y);

                            if (r.Contains(x, y))
                            {
                                Main.renderer.Draw(GraphicsEngine.pixel, new Rectangle(r.X, r.Y, r.Width, r.Height), Color.Yellow * 0.4f);
                                RenderHelper.DrawDottedLinesToBorders(
                                    new Point[] {
                                    new Point(r.X, r.Y),
                                    new Point(r.X + r.Width, r.Y),
                                    new Point(r.X, r.Y + r.Height),
                                    new Point(r.X + r.Width, r.Y + r.Height)
                                },
                                    Color.White, renderer, true);
                                break;
                            }
                        }
                    }
                }
                #endregion


                //Particles
                #region Particles
                ParticleManager.Draw();
                #endregion
            }
        }