public void DrawBlocker(int x1, int y1, int x2, int y2, MicroWorld.Graphics.Renderer renderer, float opacity, bool safe = false) { if (!safe) { if (x1 > x2) { int t = x1; x1 = x2; x2 = t; } if (y1 > y2) { int t = y1; y1 = y2; y2 = t; } if (x2 - x1 < 8 || y2 - y1 < 8) return; } bool b = renderer.IsDrawing; if (b) renderer.End(); renderer.Begin(SpriteSortMode.Immediate, null, SamplerState.PointWrap, null, null); Color c = Color.White * opacity; int sx = x2 - x1; int sy = y2 - y1; renderer.Draw(bg, new Rectangle(x1, y1, sx, sy), new Rectangle(0, 0, sx * 4, sy * 4), c * 0.6f); renderer.Draw(Shortcuts.pixel, new Vector2(x1, y1), null, c, 0, Vector2.Zero, new Vector2(0.25f, sy), SpriteEffects.None, 0); renderer.End(); if (b) renderer.Begin(); }
public override void Draw(MicroWorld.Graphics.Renderer renderer) { if (texture0cw == null) return; if (!CanDraw()) return; Components.Logics.VoltageGraphLogics l = (Components.Logics.VoltageGraphLogics)parent.Logics; UpdateFBO(); switch (parent.ComponentRotation) { case Component.Rotation.cw0: renderer.Draw(texture0cw, new Rectangle((int)Position.X, (int)Position.Y, (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null, Color.White); break; case Component.Rotation.cw90: renderer.Draw(texture90cw, new Rectangle((int)Position.X, (int)Position.Y, (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null, Color.White); break; case Component.Rotation.cw180: renderer.Draw(texture180cw, new Rectangle((int)Position.X, (int)Position.Y, (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null, Color.White); break; case Component.Rotation.cw270: renderer.Draw(texture270cw, new Rectangle((int)Position.X, (int)Position.Y, (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null, Color.White); break; default: break; } if (parent.ComponentRotation == Component.Rotation.cw0 || parent.ComponentRotation == Component.Rotation.cw180) renderer.Draw(fbo, new Rectangle((int)Position.X + 15, (int)Position.Y + 11, 39, 23), null, Color.White); else renderer.Draw(fbo, new Rectangle((int)Position.X + 29, (int)Position.Y + 15, 39, 23), null, Color.White, (float)Math.PI / 2, Vector2.Zero); renderer.End(); renderer.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.Default, RasterizerState.CullNone, null, Matrix.CreateScale(0.25f), true); if (parent.ComponentRotation == Component.Rotation.cw0 || parent.ComponentRotation == Component.Rotation.cw180) { renderer.DrawStringRight(font, l.max.ToString(), new Rectangle((int)Position.X * 4 + 42, (int)Position.Y * 4 + 47, 12, 8), Color.Gray); renderer.DrawStringRight(font, l.min.ToString(), new Rectangle((int)Position.X * 4 + 42, (int)Position.Y * 4 + 125, 12, 8), Color.Gray); } else { renderer.DrawStringLeft(font, l.min.ToString(), Position * 4 + new Vector2(26, 44), Color.Gray); renderer.DrawStringRight(font, l.max.ToString(), new Rectangle((int)Position.X * 4 + 102, (int)Position.Y * 4 + 44, 12, 8), Color.Gray); } renderer.End(); renderer.Begin(); }
public void DrawFrame(int x1, int y1, int x2, int y2, MicroWorld.Graphics.Renderer renderer, float opacity, bool safe = false) { if (!safe) { if (x1 > x2) { int t = x1; x1 = x2; x2 = t; } if (y1 > y2) { int t = y1; y1 = y2; y2 = t; } if (x2 - x1 < 32 || y2 - y1 < 32) return; } bool b = renderer.IsDrawing; if (!b) renderer.Begin(SpriteSortMode.Immediate, null, SamplerState.PointWrap, null, null); Color c = Color.White * opacity; int sx = x2 - x1; int sy = y2 - y1; renderer.Draw(bg, new Rectangle(x1 + 8, y1 + 8, sx - 16, sy - 16), new Rectangle(0, 0, sx * 4 - 64, sy * 4 - 64), c * 0.6f); renderer.Draw(top, new Rectangle(x1 + 8, y1, sx - 16, 8), new Rectangle(0, 0, sx * 4 - 64, 32), c); renderer.Draw(left, new Rectangle(x1, y1 + 8, 8, sy - 16), new Rectangle(0, 0, 32, sy * 4 - 64), c); renderer.Draw(bottom, new Rectangle(x1 + 8, y2 - 8, sx - 16, 8), new Rectangle(0, 0, sx * 4 - 64, 32), c); renderer.Draw(right, new Rectangle(x2 - 8, y1 + 8, 8, sy - 16), new Rectangle(0, 0, 32, sy * 4 - 64), c); if (!b) renderer.End(); }
public void DrawToFBO(MicroWorld.Graphics.Renderer renderer) { var p = parent as Frame; renderer.EnableFBO(p.fbo); renderer.GraphicsDevice.Clear(Color.Transparent); var s = Settings.GameScale; Settings.GameScale = MicroWorld.Graphics.Camera.ZOOM_MAX; var t = Shortcuts.camera.Center; var a = Shortcuts.camera.VisibleRectangle; Shortcuts.camera.Center = Position + new Vector2(a.Width / 2, a.Height / 2); renderer.Begin(); DrawFrame((int)Position.X, (int)Position.Y, (int)(Position.X + Size.X), (int)(Position.Y + Size.Y), renderer, 1f, true); for (int i = 0; i < p.containsComponents.Length; i++) { if (!renderer.IsDrawing) renderer.Begin(); p.containsComponents[i].Graphics.IgnoreNextDraw = true; p.containsComponents[i].Graphics.Draw(renderer); } renderer.End(); Shortcuts.camera.Center = t; Settings.GameScale = s; renderer.DisableFBO(); }
public void DrawTrajectory(MicroWorld.Graphics.Renderer renderer) { float rad = 100f; var p = parent as Motor; if (p.connector != null) { var a1 = p.connector.ConnectedComponent1.Graphics.Position + p.connector.ConnectedComponent1.Graphics.GetSize() / 2; var a2 = p.connector.ConnectedComponent2.Graphics.Position + p.connector.ConnectedComponent2.Graphics.GetSize() / 2; rad = Math.Abs((a2 - a1).Length()); } else return; MicroWorld.Graphics.RenderHelper.DrawDottedCircle(rad, Position + GetSize() / 2, 60, (float)((Main.Ticks % 40) * Math.PI / 40f / 15f), renderer, Color.White); return; float opacity = 1f; VertexPositionColorTexture[] arr = new VertexPositionColorTexture[60]; double d = (float)((Main.Ticks % 40)) * Math.PI / 40f / 15f; int c = 0; Vector2 off = Position + GetSize() / 2; for (double i = 0; i <= Math.PI * 2 - 0.001d; i += Math.PI / 30d) { arr[c] = new VertexPositionColorTexture( new Vector3((float)Math.Cos(i + d) * rad + off.X, (float)Math.Sin(i + d) * rad + off.Y, 0), Color.White * opacity, new Vector2()); c++; } Main.renderer.Draw(MicroWorld.Graphics.GraphicsEngine.pixel, new Rectangle(0, 0, 0, 0), Color.White); bool a = renderer.IsDrawing; bool b = renderer.IsScaeld; if (renderer.IsDrawing) renderer.End(); renderer.GraphicsDevice.DrawUserPrimitives<VertexPositionColorTexture>(PrimitiveType.LineList, arr, 0, arr.Length / 2); if (a) renderer.Begin(b); }
public void DrawGhost(MicroWorld.Graphics.Renderer renderer, int x1, int y1, int x2, int y2) { MicroWorld.Logics.GridHelper.GridCoords(ref x1, ref y1); MicroWorld.Logics.GridHelper.GridCoords(ref x2, ref y2); if (x1 > x2) { int t = x1; x1 = x2; x2 = t; } if (y1 > y2) { int t = y1; y1 = y2; y2 = t; } Graphics.Position = new Vector2(x1, y1); Graphics.Size = new Vector2(x2 - x1, y2 - y1); bool b = renderer.IsDrawing; if (b) renderer.End(); renderer.Begin(); if (CanEnd(x1, y1, x2, y2)) renderer.Draw(MicroWorld.Graphics.GraphicsEngine.pixel, new Rectangle(x1, y1, x2 - x1, y2 - y1), Color.White * 0.3f); else renderer.Draw(MicroWorld.Graphics.GraphicsEngine.pixel, new Rectangle(x1, y1, x2 - x1, y2 - y1), Color.Red * 0.3f); renderer.End(); (Graphics as Graphics.FrameGraphics).DrawFrame(x1, y1, x2, y2, renderer, 0.5f, false); if (b) renderer.Begin(); }
public void DrawToFBO(MicroWorld.Graphics.Renderer renderer) { var p = parent as Blocker; renderer.EnableFBO(p.fbo); renderer.GraphicsDevice.Clear(Color.Transparent); renderer.BeginUnscaled(); renderer.Draw(bg, new Rectangle(0, 0, (int)Size.X * 4, (int)Size.Y * 4), new Rectangle(0, 0, (int)Size.X * 4, (int)Size.Y * 4), Color.White); renderer.Draw(Shortcuts.pixel, new Rectangle(0, 0, 2, (int)Size.Y * 4), Color.White); renderer.Draw(Shortcuts.pixel, new Rectangle(0, 0, (int)Size.X * 4, 2), Color.White); renderer.Draw(Shortcuts.pixel, new Rectangle((int)Size.X * 4 - 2, 0, 2, (int)Size.Y * 4), Color.White); renderer.Draw(Shortcuts.pixel, new Rectangle(0, (int)Size.Y * 4 - 2, (int)Size.X * 4, 2), Color.White); renderer.End(); renderer.DisableFBO(); }
public override void Draw(MicroWorld.Graphics.Renderer renderer) { if (!CanDraw()) return; MovementDetectorLaser p = parent as MovementDetectorLaser; if (p.Length == 0) return; renderer.End(); Matrix projection = Matrix.CreateOrthographicOffCenter(0, Main.WindowWidth, Main.WindowHeight, 0, 0, 1); Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0); MicroWorld.Graphics.Effects.Effects.laser.Parameters["MatrixTransform"].SetValue(renderer.GetTransformMatrix() * halfPixelOffset * projection); float pw = 1f / Main.WindowWidth; MicroWorld.Graphics.Effects.Effects.laser.Parameters["halfpixel"].SetValue(new float[] { pw / 2f, 0.5f / Main.WindowHeight }); MicroWorld.Graphics.Effects.Effects.laser.Parameters["horizontal"].SetValue(p.type == MovementDetectorLaser.Direction.Left || p.type == MovementDetectorLaser.Direction.Right); Random r = new Random(); if (tb == 4) { tb = 0; for (int i = 0; i < rand.Length; i++) rand[i] = r.Next(256); } tb++; MicroWorld.Graphics.Effects.Effects.laser.Parameters["random"].SetValue(rand); renderer.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.None, RasterizerState.CullNone, MicroWorld.Graphics.Effects.Effects.laser); int dis = 1; switch (p.type) { case MovementDetectorLaser.Direction.Up: renderer.Draw(Shortcuts.pixel, new Rectangle((int)Position.X - dis, (int)Position.Y - p.Length, dis * 2, p.Length), Color.White); for (int i = 0; i < 2; i++) { MicroWorld.Graphics.ParticleManager.Add( new MicroWorld.Graphics.Particles.Spark( Position + new Vector2(r.Next(5) - 2, -r.Next(p.Length)), new Vector2(1, 1), new Vector2(((float)r.NextDouble() - 0.5f) / 4, ((float)r.NextDouble() - 0.5f) / 4), (float)(r.NextDouble() + 0.1f) / 10, Color.Red)); } break; case MovementDetectorLaser.Direction.Left: renderer.Draw(Shortcuts.pixel, new Rectangle((int)Position.X - p.Length, (int)Position.Y - dis, p.Length, dis * 2), Color.White); for (int i = 0; i < 2; i++) { MicroWorld.Graphics.ParticleManager.Add( new MicroWorld.Graphics.Particles.Spark( Position + new Vector2(-r.Next(p.Length), r.Next(5) - 2), new Vector2(1, 1), new Vector2(((float)r.NextDouble() - 0.5f) / 4, ((float)r.NextDouble() - 0.5f) / 4), (float)(r.NextDouble() + 0.1f) / 10, Color.Red)); } break; case MovementDetectorLaser.Direction.Down: renderer.Draw(Shortcuts.pixel, new Rectangle((int)Position.X - dis, (int)Position.Y, dis * 2, p.Length), Color.White); for (int i = 0; i < 2; i++) { MicroWorld.Graphics.ParticleManager.Add( new MicroWorld.Graphics.Particles.Spark( Position + new Vector2(r.Next(5) - 2, r.Next(p.Length)), new Vector2(1, 1), new Vector2(((float)r.NextDouble() - 0.5f) / 4, ((float)r.NextDouble() - 0.5f) / 4), (float)(r.NextDouble() + 0.1f) / 10, Color.Red)); } break; case MovementDetectorLaser.Direction.Right: renderer.Draw(Shortcuts.pixel, new Rectangle((int)Position.X, (int)Position.Y - dis, p.Length, dis * 2), Color.White); for (int i = 0; i < 2; i++) { MicroWorld.Graphics.ParticleManager.Add( new MicroWorld.Graphics.Particles.Spark( Position + new Vector2(r.Next(p.Length), r.Next(5) - 2), new Vector2(1, 1), new Vector2(((float)r.NextDouble() - 0.5f) / 4, ((float)r.NextDouble() - 0.5f) / 4), (float)(r.NextDouble() + 0.1f) / 10, Color.Red)); } break; default: break; } renderer.End(); renderer.Begin(); }
public void DrawConnector(int x1, int y1, int x2, int y2, MicroWorld.Graphics.Renderer renderer, float opacity) { Color c = new Color(1f, 1f, 1f) * opacity; renderer.Draw(MicroWorld.Graphics.GraphicsEngine.circle, new Rectangle(x1 - CONNECTION_CIRCLE_SIZE, y1 - CONNECTION_CIRCLE_SIZE, CONNECTION_CIRCLE_SIZE * 2, CONNECTION_CIRCLE_SIZE * 2), c); renderer.Draw(MicroWorld.Graphics.GraphicsEngine.circle, new Rectangle(x2 - CONNECTION_CIRCLE_SIZE, y2 - CONNECTION_CIRCLE_SIZE, CONNECTION_CIRCLE_SIZE * 2, CONNECTION_CIRCLE_SIZE * 2), c); VertexPositionColorTexture[] arr = new VertexPositionColorTexture[12]; arr[0] = new VertexPositionColorTexture(new Vector3(x1 - 2, y1 - 2, 0), c, new Vector2()); arr[1] = new VertexPositionColorTexture(new Vector3(x2 - 2, y2 - 2, 0), c, new Vector2()); arr[2] = new VertexPositionColorTexture(new Vector3(x1 + 2, y1 + 2, 0), c, new Vector2()); arr[3] = new VertexPositionColorTexture(new Vector3(x1 + 2, y1 + 2, 0), c, new Vector2()); arr[4] = new VertexPositionColorTexture(new Vector3(x2 - 2, y2 - 2, 0), c, new Vector2()); arr[5] = new VertexPositionColorTexture(new Vector3(x2 + 2, y2 + 2, 0), c, new Vector2()); arr[6] = new VertexPositionColorTexture(new Vector3(x1 + 2, y1 - 2, 0), c, new Vector2()); arr[7] = new VertexPositionColorTexture(new Vector3(x2 + 2, y2 - 2, 0), c, new Vector2()); arr[8] = new VertexPositionColorTexture(new Vector3(x1 - 2, y1 + 2, 0), c, new Vector2()); arr[9] = new VertexPositionColorTexture(new Vector3(x1 - 2, y1 + 2, 0), c, new Vector2()); arr[10] = new VertexPositionColorTexture(new Vector3(x2 + 2, y2 - 2, 0), c, new Vector2()); arr[11] = new VertexPositionColorTexture(new Vector3(x2 - 2, y2 + 2, 0), c, new Vector2()); Main.renderer.Draw(MicroWorld.Graphics.GraphicsEngine.pixel, new Rectangle(0, 0, 0, 0), Color.White); bool a = renderer.IsDrawing; bool b = renderer.IsScaeld; if (renderer.IsDrawing) renderer.End(); renderer.GraphicsDevice.PresentationParameters.MultiSampleCount = 4; renderer.GraphicsDevice.DrawUserPrimitives<VertexPositionColorTexture>(PrimitiveType.TriangleList, arr, 0, 4); if (a) renderer.Begin(b); }