private void AddElementsToPanels(MySpriteDrawFrame frame, bool isDoublePanel)
            {
                List <MySprite> backgroundSpriteList = new List <MySprite>();
                List <MySprite> headerSpriteList     = new List <MySprite>();
                List <MySprite> productionSpriteList = new List <MySprite>();
                List <MySprite> gasTanksSpriteList   = new List <MySprite>();
                List <MySprite> airlocksSpriteList   = new List <MySprite>();

                float screenOffset = 0;

                if (isDoublePanel)
                {
                    screenOffset = 512;
                }

                DrawBackground(backgroundSpriteList, screenOffset);
                DrawHeader(headerSpriteList, screenOffset);
                DrawProduction(productionSpriteList, screenOffset);
                DrawGasTanks(gasTanksSpriteList, screenOffset);
                DrawAirlocks(airlocksSpriteList, screenOffset);

                frame.AddRange(backgroundSpriteList);
                frame.AddRange(headerSpriteList);
                frame.AddRange(productionSpriteList);
                frame.AddRange(gasTanksSpriteList);
                frame.AddRange(airlocksSpriteList);
            }
 public void Draw()
 {
     using (MySpriteDrawFrame frame = textSurface.DrawFrame())
     {
         frame.AddRange(sprites.Values);
     }
 }
Esempio n. 3
0
            public override void OnCycle(IMyTextPanel lcd, TextPanelSetting setting)
            {
                this.lcd     = lcd;
                this.setting = setting;

                // Setting error.
                if (setting.HasError)
                {
                    SetError(setting.Status.ToString());
                    return;
                }

                // LCD dimension error.
                if (lcd.SurfaceSize.Y != 512)
                {
                    SetError("Solar map cannot be displayed on 5:3 text panel.");
                    return;
                }

                // Update propreties.
                spriteManager.Update(lcd, setting);

                // Paint.
                PaintMap();
                PaintInfoPanel();

                // Add paint. Must be added in the correct order.
                using (frame = lcd.DrawFrame())
                {
                    // Used to force the texture surface cache to refresh.
                    // See Whiplash141's original post: https://support.keenswh.com/spaceengineers/pc/topic/1-192-021-lcd-scripts-using-sprites-dont-work-in-mp
                    // See Georgik's original code: https://discordapp.com/channels/125011928711036928/216219467959500800/721065427140083832
                    if (isOdd)
                    {
                        frame.Add(new MySprite());
                    }

                    frame.AddRange(orbitSprites);
                    frame.AddRange(planetSprites);
                    frame.Add(grid);
                    frame.AddRange(infoSprites);
                }

                // Force texture cache to change every odd and even interval.
                isOdd = !isOdd;
            }
            public void AddElementsToPanel(int page, MySpriteDrawFrame frame)
            {
                List <MySprite>         backgroundSpriteList = new List <MySprite>();
                List <List <MySprite> > airventRowList       = new List <List <MySprite> >();
                List <MySprite>         footerSpriteList     = new List <MySprite>();

                DrawBackground(backgroundSpriteList);

                DrawAirvents(Airvents, airventRowList, page);

                DrawFooter(Airvents.Count, footerSpriteList, page);

                frame.AddRange(backgroundSpriteList);
                foreach (List <MySprite> airventRowSprites in airventRowList)
                {
                    frame.AddRange(airventRowSprites);
                }
                frame.AddRange(footerSpriteList);
            }
Esempio n. 5
0
        public void Render(Window window, StringBuilder text, ref MySpriteDrawFrame frame)
        {
            ScreenContent content = window.GetData <ScreenContent>();

            if (Monitor.Updating || content == null)
            {
                return;
            }
            if (content.Total)
            {
                RenderTotal(window, content);
            }
            else
            {
                RenderAll(window, content);
            }
            frame.AddRange(content.StaticSprites);
            foreach (var pb in content.ProgressBars)
            {
                frame.AddRange(pb);
            }
        }
Esempio n. 6
0
        private void UpdateScreen(MySpriteDrawFrame frame, IMyCameraBlock camera, MyDetectedEntityInfo info)
        {
            Vector2 size = new Vector2();

            if (status.Equals(STATUS_SR))
            {
                size = new Vector2(8, 8);
            }
            else if (status.Equals(STATUS_MR))
            {
                size = new Vector2(32, 32);
            }
            else if (status.Equals(STATUS_LR))
            {
                size = new Vector2(128, 128);
            }


            float   xPos = (cameraYaw + 64) * 8;
            float   yPos = 512 - (cameraPitch + 64) * 8;
            Vector2 pos  = new Vector2(xPos, yPos);

            Echo("Position: " + xPos + "," + yPos);

            var dot = MySprite.CreateSprite("SquareSimple", pos, size);

            if (info.IsEmpty())
            {
                Echo("Info Empty");
                dot.Color = Color.Black;
            }
            else
            {
                Echo("Info: " + Vector3D.Distance(camera.GetPosition(), info.HitPosition.Value).ToString("0.00"));
                int color = (int)Vector3D.Distance(camera.GetPosition(), info.HitPosition.Value);
                color = 255 - (color * 3);
                Echo("color: " + color);
                dot.Color = new Color(color, color, color);
            }

            drawPoints.Add(dot);
            frame.AddRange(drawPoints);
        }
