Пример #1
0
 void ChangeSystem()
 {
     if (sysIndex != sysIndexLoaded)
     {
         camera.UpdateProjection();
         camera.Free = false;
         camera.Zoom = 5000;
         Resources.ClearTextures();
         if (universeBackgroundTex != null)
         {
             ImGuiHelper.DeregisterTexture(universeBackgroundTex);
         }
         universeBackgroundTex = (Resources.FindTexture("fancymap.tga") as Texture2D);
         if (universeBackgroundTex != null)
         {
             universeBackgroundRegistered = ImGuiHelper.RegisterTexture(universeBackgroundTex);
         }
         else
         {
             universeBackgroundRegistered = -1;
         }
         curSystem      = GameData.GetSystem(systems[sysIndex]);
         systemInfocard = GameData.GetInfocard(curSystem.Infocard, fontMan);
         if (icard != null)
         {
             icard.SetInfocard(systemInfocard);
         }
         GameData.LoadAllSystem(curSystem);
         world.LoadSystem(curSystem, Resources);
         systemMap.SetObjects(curSystem);
         sysIndexLoaded = sysIndex;
     }
 }
Пример #2
0
 public override void Dispose()
 {
     if (renderTarget != null)
     {
         ImGuiHelper.DeregisterTexture(renderTarget.Texture);
         renderTarget.Dispose();
     }
     xmlEditor.Dispose();
 }
Пример #3
0
        public void Draw(float width)
        {
            icard.Recalculate(width);
            if (icard.Height < 1 || width < 1)
            {
                ImGui.Dummy(new Vector2(1, 1));
                return;
            }
            if (icard.Height != renderHeight || (int)width != renderWidth)
            {
                renderWidth  = (int)width;
                renderHeight = (int)icard.Height;
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget.Texture);
                    renderTarget.Dispose();
                }
                renderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(renderTarget.Texture);
            }

            window.RenderContext.RenderTarget = renderTarget;
            window.RenderContext.PushViewport(0, 0, renderWidth, renderHeight);
            var cc = window.RenderContext.ClearColor;

            window.RenderContext.ClearColor = Color4.Transparent;
            window.RenderContext.ClearAll();
            window.RenderContext.ClearColor = cc;
            window.RichText.RenderText(icard, 0, 0);
            window.RenderContext.RenderTarget = null;
            window.RenderContext.PopViewport();

            //ImGui. Base off ImageButton so we can get input for selection later
            var style = ImGui.GetStyle();
            var btn   = style.Colors[(int)ImGuiCol.Button];

            ImGui.PushStyleColor(ImGuiCol.ButtonHovered, btn);
            ImGui.PushStyleColor(ImGuiCol.ButtonActive, btn);
            ImGui.ImageButton((IntPtr)rid, new Vector2(renderWidth, icard.Height),
                              new Vector2(0, 1), new Vector2(1, 0),
                              0,
                              Vector4.Zero, Vector4.One);
            ImGui.PopStyleColor();
            ImGui.PopStyleColor();
            //Somehow keep track of selection? (idk if InfocardDisplay should do this)
        }
Пример #4
0
        public void Draw(int width, int height)
        {
            //Set viewport
            height -= 30;
            if (width <= 0)
            {
                width = 1;
            }
            if (height <= 0)
            {
                height = 1;
            }
            if (width != rw || height != rh)
            {
                if (rtarget != null)
                {
                    ImGuiHelper.DeregisterTexture(rtarget.Texture);
                    rtarget.Dispose();
                }
                rtarget = new RenderTarget2D(width, height);
                rw      = width;
                rh      = height;
                rt      = ImGuiHelper.RegisterTexture(rtarget.Texture);
            }
            //Draw
            win.Viewport.Push(0, 0, width, height);
            ctx.ViewportWidth            = width;
            ctx.ViewportHeight           = height;
            ctx.RenderState.RenderTarget = rtarget;
            ctx.RenderState.ClearColor   = Color4.TransparentBlack;
            ctx.RenderState.ClearAll();
            ctx.RenderWidget();
            ctx.RenderState.RenderTarget = null;
            win.Viewport.Pop();
            //ImGui
            ImGui.Button("x##a");
            ImGui.SameLine();
            ImGui.Button("x##b");
            var cpos = ImGui.GetCursorPos();

            ImGui.Image((IntPtr)rt, new Vector2(width, height), new Vector2(0, 1), new Vector2(1, 0),
                        Color4.White);
            ImGui.SetCursorPos(cpos);
            ImGui.InvisibleButton("##navmap", new Vector2(width, height));
        }
