Fancy Consoles
Fancy consoles serve as a bridge between a traditional gridded console, and sprite graphics. They were originally designed to make it easier to add smooth movement to a game: you can offset or rotate characters when they are rendered. Fancy consoles are like sparse consoles in that they store all of the characters to be rendered, and not a traditional grid. They even allow characters to be overlaid on top of one another.
Hands-on Rust includes bonus content that uses a fancy console to provide a smooth-moving version of Flappy Dragon.

Initializing a Fancy Console
Fancy consoles are another creation option in the BTermBuilder chain. The following example creates a single fancy console:
#![allow(unused)] fn main() { let mut context = BTermBuilder::simple80x50() .with_fancy_console(80, 50, "terminal8x8.png") .with_title("Bracket Terminal - Fancy Consoles") .with_vsync(false) .build()?; }
Just like other consoles, you may use whatever font and size options you require.
Drawing to a Console
You clear a fancy console with the same ctx.cls() command as other consoles. You can also use the regular printing commands just like any other console. A new draw command is available to take advantage of the console's extended capabilities:
#![allow(unused)] fn main() { ctx.set_fancy( Location (PointF), z_order (i32), rotation (Angle), scale (PointF), foreground (RGBA), background (RGBA), glyph ); }
- Regular
printcommands take coordinates as integers. Fancy consoles accept floating point coordinates---represented by aPointFstructure. The fractional part is used to offset the current location;0.0will render at the left or top, while0.9will render at the right or bottom. You can use this to implement smooth movement. z_orderdetermines the order in which the glyphs are rendered.rotationtakes anAngletype (eitherRadiansorDegrees). If this is non-zero, the glyph will be rotated (around the center) by this amount.scalecontrols how large the character is.1.0will render at normal size. You can shrink it by going smaller, or expand it by going larger. Scaling occurs separately on thexandyaxes---you need to specify both in thePointF.fgandbgare render colors.glyphis a character type, like othersetcommands.
There's also batched versions of this. You can use batch.set_fancy in the same way to render as part of a batch.
The terminal source code includes an example called flexible to demonstrate this in action.