using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using Aiwaz.Common;
using Aiwaz.Core;
using Aiwaz.Contracts;
using Aiwaz.Resources;
using Aiwaz.Resources.Prefab;
using SlimDX.Windows;
using System.Drawing;
using Aiwaz.Common.Animations;
namespace Aiwaz.Demo
{
static class Program
{
///
/// The main entry point for the application.
///
[STAThread]
static void Main()
{
var console = new Win32Console();
var renderForm = new RenderForm("Aiwaz.Demo");
Engine.Initialize(null);
var model = new BluModel(new BluModelParams() { FileName = "Data/ChamferBox.blu" } );
model.RootTransformation.LocalScale = new SlimDX.Vector3(0.1f, 0.1f, 0.1f);
model.RootTransformation.LocalPosition = new SlimDX.Vector3(1.0f, 0.0f, 2.0f);
var swapChain = new SwapChain(renderForm.Handle);
swapChain.ClearColor = new SlimDX.Color4(Color.DarkBlue);
swapChain.HasDepthStencilBuffer = true;
swapChain.VSync = false;
var camera = new PerspectiveCamera(new PerspectiveCameraParams() { aspectRatio = (float)renderForm.Size.Width / renderForm.Size.Height } );
var normalMapping = new Shader(new ShaderParams() { FileName = "Data/NormalOutput.fx", TechniqueName = "NormalMapping" } );
var wallTexture = new Texture(new FileTextureParams() { FileName = "Data/Wall.jpg" } );
var wallNormalTexture = new Texture(new FileTextureParams() { FileName = "Data/WallNormal.jpg" });
wallNormalTexture.BindingName = "Normal";
var roomCube = new Cube(new CubeParams() { Width = 10.0f, Height = 10.0f, Depth = 10.0f, IsInverted = true } );
var roomCubeTransformation = new Transformation(new DefaultTransformationBindings());
roomCubeTransformation.LocalPosition = new SlimDX.Vector3(0.0f, 0.0f, 2.0f);
var lightPosition = new ReferenceT(new SlimDX.Vector3(0.0f, 1.0f, 0.0f));
var lightColor = new ReferenceT(new SlimDX.Vector4(2.0f, 2.0f, 1.0f, 1.0f));
var lightParameters = new ShaderParameterSet();
lightParameters.IsPreconditionForFollowingShaders = true;
lightParameters.SetParameter("LightPosition", lightPosition, ParameterBindType.BindBySemantic);
lightParameters.SetParameter("LightColor", lightColor, ParameterBindType.BindBySemantic);
var rootRenderNode = new RenderCommandNode();
rootRenderNode.Children.Add(swapChain);
rootRenderNode.Children.Add(camera);
rootRenderNode.Children.Add(lightParameters);
rootRenderNode.Children.Add(roomCubeTransformation);
rootRenderNode.Children.Add(normalMapping);
rootRenderNode.Children.Add(wallTexture);
rootRenderNode.Children.Add(wallNormalTexture);
rootRenderNode.Children.Add(roomCube.GeometryBuffer);
rootRenderNode.Children.Add(model.RootNode);
var refreshTimer = 0.0f;
MessagePump.Run(renderForm, () =>
{
rootRenderNode.Update(false);
rootRenderNode.ProcessCommands();
swapChain.Present();
float time = (float)HiPerfTimer.ElapsedTime * 10.0f;
lightColor.Value = new SlimDX.Vector4(2.0f, 2.0f, 1.0f, 1.0f) * ((float)Math.Sin(time)+ 2.0f);
roomCubeTransformation.LocalRotationYPR = new SlimDX.Vector3(time, time, time) * 0.01f;
refreshTimer -= (float)HiPerfTimer.LastDeltaTime;
if (refreshTimer < 0.0f)
{
refreshTimer = 1.0f;
renderForm.Text = string.Format("Aiwaz: {0:F2} FPS ({1:F2} ms)", 1.0 / HiPerfTimer.LastDeltaTime, HiPerfTimer.LastDeltaTime * 1000);
}
model.RootTransformation.LocalRotationYPR = new SlimDX.Vector3(time, time, time) * 0.03f;
});
renderForm = null;
swapChain = null;
Engine.Uninitialize();
}
}
}