Пример #5
0
        public void Draw(float width)
        {
            icard.SetRectangle(new Rectangle(0, 0, (int)width, int.MaxValue));

            if (icard.Height != renderHeight || (int)width != renderWidth)
            {
                renderWidth  = (int)width;
                renderHeight = (int)icard.Height;
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget);
                    renderTarget.Dispose();
                }
                renderTarget = new RenderTarget2D(renderWidth, renderHeight);
                rid          = ImGuiHelper.RegisterTexture(renderTarget);
            }
            renderTarget.BindFramebuffer();
            window.Viewport.Push(0, 0, renderWidth, renderHeight);
            var cc = window.RenderState.ClearColor;

            window.RenderState.ClearColor = Color4.Transparent;
            window.RenderState.ClearAll();
            window.RenderState.ClearColor = cc;
            window.Renderer2D.Start(renderWidth, renderHeight);
            icard.Draw(window.Renderer2D);
            window.Renderer2D.Finish();
            RenderTarget2D.ClearBinding();
            window.Viewport.Pop();

            //ImGui. Base off ImageButton so we can get input for selection later
            var style = ImGui.GetStyle();
            var btn   = style.Colors[(int)ImGuiCol.Button];

            ImGui.PushStyleColor(ImGuiCol.ButtonHovered, btn);
            ImGui.PushStyleColor(ImGuiCol.ButtonActive, btn);
            ImGui.ImageButton((IntPtr)rid, new Vector2(renderWidth, icard.Height),
                              new Vector2(0, 1), new Vector2(1, 0),
                              0,
                              Vector4.Zero, Vector4.One);
            ImGui.PopStyleColor();
            ImGui.PopStyleColor();
            //Somehow keep track of selection? (idk if InfocardDisplay should do this)
        }
Пример #6
0
 void BindViewport(int szX, int szY)
 {
     if (szY <= 0)
     {
         szY = 1;
     }
     if (rtX != szX || rtY != szY)
     {
         rtX = szX;
         rtY = szY;
         if (renderTarget != null)
         {
             ImGuiHelper.DeregisterTexture(renderTarget.Texture);
             renderTarget.Dispose();
         }
         renderTarget      = new RenderTarget2D(rtX, rtY);
         renderTargetImage = ImGuiHelper.RegisterTexture(renderTarget.Texture);
     }
     mainWindow.RenderState.RenderTarget = renderTarget;
     mainWindow.Viewport.Push(0, 0, rtX, rtY);
     mainWindow.RenderState.ClearColor = Color4.Black;
     mainWindow.RenderState.ClearAll();
 }
Пример #7
0
        void DoViewport()
        {
            var szX = (int)ImGui.GetWindowContentRegionWidth();
            var szY = (int)ImGui.GetWindowHeight();

            if (rtX != szX || rtY != szY)
            {
                rtX = szX;
                rtY = szY;
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget.Texture);
                    renderTarget.Dispose();
                }
                renderTarget      = new RenderTarget2D(rtX, rtY);
                renderTargetImage = ImGuiHelper.RegisterTexture(renderTarget.Texture);
            }

            mainWindow.RenderState.RenderTarget = renderTarget;
            mainWindow.Viewport.Push(0, 0, rtX, rtY);
            mainWindow.RenderState.ClearColor = Color4.Black;
            mainWindow.RenderState.ClearAll();
            //Do drawing
            if (widget != null)
            {
                context.GlobalTime     = TimeSpan.FromSeconds(mainWindow.TotalTime);
                context.ViewportWidth  = rtX;
                context.ViewportHeight = rtY;
                context.RenderWidget();
            }
            //
            mainWindow.Viewport.Pop();
            mainWindow.RenderState.RenderTarget = null;
            //We don't use ImageButton because we need to be specific about sizing
            var cPos = ImGui.GetCursorPos();

            ImGui.Image((IntPtr)renderTargetImage, new Vector2(rtX, rtY), new Vector2(0, 1), new Vector2(1, 0));
            ImGui.SetCursorPos(cPos);
            var wPos = ImGui.GetWindowPos();
            var mX   = (int)(mainWindow.Mouse.X - cPos.X - wPos.X);
            var mY   = (int)(mainWindow.Mouse.Y - cPos.Y - wPos.Y);

            ImGui.InvisibleButton("##renderThing", new Vector2(rtX, rtY));
            if (ImGui.IsItemHovered())
            {
                context.Update(null, TimeSpan.FromSeconds(mainWindow.TotalTime), mX, mY, false);
                if (ImGui.IsItemClicked(0))
                {
                    context.OnMouseClick();
                }
                var isDown = ImGui.IsMouseDown(0);
                if (lastDown && !isDown)
                {
                    context.OnMouseUp();
                }
                if (isDown && !lastDown)
                {
                    context.OnMouseDown();
                }
                context.MouseLeftDown = isDown;
                lastDown = isDown;
            }
            else
            {
                context.Update(null, TimeSpan.FromSeconds(mainWindow.TotalTime), 0, 0, false);
                context.MouseLeftDown = false;
                if (lastDown)
                {
                    lastDown = false;
                    context.OnMouseUp();
                }
            }
        }
