using System; using System.IO; using System.Drawing; using System.Drawing.Imaging; using OpenTK.Graphics.OpenGL4; using OpenTK; using OpenTK.Audio.OpenAL; using OpenTK.Audio; using ImageSharp; using ImageSharp.Processing; using org.budnhead.graphics; using org.budnhead.audio; using org.budnhead.core; namespace bnhdemo { public static class BootStrap { static SquaredMap map; static Actor trackedActor; static GLCamera trackingCamera; public static void Main(string[] args){ Engine.InitializeGraphics(); Engine.SceneWindows[0].Scene = new Scene(); loadMap(); Engine.SceneWindows[0].Visible = true; Engine.SceneWindows[0].KeyPress += (sender, e) => { switch (e.KeyChar){ case 'r': SceneWindow sw = Engine.createSceneWindow(); sw.Visible = true; sw.Scene = new Scene(Engine.SceneWindows[0].Scene); GLCamera cam = new GLCamera(); cam.Position = new Vector3(800,800,384); cam.View = new Vector3(-1,-1,-1); cam.Top = Vector3.UnitZ; CameraRotator cr = new CameraRotator(cam); sw.PrimaryViewport.SceneOrientation = cam; trackingCamera = cam; break; case ' ': Console.WriteLine("Fire Ballistic..."); BallisticActor ba = new BallisticActor(0); ba.Position.Value = map.ground(new Vector2(10,10)); ba.Velocity.Value = new Vector3(1,1,1).Normalized(); ba.Velocity.Value *= 100.0f; ba.fire(); trackedActor = ba; break; } }; Engine.AfterUpdate += delegate { if ((trackedActor != null)&&(trackingCamera != null)){ if (trackedActor.IsActive){ trackingCamera.lookAt(trackedActor.Position.Value); } else { trackedActor = null; } } }; Engine.run(); } public static void loadMap(){ ImageSharp.Image i = ImageSharp.Image.Load( new FileStream("M3-wip.png",FileMode.Open)); i.Flip(ImageSharp.Processing.FlipType.Vertical); map = new SquaredMap(i); Engine.SceneWindows[0].Scene.RootObject.addChild(map); } } }