xxxxxxxxxx
import std;
interface Renderer
{
}
struct VTable
{
void function(Chip, Renderer) draw;
}
void drawHovered(Chip c, Renderer renderer)
{
writeln("hovered ", c.state);
}
void drawInitial(Chip c, Renderer renderer)
{
writeln("initial ", c.state);
}
VTable Hovered = VTable(&drawHovered);
VTable Initial = VTable(&drawInitial);
void main()
{
Renderer renderer;
auto chip = new Chip();
// Test Draw
// 1. Init
chip.draw( renderer );
// 2. Hovered
chip.to(Hovered);
chip.draw( renderer );
// 3. Init
chip.to(Initial);
chip.draw( renderer );
// 4. Hovered
chip.to(Hovered);
chip.draw( renderer );
}
class Chip
{
int state = 7;
VTable vtable;
this()
{
vtable = Initial;
}
void to(VTable newVtable)
{
vtable = newVtable;
}
void draw( Renderer renderer )
{
vtable.draw(this, renderer);
}
}