public static extern void SetRasterCallback(RasterCallback callback);
private static extern void TLN_SetRasterCallback(RasterCallback callback);
/* entry point */ static int Main(string[] args) { int c; int frame = 0; float speed = 0; /* setup engine */ engine = Engine.Init(Hres, Vres, 2, 0, 20); foreground = engine.Layers[0]; background = engine.Layers[1]; /* load resources*/ engine.LoadPath = "../assets/sonic"; LoadLayer(foreground, "Sonic_md_fg1.tmx"); LoadLayer(background, "Sonic_md_bg1.tmx"); // load sequences for animations SequencePack sp = SequencePack.FromFile("Sonic_md_seq.sqx"); Sequence waterSequence = sp.Find("seq_water"); Palette palette = background.Palette; engine.Animations[0].SetPaletteAnimation(palette, waterSequence, true); /* setup raster callback */ RasterCallback callback = new RasterCallback(MyRasterEffects); engine.SetRasterCallback(callback); /* main loop */ window = Window.Create(null, WindowFlags.Vsync); while (window.Process()) { /* inputs */ if (window.GetInput(Input.Right)) { speed += 0.02f; if (speed > 1.0f) { speed = 1.0f; } } else if (speed > 0.0f) { speed -= 0.02f; if (speed < 0.0f) { speed = 0.0f; } } if (window.GetInput(Input.Left)) { speed -= 0.02f; if (speed < -1.0f) { speed = -1.0f; } } else if (speed < 0.0f) { speed += 0.02f; if (speed > 0.0f) { speed = 0.0f; } } /* scroll */ posForeground += 3 * speed; foreground.SetPosition((int)posForeground, 0); for (c = 0; c < NumBackgroundStrips; c++) { posBackground[c] += (incBackground[c] * speed); } /* render to window */ window.DrawFrame(frame); frame++; } /* deinit */ sp.Delete(); engine.Deinit(); return(0); }