示例#1
0
        public void RenderEntity(Entity entity, RenderComponent renderComponent)
        {
            if (!renderComponent.IsVisible) {
            return;
             }

             if (renderComponent.IsCustomRendered) {
            renderComponent.HandleOnRender(
               new RenderEventArgs {
                  Renderer = this,
                  GraphicsDevice = graphicsDevice,
                  BasicEffect = basicEffect
               }
            );
             } else {
            var positionComponent = entity.GetComponent<PositionComponent>();
            var sizeComponent = entity.GetComponent<SizeComponent>();
            var orientationComponent = entity.GetComponent<OrientationComponent>();
            var boundsComponent = entity.GetComponent<BoundsComponent>();
            var colorComponent = entity.GetComponent<ColorComponent>();
            var commandQueueComponent = entity.GetComponentOrNull<CommandQueueComponent>();
            var zNudge = Vector3.Zero;
            if (sizeComponent.PositioningMode == VerticalPositioningMode.PositionBottom) {
               zNudge.Z = 0.5f;
            }

            var worldMatrix = Matrix.Translation(zNudge) *
                              Matrix.Scaling(sizeComponent.Size) *
                              Matrix.RotationQuaternion(orientationComponent.Orientation) *
                              Matrix.Translation(positionComponent.Position);

            DrawCube(worldMatrix, colorComponent.Color, false);
            DrawOrientedBoundingBox(boundsComponent.Bounds, new Vector4(1, 1, 1, 1));

            if (commandQueueComponent != null) {
               var pathingCommand = commandQueueComponent.CurrentCommand as PathingCommand;
               if (pathingCommand != null) {
                  var points = pathingCommand.Path.Points;
                  for (var i = 0 ; i < points.Length - 1; i++) {
                     DrawDebugLine(points[i], points[i + 1], Color.Cyan);
                  }
               }
            }
             }
        }