155 lines
4.0 KiB
C#
155 lines
4.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;
|
|
using org.budnhead.tools;
|
|
|
|
namespace bnhdemo
|
|
{
|
|
public static class BootStrap
|
|
{
|
|
static SquaredMap map;
|
|
|
|
static Actor trackedActor;
|
|
static GLCamera trackingCamera;
|
|
|
|
static GLCamera primaryCamera;
|
|
static Viewport ballisticViewport;
|
|
|
|
public static void Main(string[] args){
|
|
Engine.InitializeGraphics();
|
|
|
|
Engine.SceneWindows[0].Scene = new Scene();
|
|
|
|
primaryCamera = new GLCamera();
|
|
primaryCamera.CameraController.SceneWindow = Engine.SceneWindows[0];
|
|
Engine.SceneWindows[0].PrimaryViewport.SceneOrientation = primaryCamera;
|
|
|
|
primaryCamera.Position = new Vector3(600,550,200);
|
|
primaryCamera.lookAt(new Vector3(125,125,192));
|
|
primaryCamera.Top = new Vector3(0,0,1);
|
|
primaryCamera.setFoV(MathHelper.PiOver4);
|
|
|
|
ballisticViewport = new Viewport();
|
|
ballisticViewport.Width = 0.2f;
|
|
ballisticViewport.Height = 0.2f;
|
|
ballisticViewport.Top = 0.0f;
|
|
ballisticViewport.Right = 1.0f;
|
|
|
|
ballisticViewport.Visible = false;
|
|
ballisticViewport.BackgroundColor = new Vector3(0.3f,0.3f,0.9f);
|
|
ballisticViewport.Scene = Engine.SceneWindows[0].Scene;
|
|
|
|
trackingCamera = new GLCamera();
|
|
trackingCamera.Top = Vector3.UnitZ;
|
|
trackingCamera.setFoV(MathHelper.PiOver4);
|
|
|
|
ballisticViewport.SceneOrientation = trackingCamera;
|
|
|
|
Engine.SceneWindows[0].addViewport(ballisticViewport);
|
|
|
|
|
|
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);
|
|
|
|
sw.PrimaryViewport.SceneOrientation = trackingCamera;
|
|
|
|
break;
|
|
|
|
case 'p':
|
|
Engine.UpdatesPaused = !Engine.UpdatesPaused;
|
|
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 *= 98.0f;
|
|
ba.fire();
|
|
|
|
trackedActor = ba;
|
|
ballisticViewport.Visible = true;
|
|
break;
|
|
|
|
case ',':
|
|
if (Engine.TimeScale > 0){
|
|
Engine.TimeScale -= 0.05f;
|
|
}
|
|
break;
|
|
case '.':
|
|
if (Engine.TimeScale < 5.0f){
|
|
Engine.TimeScale += 0.05f;
|
|
}
|
|
break;
|
|
case 'w':
|
|
primaryCamera.Position += new Vector3( primaryCamera.View.Xy.Normalized());
|
|
break;
|
|
case 's':
|
|
primaryCamera.Position -= new Vector3( primaryCamera.View.Xy.Normalized());
|
|
break;
|
|
case 'a':
|
|
primaryCamera.Position -= Vector3.Cross( new Vector3( primaryCamera.View.Xy.Normalized()), Vector3.UnitZ);
|
|
break;
|
|
case 'd':
|
|
primaryCamera.Position += Vector3.Cross( new Vector3( primaryCamera.View.Xy.Normalized()), Vector3.UnitZ);
|
|
break;
|
|
}
|
|
};
|
|
|
|
Engine.AfterUpdate += delegate {
|
|
if ((trackedActor != null)&&(trackingCamera != null)){
|
|
if (trackedActor.IsActive){
|
|
Vector3 nv = trackedActor.Velocity.BufferedValue.Normalized();
|
|
trackingCamera.Position = trackedActor.Position.BufferedValue - (nv * 5) + (Vector3.UnitZ * 2);;
|
|
trackingCamera.View = trackedActor.Velocity.BufferedValue;
|
|
|
|
//primaryCamera.lookAt(trackedActor.Position.BufferedValue);
|
|
|
|
if ((trackedActor.Velocity.BufferedValue.Z > 0) && (trackedActor.Velocity.Value.Z < 0)){
|
|
Engine.UpdatesPaused = true;
|
|
}
|
|
} else {
|
|
trackedActor = null;
|
|
ballisticViewport.Visible = false;
|
|
}
|
|
}
|
|
};
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
}
|