budnhead/bnhdemo/BootStrap.cs

95 lines
2.0 KiB
C#

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);
}
}
}