Пример #1
0
 public void Update(ScreenData data)
 {
     foreach (var surface in surfaces)
     {
         if (surface.SurfaceSize.Y / surface.SurfaceSize.X >= 0.5f)
         {
             DrawRegular(surface, data);
         }
         else
         {
             DrawSlim(surface);
         }
     }
 }
Пример #2
0
        void DrawRegular(IMyTextSurface surface, ScreenData data)
        {
            Color background = surface.ScriptBackgroundColor;
            Color foreground = surface.ScriptForegroundColor;
            Color white      = new Color(230, 230, 230);
            //Color gray0 = new Color(200, 200, 200);
            Color gray1   = new Color(130, 130, 130);
            Color gray2   = new Color(15, 15, 15);
            Color darken  = new Color(50, 50, 50, 200);
            Color darken2 = new Color(0, 0, 0, 150);

            white = foreground;
            var hsv = ColorExtensions.ColorToHSV(foreground);

            hsv.Y *= 0.6f;
            hsv.Z *= 0.6f;
            gray1  = ColorExtensions.HSVtoColor(hsv);

            //Canvas canvas = new Canvas((surface.TextureSize - surface.TextureSize * 1f) * 0.5f, surface.TextureSize * 1f);
            Canvas canvas = new Canvas((surface.TextureSize - Vec(surface.SurfaceSize.Y * 1f)) * 0.5f, Vec(surface.SurfaceSize.Y * 1f));

            //if (background.ColorToHSV().Z < 0.01)
            //{
            //	white = new Color(230, 230, 230);
            //	darken = new Color(200, 200, 200, 10);
            //	darken2 = new Color(200, 200, 200, 20);
            //	gray0 = new Color(50, 50, 50);
            //	gray1 = new Color(25, 25, 25);
            //}

            using (var frame = surface.DrawFrame())
            {
                //Inner circle
                frame.Add(canvas.Circle(Vec(0, 0), Vec(0.95f), darken));
                frame.Add(canvas.Rect(Vec(0, -0.136f), Vec(0.95f, 0.9f), background));
                frame.Add(canvas.CircleHollow(Vec(0, 0), Vec(1f), gray2));
                frame.Add(canvas.CircleHollow(Vec(0, 0), Vec(0.95f), gray1));



                //Right progress bg
                frame.Add(canvas.Rect(Vec(0.3f, 0), Vec(0.055f, 0.3f), darken));
                frame.Add(canvas.Progress(Vec(0.3f, 0), Vec(0.3f, 0.055f), Color.Orange, data.thrustOverrideH2, rotation: 4.71239f));
                frame.Add(canvas.TriangleRight(Vec(0.3f, -0.13f), Vec(0.06f, 0.04f), background, rotation: MathHelper.ToRadians(180)));
                frame.Add(canvas.TriangleRight(Vec(0.3f, 0.13f), Vec(0.04f, 0.06f), background, rotation: MathHelper.ToRadians(-90)));
                frame.Add(canvas.Rect(Vec(0.3f, 0), Vec(0.06f, 0.008f), background));



                //Left progress bg
                frame.Add(canvas.Rect(Vec(-0.3f, 0), Vec(0.055f, 0.3f), darken));
                frame.Add(canvas.Progress(Vec(-0.3f, 0), Vec(0.3f, 0.055f), Color.Blue, data.thrustOverridePW, rotation: 4.71239f));
                frame.Add(canvas.TriangleRight(Vec(-0.3f, -0.13f), Vec(0.04f, 0.06f), background, rotation: MathHelper.ToRadians(90)));
                frame.Add(canvas.TriangleRight(Vec(-0.3f, 0.13f), Vec(0.06f, 0.04f), background));
                frame.Add(canvas.Rect(Vec(0 - .3f, 0), Vec(0.06f, 0.008f), background));


                //Icons
                frame.Add(canvas.Sprite("IconHydrogen", Vec(0.3f, -0.2f), Vec(0.08f, 0.08f), white, Anchor.Center));
                frame.Add(canvas.Sprite("IconEnergy", Vec(-0.3f, -0.2f), Vec(0.1f, 0.1f), white, Anchor.Center));

                //Thrust text
                frame.Add(canvas.Text((data.cruiseEnabled ? string.Format("{0:0%}", data.thrustOverrideH2) : ""), Vec(0.30f, 0.185f), 0.08f, white));
                frame.Add(canvas.Text((data.cruiseEnabled ? string.Format("{0:0%}", data.thrustOverridePW) : ""), Vec(-0.30f, 0.185f), 0.08f, white));



                //Speedometer
                double speedAngle = ((Math.Abs(data.targetSpeed) / data.maxSpeed) * 4.71238898) + 0.785398163;
                frame.Add(canvas.Triangle(Vec(0, 0), Vec(0.04f), gray2, rotation: (float)speedAngle, offset: Vec(0, 0.46f)));

                speedAngle = ((Math.Abs(data.speed) / data.maxSpeed) * 4.71238898) + 0.785398163;                 //percent * 270 degrees + 45 degrees offset.
                frame.Add(canvas.Rect(Vec(0, 0), Vec(0.01f, 0.1f), white, rotation: (float)speedAngle, offset: Vec(0, 0.435f)));



                //Speedometer ticks
                frame.Add(canvas.Triangle(Vec(0, 0), Vec(0.01f, 0.06f), white, rotation: (float)Math.PI, offset: Vec(0, 0.468f)));
                frame.Add(canvas.Triangle(Vec(0, 0), Vec(0.01f, 0.06f), white, rotation: (float)Math.PI * 0.625f, offset: Vec(0, 0.468f)));
                frame.Add(canvas.Triangle(Vec(0, 0), Vec(0.01f, 0.06f), white, rotation: (float)Math.PI * 0.25f, offset: Vec(0, 0.468f)));

                frame.Add(canvas.Triangle(Vec(0, 0), Vec(0.01f, 0.06f), white, rotation: (float)Math.PI * -0.625f, offset: Vec(0, 0.468f)));
                frame.Add(canvas.Triangle(Vec(0, -0), Vec(0.01f, 0.06f), white, rotation: (float)Math.PI * -0.25f, offset: Vec(0, 0.468f)));



                frame.Add(canvas.Text(data.speed.ToString("n0"), Vec(0, -0.20f), 0.16f, white));
                frame.Add(canvas.Text($"[{data.targetSpeed.ToString("n0")}]", Vec(0, -0.09f), 0.14f, white));
                frame.Add(canvas.Text("m/s", Vec(0, 0), 0.1f, gray1));

                //frame.Add(canvas.Rect(Vec(-0.15f, 0.20f), Vec(0.01f, 0.16f), darken2));
                //frame.Add(canvas.Rect(Vec(0.15f, 0.20f), Vec(0.01f, 0.16f), darken2));


                frame.Add(canvas.Text("Cruise", Vec(0, 0.15f), 0.1f, gray1));
                frame.Add(canvas.Text("Align", Vec(0, 0.25f), 0.1f, gray1));

                if (data.cruiseEnabled)
                {
                    frame.Add(canvas.Rect(Vec(-0.15f, 0.15f), Vec(0.02f, 0.06f), Color.Green));
                }
                else
                {
                    frame.Add(canvas.Rect(Vec(-0.15f, 0.15f), Vec(0.02f, 0.06f), Color.Red));
                }

                if (data.alignEnabled)
                {
                    frame.Add(canvas.Rect(Vec(-0.15f, 0.25f), Vec(0.02f, 0.06f), Color.Green));
                }
                else
                {
                    frame.Add(canvas.Rect(Vec(-0.15f, 0.25f), Vec(0.02f, 0.06f), Color.Red));
                }

                //Create angle on indicators
                frame.Add(canvas.Triangle(Vec(-0.13f, 0.10f), Vec(0.08f), background, rotation: 1.57079633f));
                frame.Add(canvas.Triangle(Vec(-0.13f, 0.20f), Vec(0.08f), background, rotation: 1.57079633f));
                frame.Add(canvas.TriangleRight(Vec(-0.13f, 0.284f), Vec(0.08f, 0.04f), background));



                //Arrow max
                //frame.Add(canvas.Rect(Vec(0, -0.392f), Vec(0.02f), gray1, Anchor.Center));
                frame.Add(canvas.Triangle(Vec(0, -0.41f), Vec(0.04f, 0.06f), gray1, Anchor.Center));
                frame.Add(canvas.Rect(Vec(0, -0.426f), Vec(0.04f, 0.01f), gray1, Anchor.Center));

                //Arrow min
                //frame.Add(canvas.Rect(Vec(0, 0.392f), Vec(0.02f), gray1, Anchor.Center));
                frame.Add(canvas.Triangle(Vec(0, 0.41f), Vec(0.04f, 0.06f), gray1, Anchor.Center, rotation: (float)Math.PI));
                frame.Add(canvas.Rect(Vec(0, 0.426f), Vec(0.04f, 0.01f), gray1, Anchor.Center));

                //Max alt text
                if (data.maxAlt == double.MaxValue)
                {
                    frame.Add(canvas.Text("--", Vec(0, -0.35f), 0.07f, gray1));
                }
                else
                {
                    frame.Add(canvas.Text(data.maxAlt.ToString("n0") + "m", Vec(0, -0.35f), 0.07f, gray1));
                }
                frame.Add(canvas.Text(data.minAlt.ToString("n1") + "m", Vec(0, 0.35f), 0.07f, gray1));
            }
        }