Пример #8
0
        public void ImageTab()
        {
            ImGui.BeginChild("##tabinner");
            if (ImGui.Button("Add Normal"))
            {
                resources.Images.Add(new InterfaceImage()
                {
                    Name = "Image" + resources.Images.Count
                });
            }
            ImGui.SameLine();
            if (ImGui.Button("Add Triangle"))
            {
                resources.Images.Add(new InterfaceImage()
                {
                    Name = "Image" + resources.Images.Count, Type = InterfaceImageKind.Triangle
                });
            }
            ImGui.Separator();
            ImGui.Columns(2);
            ImGui.BeginChild("##items");
            for (int i = 0; i < resources.Images.Count; i++)
            {
                if (ImGui.Selectable(ImGuiExt.IDWithExtra(resources.Images[i].Name, i.ToString()), _selTexIndex == i))
                {
                    _selTexIndex = i;
                    imageName.SetText(resources.Images[i].Name);
                    imageId.SetText(resources.Images[i].TexName ?? "");
                }
            }
            ImGui.EndChild();
            ImGui.NextColumn();
            ImGui.BeginChild("##pane");
            if (_selTexIndex >= 0 && _selTexIndex < resources.Images.Count)
            {
                var img = resources.Images[_selTexIndex];
                ImGui.SameLine(ImGui.GetColumnWidth() - 65);
                if (ImGui.Button("Delete"))
                {
                    resources.Images.RemoveAt(_selTexIndex);
                    _selTexIndex = -1;
                }
                ImGui.Separator();
                var ft2 = context.ResourceManager.FindTexture(img.TexName) as Texture2D;
                if (foundTexture != ft2)
                {
                    if (foundTexture != null)
                    {
                        ImGuiHelper.DeregisterTexture(foundTexture);
                    }
                    foundTexture = ft2;
                    if (ft2 != null)
                    {
                        foundTextureId = ImGuiHelper.RegisterTexture(foundTexture);
                    }
                }
                ImGui.AlignTextToFramePadding();
                ImGui.Text("Name: ");
                ImGui.SameLine();
                imageName.InputText("##Name", ImGuiInputTextFlags.None);
                img.Name = imageName.GetText();
                ImGui.AlignTextToFramePadding();
                ImGui.Text("Texture: ");
                ImGui.SameLine();
                imageId.InputText("##Texture", ImGuiInputTextFlags.None);
                img.TexName = imageId.GetText();
                if (img.Type != InterfaceImageKind.Triangle)
                {
                    bool flip = img.Flip;
                    ImGui.Checkbox("Flip", ref flip);
                    img.Flip = flip;
                }

                //DRAW. No controls below here
                DoImagePreview(img);
            }

            ImGui.EndChild();
            ImGui.EndChild();
        }
