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); } }
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); }
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); } }
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); }
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)); } }
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); } }