Пример #3
0
        public void Main(string argument, UpdateType updateType)
        {
            time += Runtime.TimeSinceLastRun;

            if (!Initialized && time.Seconds % 5 == 0)
            {
                //Run Init every 5 seconds if not initialized.
                Initialized = Init();
            }

            if (Initialized)
            {
                if ((updateType & (UpdateType.Terminal | UpdateType.Trigger)) != 0)
                {
                    Input(argument);
                }

                if ((updateType & UpdateType.Update10) != 0)
                {
                    //screen.WriteText($"Align: {(Align != null && Align.Enabled ? "on" : "off")}, Cruise: {(Cruise != null && Cruise.Enabled ? "on" : "off")}");
                    if (Align != null && Align.Enabled)
                    {
                        Align.Update();
                    }

                    if (Cruise != null && Cruise.Enabled)
                    {
                        Cruise.Update(Runtime.TimeSinceLastRun.TotalSeconds);
                    }

                    if (LCDs != null)
                    {
                        ScreenData data = new ScreenData();

                        data.maxAlt   = targetAltAscending;
                        data.minAlt   = targetAltDescending;
                        data.maxSpeed = worldTopSpeed;
                        if (Cruise != null)
                        {
                            if (Cruise.Enabled)
                            {
                                data.speed       = Cruise.Speed;
                                data.targetSpeed = Cruise.AdaptiveTargetSpeed;
                            }
                            else if (MainController != null)
                            {
                                data.speed       = MainController.GetShipSpeed();
                                data.targetSpeed = targetSpeed;
                            }
                            data.thrustOverrideH2 = Cruise.ThrustOverrideHydrogen;
                            data.thrustOverridePW = Cruise.ThrustOverrideElectric;
                            data.cruiseEnabled    = Cruise.Enabled;
                        }
                        else
                        {
                            if (MainController != null)
                            {
                                data.speed = MainController.GetShipSpeed();
                            }
                            data.targetSpeed = targetSpeed;
                        }

                        if (Align != null)
                        {
                            data.alignEnabled = Align.Enabled;
                        }



                        LCDs.Update(data);
                    }
                }
            }

            DetailedInfo();
            BroadcastStatus();
            //DrawScreens();
        }