Пример #9
0
        void Player(double delta)
        {
            bool childopened = true;

            ImGui.Begin("playwindow", ref childopened,
                        ImGuiWindowFlags.NoTitleBar |
                        ImGuiWindowFlags.NoSavedSettings |
                        ImGuiWindowFlags.NoBringToFrontOnFocus |
                        ImGuiWindowFlags.NoMove |
                        ImGuiWindowFlags.NoResize);
            var szX = Math.Max((int)ImGui.GetWindowContentRegionWidth(), 32);
            var szY = Math.Max((int)ImGui.GetWindowHeight() - (int)(20 * ImGuiHelper.Scale), 32);

            if (rtX != szX || rtY != szY)
            {
                rtX = szX;
                rtY = szY;
                if (renderTarget != null)
                {
                    ImGuiHelper.DeregisterTexture(renderTarget.Texture);
                    renderTarget.Dispose();
                }
                renderTarget      = new RenderTarget2D(rtX, rtY);
                renderTargetImage = ImGuiHelper.RegisterTexture(renderTarget.Texture);
            }
            RenderContext.RenderTarget = renderTarget;
            RenderContext.PushViewport(0, 0, rtX, rtY);
            RenderContext.ClearColor = Color4.Black;
            RenderContext.ClearAll();
            //Do drawing
            _playContext.GlobalTime     = TotalTime;
            _playContext.ViewportWidth  = rtX;
            _playContext.ViewportHeight = rtY;
            _playContext.RenderWidget(delta);
            //
            RenderContext.PopViewport();
            RenderContext.RenderTarget = null;
            //We don't use ImageButton because we need to be specific about sizing
            var cPos = ImGui.GetCursorPos();

            ImGui.Image((IntPtr)renderTargetImage, new Vector2(rtX, rtY), new Vector2(0, 1), new Vector2(1, 0));
            ImGui.SetCursorPos(cPos);
            var wPos = ImGui.GetWindowPos();
            var mX   = (int)(Mouse.X - cPos.X - wPos.X);
            var mY   = (int)(Mouse.Y - cPos.Y - wPos.Y);

            ImGui.InvisibleButton("##renderThing", new Vector2(rtX, rtY));
            if (ImGui.IsItemHovered())
            {
                if (ImGui.GetIO().MouseWheel != 0)
                {
                    _playContext.OnMouseWheel(ImGui.GetIO().MouseWheel);
                }
                _playContext.Update(null, TotalTime, mX, mY, false);
                mouseWanted = _playContext.MouseWanted(mX, mY);
                if (ImGui.IsItemClicked(0))
                {
                    _playContext.OnMouseClick();
                }
                var isDown = ImGui.IsMouseDown(0);
                if (lastDown && !isDown)
                {
                    _playContext.OnMouseUp();
                }
                if (isDown && !lastDown)
                {
                    _playContext.OnMouseDown();
                }
                _playContext.MouseLeftDown = isDown;
                lastDown = isDown;
            }
            else
            {
                mouseWanted = false;
                _playContext.Update(null, TotalTime, 0, 0, false);
                _playContext.MouseLeftDown = false;
                if (lastDown)
                {
                    lastDown = false;
                    _playContext.OnMouseUp();
                }
            }
            ImGui.End();
        }
Пример #10
0
        public void Draw(int width, int height, double delta)
        {
            //Set viewport
            height -= 30;
            if (width <= 0)
            {
                width = 1;
            }
            if (height <= 0)
            {
                height = 1;
            }
            if (width != rw || height != rh)
            {
                if (rtarget != null)
                {
                    ImGuiHelper.DeregisterTexture(rtarget.Texture);
                    rtarget.Dispose();
                }
                rtarget = new RenderTarget2D(width, height);
                rw      = width;
                rh      = height;
                rt      = ImGuiHelper.RegisterTexture(rtarget.Texture);
            }
            //Draw
            win.RenderContext.PushViewport(0, 0, width, height);
            ctx.ViewportWidth              = width;
            ctx.ViewportHeight             = height;
            ctx.RenderContext.RenderTarget = rtarget;
            ctx.RenderContext.ClearColor   = Color4.TransparentBlack;
            ctx.RenderContext.ClearAll();
            ctx.RenderWidget(delta);
            ctx.RenderContext.RenderTarget = null;
            win.RenderContext.PopViewport();
            //ImGui
            //TODO: Implement in Navmap then add buttons

            /*
             * NavButton("nav_labels", "Show Labels", true);
             * ImGui.SameLine();
             * ImGui.Dummy(new Vector2(72, 16)); //padding
             * ImGui.SameLine();
             * NavButton("nav_physical", "Physical Map", false);
             * ImGui.SameLine();
             * NavButton("nav_political", "Political Map", false);
             * ImGui.SameLine();
             * NavButton("nav_patrol", "Patrol Paths", false);
             * ImGui.SameLine();
             * NavButton("nav_mining", "Mining Zones", false);
             * ImGui.SameLine();
             * NavButton("nav_legend", "Legend", false);
             * ImGui.SameLine();
             * NavButton("nav_knownbases", "Known Bases", false);
             */
            var cpos = ImGui.GetCursorPos();

            ImGui.Image((IntPtr)rt, new Vector2(width, height), new Vector2(0, 1), new Vector2(1, 0),
                        Color4.White);
            ImGui.SetCursorPos(cpos);
            ImGui.InvisibleButton("##navmap", new Vector2(width, height));
        }