private void OnDraw(EngineDrawEventArgs args) { if (Entity == null) { return; } var entityLabel = Entity.Name + "[" + Entity.Id + "], Loc: " + (Entity.Parent?.Name ?? "<none>"); var position = Entity.GetBehavior <TransformBehavior>()?.Position.XZ(); if (position == null) { return; } using (var format = new CanvasTextFormat { FontSize = 11 }) { args.DrawingSession.DrawText( entityLabel, position.Value + new Vector2(0, -20), Colors.DarkGray, format); } if (_isMouseOver) { args.DrawingSession.DrawCircle(position.Value, 6.0f, _mouseOverIndicatorColor, 2.5f); } }
private void OnDraw(EngineDrawEventArgs e) { if (Sprite != _oldSprite) { // Sprite has changed since last draw _rotateEffect?.Dispose(); _rotateEffect = null; } if (Sprite == SpriteReference.Empty) { return; } var transform = Entity.GetBehavior <TransformBehavior>(); var coords = Entity.Level.RootEntity.GetImplementation <ICoordinateSystem>(); var sprite = Sprite.Resolve(Entity); if (transform == null) { throw new InvalidOperationException($"No {nameof(TransformBehavior)} is attached"); } if (coords != null && sprite != null) { var worldPos = transform.Position; var worldRect = new Rect( worldPos.X - transform.Scale.X * sprite.Size.X / 2, worldPos.Y - transform.Scale.X * sprite.Size.Y / 2, transform.Scale.X * sprite.Size.X, transform.Scale.X * sprite.Size.Y); var dipsRect = coords.TransformToDips(worldRect); ICanvasImage renderImage; // If rotation is 0 we can draw the sprite directly. // Otherwise, use a Transform2DEffect to rotate. if (Math.Abs(transform.Rotation) <= float.Epsilon) { renderImage = sprite.Image; } else { _rotateEffect = _rotateEffect ?? new Transform2DEffect { Source = sprite.Image }; _rotateEffect.TransformMatrix = Matrix3x2.CreateRotation(transform.RotationRadians); renderImage = _rotateEffect; } e.DrawingSession.DrawImage(renderImage, dipsRect, renderImage.GetBounds(e.DrawingSession)); } _oldSprite = Sprite; }
private void OnDraw(EngineDrawEventArgs e) { _terrainMap.Properties["dpi"] = e.Sender.Dpi; _terrainMap.Properties["baseHeight"] = _terrain.BaseHeight; _terrainMap.Properties["heightDiff"] = _terrain.Height - _terrain.BaseHeight; _terrainMap.Properties["grassColor"] = _grassColor.ToVector4(); _terrainMap.Properties["snowColor"] = _snowColor.ToVector4(); _terrainMap.Properties["rockColor"] = _rockColor.ToVector4(); _terrainMap.Properties["snowMinHeight"] = 2000f; e.DrawingSession.DrawImage(_terrainMap); }
protected override void Draw(EngineDrawEventArgs e) { var worldPos = _coordinateSystem.TransformToWorld3D(LastMouseScreenPosition); e.DrawingSession.DrawCircle(LastMouseScreenPosition, 4, Colors.Red); e.DrawingSession.DrawText( $"[{(int)worldPos.X}, {(int)worldPos.Y}, {(int)worldPos.Z}]", new Vector2(10, 10), Colors.Red, new CanvasTextFormat { FontWeight = FontWeights.Bold }); }
private void OnRender(EngineDrawEventArgs args) { var absolutePosition = Entity.GetBehavior <TransformBehavior>().Position.XZ(); var halfSize = new Vector2((float)(Size.Width / 2), (float)(Size.Height / 2)); switch (Geometry) { case SimpleGeometry.Circle: if (FillGeometry) { args.DrawingSession.FillCircle(absolutePosition, (float)(Size.Width / 2), Color); } else { args.DrawingSession.DrawCircle(absolutePosition, (float)(Size.Width / 2), Color); } break; case SimpleGeometry.Square: var pos = absolutePosition - halfSize; if (FillGeometry) { args.DrawingSession.FillRectangle(new Rect(pos.X, pos.Y, Size.Width, Size.Height), Color); } else { args.DrawingSession.DrawRectangle(new Rect(pos.X, pos.Y, Size.Width, Size.Height), Color); } break; } if (DrawCenter) { var color = Color; if (FillGeometry) { color = Colors.Black; } args.DrawingSession.DrawCircle(absolutePosition, 1.0f, color); } }
private void OnRender(EngineDrawEventArgs args) { var coordinateSystem = Entity.Level.RootEntity.GetImplementation <ICoordinateSystem>(); var lineTransform = Entity.GetImplementation <ILineTransform>(); if (coordinateSystem == null || lineTransform == null) { return; } var startPoint = coordinateSystem.TransformToDips(lineTransform.Point1); var endPoint = coordinateSystem.TransformToDips(lineTransform.Point2); var sprite = Sprite.Resolve(Entity); if (sprite == null) { // Use Color // TODO: Stroke width? args.DrawingSession.DrawLine(startPoint, endPoint, Color); } else { // Use Sprite // TODO: Respect sprite size and adjust stroke width accordingly // TODO: Rotate sprite depending on the angle of the line if (_spriteBrush == null) { var brush = new CanvasImageBrush(args.Sender, sprite.Image); brush.ExtendX = Microsoft.Graphics.Canvas.CanvasEdgeBehavior.Wrap; brush.ExtendY = Microsoft.Graphics.Canvas.CanvasEdgeBehavior.Wrap; _spriteBrush = brush; } args.DrawingSession.DrawLine(startPoint, endPoint, _spriteBrush); } }
private bool CanRender(EngineDrawEventArgs args) => IsEffectivelyVisible;
private void OnDraw(EngineDrawEventArgs args) { _canvasSize = args.Sender.Size; }
protected virtual void Draw(EngineDrawEventArgs e) { e.DrawingSession.DrawCircle(LastMouseScreenPosition, 10, Colors.Red); }