Esempio n. 7
0
            override public void DrawFrame(MySpriteDrawFrame frame)
            {
                if (queuedMoves.Count == 0)
                {
                    queuedMoves.Add(NextMove());
                }
                using (frame)
                {
                    bool collision = false, over = true;
                    for (int i = queuedMoves.Count - 1; i >= 0; i--)
                    {
                        Vector2 oldPos  = queuedMoves[i].Sprite.Position.Value;
                        Vector2 nextPos = oldPos + speed;
                        if (nextPos.Y - Viewport.Y >= Size().Y)
                        {
                            queuedMoves.RemoveAt(i);
                        }
                        else
                        {
                            DanceSprite newMove = queuedMoves[i];
                            newMove.Sprite.Position = nextPos;
                            if (Collides(newMove.Sprite, activeBox))
                            {
                                collision = true;
                                if (program._floor != null)
                                {
                                    List <MyDetectedEntityInfo> entities = new List <MyDetectedEntityInfo>();
                                    program._sensor.DetectedEntities(entities);
                                    foreach (MyDetectedEntityInfo entity in entities)
                                    {
                                        if (EntityOver(program._floor[newMove.Index].Block, entity))
                                        {
                                            if (newMove.Success == false)
                                            {
                                                points         += 1;
                                                newMove.Success = true;
                                            }
                                        }
                                    }
                                }
                                over &= newMove.Success;
                            }
                            queuedMoves[i] = newMove;
                            if ((i == queuedMoves.Count - 1) && (nextPos.Y - Viewport.Position.Y >= Size().Y * 0.2))
                            {
                                queuedMoves.Add(NextMove());
                            }
                        }
                    }
                    if (collision)
                    {
                        activeBox.Color = over ? Color.Green : Color.Red;
                    }
                    else
                    {
                        activeBox.Color = Color.White;
                    }

                    frame.Add(new MySprite()
                    {
                        Type            = SpriteType.TEXT,
                        Data            = String.Format("Points {0}", points),
                        Position        = Viewport.Position,
                        RotationOrScale = 1.0f,
                        Color           = Color.Red,
                        Alignment       = TextAlignment.LEFT,
                        FontId          = "White"
                    });
                    frame.Add(activeBox);
                    frame.AddRange(queuedMoves.ConvertAll(move => move.Sprite));
                }
            }
Esempio n. 8
0
        public void Render(Window window, StringBuilder text, ref MySpriteDrawFrame frame)
        {
            var info       = window.GetData <ScreenContent>();
            int refcount   = Refineries.Count;
            int totalcount = refcount + Assemblers.Count;

            if (totalcount == 0)
            {
                return;
            }
            if (info.StaticSprites.Length != totalcount || info.ProgressBars.Length != totalcount)
            {
                var cells = window.Surface.MakeTable(totalcount, 2.0f, new Vector2(0.01f, 0.01f), new Vector2(0.01f, 0.01f), window.Area).GetEnumerator();
                info.StaticSprites = new MySprite[totalcount];
                info.ProgressBars  = new ProgressBar[totalcount];
                for (int i = 0; i < totalcount; i++)
                {
                    cells.MoveNext();
                    IMyTerminalBlock b = (i < refcount)
                        ? Refineries[i] as IMyTerminalBlock
                        : Assemblers[i - Refineries.Count].Block as IMyTerminalBlock;
                    string     name   = b.IsSameConstructAs(Owner.PB.Me) ? b.CustomName : $"[{b.CustomName}]";
                    RectangleF top    = cells.Current.SubRect(0.0f, 0.0f, 1.0f, 0.5f);
                    RectangleF bottom = cells.Current.SubRect(0.0f, 0.5f, 1.0f, 0.5f);
                    info.StaticSprites[i] = window.Surface.FitText(name, top, "Debug", window.Surface.ScriptForegroundColor);
                    info.ProgressBars[i]  = new ProgressBar(window.Surface, bottom, Color.Black, Color.Transparent, window.Surface.ScriptForegroundColor);
                }
            }
            for (int i = 0; i < totalcount; i++)
            {
                if (i < refcount)
                {
                    switch (GetRefineryStatus(Refineries[i]))
                    {
                    case ProductionStatus.Disabled: info.ProgressBars[i].ForegroundColor = Color.Red; break;

                    case ProductionStatus.Producing: info.ProgressBars[i].ForegroundColor = Color.Green; break;

                    case ProductionStatus.Waiting: info.ProgressBars[i].ForegroundColor = Color.Blue; break;
                    }
                    info.ProgressBars[i].Value = CalculateProgressForRefinery(Refineries[i]);
                }
                else
                {
                    switch (Assemblers[i - refcount].Status)
                    {
                    case ProductionStatus.Disabled: info.ProgressBars[i].ForegroundColor = Color.Red; break;

                    case ProductionStatus.Producing: info.ProgressBars[i].ForegroundColor = Color.Green; break;

                    case ProductionStatus.Waiting: info.ProgressBars[i].ForegroundColor = Color.Blue; break;
                    }
                    info.ProgressBars[i].Value = Assemblers[i - refcount].GetProgress();
                }
            }
            if (BgColor != Color.Transparent)
            {
                frame.Add(window.Surface.FitSprite("SquareSimple", window.Area, BgColor));
            }
            frame.AddRange(info.StaticSprites);
            foreach (var pb in info.ProgressBars)
            {
                frame.AddRange(pb);
            }
        }