diff --git a/ANX.Framework/Game.cs b/ANX.Framework/Game.cs index c4e1294a..9b51da07 100644 --- a/ANX.Framework/Game.cs +++ b/ANX.Framework/Game.cs @@ -16,41 +16,50 @@ using ANX.Framework.NonXNA.Development; namespace ANX.Framework { - [PercentageComplete(30)] + [PercentageComplete(60)] [TestState(TestStateAttribute.TestState.Untested)] [Developer("Glatzemann")] public class Game : IDisposable - { - private IGraphicsDeviceManager graphicsDeviceManager; + { + #region Private Members + private IGraphicsDeviceManager graphicsDeviceManager; private IGraphicsDeviceService graphicsDeviceService; private GameServiceContainer gameServices; - private bool inRun; - private bool doneFirstUpdate; + + private bool firstUpdateDone; + private bool firstDrawDone; + private bool drawingSlow; + private bool inRun; + private GameHost host; private bool ShouldExit; - private GameTimer clock; - private bool isFixedTimeStep; - private TimeSpan targetElapsedTime; + private GameTimer gameTimer; + private TimeSpan gameTimeAccu; private GameTime gameTime; private TimeSpan totalGameTime; - private long lastUpdate; + private long updatesSinceRunningSlowly1; + private long updatesSinceRunningSlowly2; + private bool suppressDraw; private GameTime gameUpdateTime; - private TimeSpan inactiveSleepTime; private ContentManager content; private GameComponentCollection components; private List drawableGameComponents; - // Events - public event EventHandler Activated; + #endregion + + #region Events + public event EventHandler Activated; public event EventHandler Deactivated; public event EventHandler Disposed; public event EventHandler Exiting; - public Game() + #endregion + + public Game() { Logger.Info("created a new Game-Class"); @@ -78,11 +87,11 @@ namespace ANX.Framework this.content = new ContentManager(this.gameServices); Logger.Info("creating GameTimer"); - this.clock = new GameTimer(); - this.isFixedTimeStep = true; + this.gameTimer = new GameTimer(); + this.IsFixedTimeStep = true; this.gameUpdateTime = new GameTime(); - this.inactiveSleepTime = TimeSpan.Zero; - this.targetElapsedTime = TimeSpan.FromTicks(TimeSpan.TicksPerSecond / 60L); // default is 1/60s + this.InactiveSleepTime = TimeSpan.FromMilliseconds(20.0); + this.TargetElapsedTime = TimeSpan.FromTicks(TimeSpan.TicksPerSecond / 60L); // default is 1/60s //TODO: implement draw- and update-order handling of GameComponents this.components = new GameComponentCollection(); @@ -91,6 +100,8 @@ namespace ANX.Framework this.drawableGameComponents = new List(); Logger.Info("finished initializing new Game class"); + + this.IsActive = true; } ~Game() @@ -187,7 +198,7 @@ namespace ANX.Framework public void SuppressDraw() { - throw new NotImplementedException(); + this.suppressDraw = true; } public void ResetElapsedTime() @@ -227,46 +238,94 @@ namespace ANX.Framework public void Tick() { if (this.ShouldExit) + { return; + } - //TODO: calculation of times is wrong - //TODO: encapsulate timing stuff in GameTimer class - TimeSpan elapsedUpdate = TimeSpan.FromTicks(clock.Timestamp - lastUpdate); - if (isFixedTimeStep) - { - while (elapsedUpdate < targetElapsedTime) - { - ThreadHelper.Sleep(TargetElapsedTime.Milliseconds - elapsedUpdate.Milliseconds); - elapsedUpdate = TimeSpan.FromTicks(clock.Timestamp - elapsedUpdate.Ticks); - } + // Throttle speed when the game is not active + if (!this.IsActive) + { + ThreadHelper.Sleep(InactiveSleepTime); + } - gameUpdateTime.ElapsedGameTime = targetElapsedTime; - gameUpdateTime.TotalGameTime += elapsedUpdate; - } - else - { - gameUpdateTime.ElapsedGameTime = elapsedUpdate; - gameUpdateTime.TotalGameTime += elapsedUpdate; - } + gameTimer.Update(); - //TODO: behaviour of update is wrong (I think): update should be called multiple times if we are behind the time - //TODO: is update called if minimized? - lastUpdate = clock.Timestamp; - Update(gameUpdateTime); + bool skipDraw = IsFixedTimeStep ? DoFixedTimeStep(gameTimer.Elapsed) : DoTimeStep(gameTimer.Elapsed); + this.suppressDraw = false; + if (skipDraw == false) + { + DrawFrame(); + } - //elapsedUpdate = TimeSpan.FromTicks(GameTimer.Timestamp - lastUpdate); - gameUpdateTime.IsRunningSlowly = isFixedTimeStep && elapsedUpdate > targetElapsedTime; - - if (!Window.IsMinimized && BeginDraw()) - { - //TODO: does draw always get the same time as update or is the time updated in between? (this solution is like in Mono.XNA but it is wrong, I think) - Draw(gameUpdateTime); - - EndDraw(); - } } - private void RunGame() + private bool DoFixedTimeStep(TimeSpan time) + { + bool skipDraw = false; + + if (Math.Abs(time.Ticks - this.TargetElapsedTime.Ticks) < this.TargetElapsedTime.Ticks >> 6) + { + time = this.TargetElapsedTime; + } + + this.gameTimeAccu += time; + long updateCount = this.gameTimeAccu.Ticks / this.TargetElapsedTime.Ticks; + + if (updateCount <= 0) + { + return false; + } + + if (updateCount > 1) + { + this.updatesSinceRunningSlowly2 = this.updatesSinceRunningSlowly1; + this.updatesSinceRunningSlowly1 = 0; + } + else + { + this.updatesSinceRunningSlowly1++; + this.updatesSinceRunningSlowly2++; + } + + this.drawingSlow = (this.updatesSinceRunningSlowly2 < 20); + + while (updateCount > 0) + { + if (this.ShouldExit) + { + break; + } + + updateCount -= 1L; + + this.gameTime.ElapsedGameTime = this.TargetElapsedTime; + this.gameTime.TotalGameTime = this.totalGameTime; + this.gameTime.IsRunningSlowly = this.drawingSlow; + this.Update(this.gameTime); + skipDraw &= this.suppressDraw; + this.suppressDraw = false; + + this.gameTimeAccu -= this.TargetElapsedTime; + this.totalGameTime += this.TargetElapsedTime; + } + + return skipDraw; + } + + private bool DoTimeStep(TimeSpan time) + { + this.gameTime.ElapsedGameTime = time; + this.gameTime.TotalGameTime = this.totalGameTime; + this.gameTime.IsRunningSlowly = false; + + this.Update(this.gameTime); + + this.totalGameTime += time; + + return suppressDraw; + } + + private void RunGame() { this.graphicsDeviceManager = this.Services.GetService(typeof(IGraphicsDeviceManager)) as IGraphicsDeviceManager; if (this.graphicsDeviceManager != null) @@ -278,81 +337,37 @@ namespace ANX.Framework this.gameTime.ElapsedGameTime = TimeSpan.Zero; this.gameTime.TotalGameTime = this.totalGameTime; this.gameTime.IsRunningSlowly = false; - this.lastUpdate = clock.Timestamp; this.Update(this.gameTime); - this.doneFirstUpdate = true; + this.firstUpdateDone = true; this.host.Run(); this.EndRun(); } private void DrawFrame() { - try - { - if (((!this.ShouldExit && this.doneFirstUpdate) && !this.Window.IsMinimized) && this.BeginDraw()) - { - this.gameTime.TotalGameTime = this.totalGameTime; - //this.gameTime.ElapsedGameTime = this.lastFrameElapsedGameTime; - //this.gameTime.IsRunningSlowly = this.drawRunningSlowly; - this.Draw(this.gameTime); - this.EndDraw(); - //this.doneFirstDraw = true; - } - } - finally - { - //this.lastFrameElapsedGameTime = TimeSpan.Zero; - } + if (!this.ShouldExit) + { + if (this.firstUpdateDone) + { + if (!this.Window.IsMinimized) + { + if (this.BeginDraw()) + { + this.Draw(this.gameTime); + this.EndDraw(); + + if (!this.firstDrawDone) + { + this.firstDrawDone = true; + } + } + } + } + } } - private void HostActivated(object sender, EventArgs e) - { - //TODO: implement - - //if (!this.isActive) - //{ - // this.isActive = true; - // this.OnActivated(this, EventArgs.Empty); - //} - } - - private void HostDeactivated(object sender, EventArgs e) - { - //TODO: implement - - //if (this.isActive) - //{ - // this.isActive = false; - // this.OnDeactivated(this, EventArgs.Empty); - //} - } - - private void HostExiting(object sender, EventArgs e) - { - ShouldExit = true; - - //TODO: implement - //this.OnExiting(this, EventArgs.Empty); - } - - private void HostIdle(object sender, EventArgs e) - { - this.Tick(); - } - - private void HostResume(object sender, EventArgs e) - { - //TODO: implement - //this.clock.Resume(); - } - - private void HostSuspend(object sender, EventArgs e) - { - //TODO: implement - //this.clock.Suspend(); - } - - public GameServiceContainer Services + #region Public Properties + public GameServiceContainer Services { get { @@ -386,6 +401,7 @@ namespace ANX.Framework //TODO: exception if null } + return graphicsDeviceService.GraphicsDevice; } } @@ -394,32 +410,20 @@ namespace ANX.Framework { get { - return (host != null) ? host.Window : null; + return (host != null) ? host.Window : null; } } public bool IsFixedTimeStep { - get - { - return isFixedTimeStep; - } - set - { - isFixedTimeStep = value; - } + get; + set; } public TimeSpan TargetElapsedTime { - get - { - return targetElapsedTime; - } - set - { - targetElapsedTime = value; - } + get; + set; } public TimeSpan InactiveSleepTime @@ -430,19 +434,9 @@ namespace ANX.Framework public bool IsActive { - get - { - throw new NotImplementedException(); - } - } - - internal bool IsActiveIgnoringGuide - { - get - { - throw new NotImplementedException(); - } - } + get; + internal set; + } public bool IsMouseVisible { @@ -464,6 +458,16 @@ namespace ANX.Framework private set; } + #endregion + + internal bool IsActiveIgnoringGuide + { + get + { + throw new NotImplementedException(); + } + } + public void Dispose() { Dispose(true); @@ -493,25 +497,34 @@ namespace ANX.Framework } } - protected virtual void OnActivated(Object sender, EventArgs args) + protected virtual bool ShowMissingRequirementMessage(Exception exception) + { + throw new NotImplementedException(); + } + + #region Event Handling + protected virtual void OnActivated(Object sender, EventArgs args) { - throw new NotImplementedException(); + RaiseIfNotNull(this.Activated, sender, args); } protected virtual void OnDeactivated(Object sender, EventArgs args) { - throw new NotImplementedException(); + RaiseIfNotNull(this.Deactivated, sender, args); } protected virtual void OnExiting(Object sender, EventArgs args) { - throw new NotImplementedException(); + RaiseIfNotNull(this.Exiting, sender, args); } - protected virtual bool ShowMissingRequirementMessage(Exception exception) - { - throw new NotImplementedException(); - } + private void RaiseIfNotNull(EventHandler eventDelegate, Object sender, EventArgs args) + { + if (eventDelegate != null) + { + eventDelegate(sender, args); + } + } private void components_ComponentRemoved(object sender, GameComponentCollectionEventArgs e) { @@ -531,5 +544,49 @@ namespace ANX.Framework e.GameComponent.Initialize(); } - } + private void HostActivated(object sender, EventArgs e) + { + if (!IsActive) + { + this.IsActive = true; + this.OnActivated(this, EventArgs.Empty); + } + } + + private void HostDeactivated(object sender, EventArgs e) + { + if (IsActive) + { + this.IsActive = false; + this.OnDeactivated(this, EventArgs.Empty); + } + } + + private void HostExiting(object sender, EventArgs e) + { + ShouldExit = true; + + //TODO: implement + //this.OnExiting(this, EventArgs.Empty); + } + + private void HostIdle(object sender, EventArgs e) + { + this.Tick(); + } + + private void HostResume(object sender, EventArgs e) + { + //TODO: implement + //this.clock.Resume(); + } + + private void HostSuspend(object sender, EventArgs e) + { + //TODO: implement + //this.clock.Suspend(); + } + + #endregion + } } diff --git a/ANX.Framework/GameTime.cs b/ANX.Framework/GameTime.cs index 82b33f5a..e610c09c 100644 --- a/ANX.Framework/GameTime.cs +++ b/ANX.Framework/GameTime.cs @@ -41,10 +41,10 @@ namespace ANX.Framework { this.TotalGameTime = totalGameTime; this.ElapsedGameTime = elapsedGameTime; + this.IsRunningSlowly = false; } - public GameTime(TimeSpan totalGameTime, TimeSpan elapsedGameTime, - bool isRunningSlowly) + public GameTime(TimeSpan totalGameTime, TimeSpan elapsedGameTime, bool isRunningSlowly) { this.TotalGameTime = totalGameTime; this.ElapsedGameTime = elapsedGameTime; diff --git a/ANX.Framework/GameTimer.cs b/ANX.Framework/GameTimer.cs index 8a05861f..51752b3c 100644 --- a/ANX.Framework/GameTimer.cs +++ b/ANX.Framework/GameTimer.cs @@ -1,5 +1,9 @@ +#region Using Statements using ANX.Framework.NonXNA; using ANX.Framework.NonXNA.PlatformSystem; +using System; + +#endregion // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -7,32 +11,34 @@ using ANX.Framework.NonXNA.PlatformSystem; namespace ANX.Framework { + //TODO: this class is public on Windows Phone + internal class GameTimer { private INativeGameTimer nativeImplementation; - - //private long lastTicks; - //private long frequency; + private TimeSpan lastUpdate; public GameTimer() { nativeImplementation = AddInSystemFactory.DefaultPlatformCreator.CreateGameTimer(); - //lastTicks = nativeImplementation.Timestamp; - //frequency = nativeImplementation.Frequency; - } + nativeImplementation.Reset(); + lastUpdate = nativeImplementation.ElapsedTime; + } - //internal TimeSpan Update() - //{ - // long newTicks = nativeImplementation.Timestamp; - // //long elapseTenthsOfMilliseconds = - // // ((newTicks - lastTicks) * 10000) / frequency; - // //float frameTime = (float)(elapseTenthsOfMilliseconds / 10000f); - // TimeSpan elapsedUpdate = TimeSpan.FromTicks(newTicks - lastTicks); - // lastTicks = newTicks; + public void Update() + { + nativeImplementation.Update(); + lastUpdate = nativeImplementation.ElapsedTime; + } - // return elapsedUpdate; - //} + public TimeSpan Elapsed + { + get + { + return nativeImplementation.ElapsedTime; + } + } public long Timestamp { diff --git a/ANX.Framework/NonXNA/PlatformSystem/INativeGameTimer.cs b/ANX.Framework/NonXNA/PlatformSystem/INativeGameTimer.cs index 599a5e8d..c484afcf 100644 --- a/ANX.Framework/NonXNA/PlatformSystem/INativeGameTimer.cs +++ b/ANX.Framework/NonXNA/PlatformSystem/INativeGameTimer.cs @@ -8,6 +8,21 @@ namespace ANX.Framework.NonXNA.PlatformSystem { public interface INativeGameTimer { + void Update(); + void Reset(); + void Suspend(); + void Resume(); + + TimeSpan CurrentTime + { + get; + } + + TimeSpan ElapsedTime + { + get; + } + long Frequency { get; diff --git a/ANX.Framework/NonXNA/ThreadHelper.cs b/ANX.Framework/NonXNA/ThreadHelper.cs index b2ae6fad..6751afe4 100644 --- a/ANX.Framework/NonXNA/ThreadHelper.cs +++ b/ANX.Framework/NonXNA/ThreadHelper.cs @@ -13,5 +13,14 @@ namespace ANX.Framework.NonXNA Thread.Sleep(milliseconds); #endif } + + public static void Sleep(TimeSpan timeSpan) + { +#if WINDOWSMETRO + // TODO: search replacement +#else + Thread.Sleep(timeSpan); +#endif + } } } diff --git a/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameTimer.cs b/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameTimer.cs index 4c4dd18c..424e088f 100644 --- a/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameTimer.cs +++ b/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameTimer.cs @@ -1,6 +1,10 @@ -using System; +#region Using Statements +using System; using ANX.Framework.NonXNA.PlatformSystem; using System.Diagnostics; +using ANX.Framework.NonXNA; + +#endregion // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -10,7 +14,57 @@ namespace ANX.PlatformSystem.Linux { public class LinuxGameTimer : INativeGameTimer { - #region Public + #region Using Statements + private Stopwatch stopwatch; + private TimeSpan lastElapsed; + + #endregion + + public LinuxGameTimer() + { + if (!Stopwatch.IsHighResolution) + { + Logger.Warning("Created " + this.GetType().FullName + ", but it is not high resolution. Maybe the underlying platform doesn't support high resolution timers?"); + } + stopwatch = Stopwatch.StartNew(); + Reset(); + } + + public void Update() + { + TimeSpan elapsed = stopwatch.Elapsed; + ElapsedTime = elapsed - lastElapsed; + lastElapsed = elapsed; + } + + public void Reset() + { + stopwatch.Restart(); + lastElapsed = stopwatch.Elapsed; + } + + public void Suspend() + { + stopwatch.Stop(); + } + + public void Resume() + { + stopwatch.Start(); + } + + public TimeSpan ElapsedTime + { + get; + internal set; + } + + public TimeSpan CurrentTime + { + get; + internal set; + } + public long Frequency { get @@ -26,7 +80,5 @@ namespace ANX.PlatformSystem.Linux return Stopwatch.GetTimestamp(); } } - - #endregion } } diff --git a/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameWindow.cs b/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameWindow.cs index 45a3b5cc..c5ebc14f 100644 --- a/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameWindow.cs +++ b/PlatformSystems/ANX.PlatformSystem.Linux/LinuxGameWindow.cs @@ -99,6 +99,9 @@ namespace ANX.PlatformSystem.Linux GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight), }; + + Form.Activated += delegate { base.OnActivated(); }; + Form.Deactivate += delegate { base.OnDeactivated(); }; } #endregion diff --git a/PlatformSystems/ANX.PlatformSystem.Metro/MetroGameTimer.cs b/PlatformSystems/ANX.PlatformSystem.Metro/MetroGameTimer.cs index 3967bd01..99e39a42 100644 --- a/PlatformSystems/ANX.PlatformSystem.Metro/MetroGameTimer.cs +++ b/PlatformSystems/ANX.PlatformSystem.Metro/MetroGameTimer.cs @@ -1,7 +1,10 @@ -using System; +#region Using Statements +using System; using System.Diagnostics; using ANX.Framework.NonXNA.PlatformSystem; +#endregion + // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license @@ -10,6 +13,57 @@ namespace ANX.PlatformSystem.Metro { public class MetroGameTimer : INativeGameTimer { + #region Using Statements + private Stopwatch stopwatch; + private TimeSpan lastElapsed; + + #endregion + + public MetroGameTimer() + { + if (!Stopwatch.IsHighResolution) + { + Logger.Warning("Created " + this.GetType().FullName + ", but it is not high resolution. Maybe the underlying platform doesn't support high resolution timers?"); + } + stopwatch = Stopwatch.StartNew(); + Reset(); + } + + public void Update() + { + TimeSpan elapsed = stopwatch.Elapsed; + ElapsedTime = elapsed - lastElapsed; + lastElapsed = elapsed; + } + + public void Reset() + { + stopwatch.Restart(); + lastElapsed = stopwatch.Elapsed; + } + + public void Suspend() + { + stopwatch.Stop(); + } + + public void Resume() + { + stopwatch.Start(); + } + + public TimeSpan ElapsedTime + { + get; + internal set; + } + + public TimeSpan CurrentTime + { + get; + internal set; + } + public long Frequency { get @@ -25,5 +79,5 @@ namespace ANX.PlatformSystem.Metro return Stopwatch.GetTimestamp(); } } - } + } } diff --git a/PlatformSystems/ANX.PlatformSystem.Metro/WindowsGameWindow.cs b/PlatformSystems/ANX.PlatformSystem.Metro/WindowsGameWindow.cs index a4fb3c19..e03cb018 100644 --- a/PlatformSystems/ANX.PlatformSystem.Metro/WindowsGameWindow.cs +++ b/PlatformSystems/ANX.PlatformSystem.Metro/WindowsGameWindow.cs @@ -87,6 +87,7 @@ namespace ANX.PlatformSystem.Metro internal WindowsGameWindow(WindowsGameHost setGameHost) { gameHost = setGameHost; + //TODO: Hook up activate and deactivate events } #endregion diff --git a/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameTimer.cs b/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameTimer.cs index 195e597b..8b2f859c 100644 --- a/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameTimer.cs +++ b/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameTimer.cs @@ -1,6 +1,10 @@ -using System; +#region Using Statements +using System; using ANX.Framework.NonXNA.PlatformSystem; using System.Diagnostics; +using ANX.Framework.NonXNA; + +#endregion // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -10,7 +14,57 @@ namespace ANX.PlatformSystem.PsVita { public class PsVitaGameTimer : INativeGameTimer { - #region Public + #region Using Statements + private Stopwatch stopwatch; + private TimeSpan lastElapsed; + + #endregion + + public PsVitaGameTimer() + { + if (!Stopwatch.IsHighResolution) + { + Logger.Warning("Created " + this.GetType().FullName + ", but it is not high resolution. Maybe the underlying platform doesn't support high resolution timers?"); + } + stopwatch = Stopwatch.StartNew(); + Reset(); + } + + public void Update() + { + TimeSpan elapsed = stopwatch.Elapsed; + ElapsedTime = elapsed - lastElapsed; + lastElapsed = elapsed; + } + + public void Reset() + { + stopwatch.Restart(); + lastElapsed = stopwatch.Elapsed; + } + + public void Suspend() + { + stopwatch.Stop(); + } + + public void Resume() + { + stopwatch.Start(); + } + + public TimeSpan ElapsedTime + { + get; + internal set; + } + + public TimeSpan CurrentTime + { + get; + internal set; + } + public long Frequency { get @@ -26,6 +80,5 @@ namespace ANX.PlatformSystem.PsVita return Stopwatch.GetTimestamp(); } } - #endregion - } + } } diff --git a/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameWindow.cs b/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameWindow.cs index ff99522b..0d043356 100644 --- a/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameWindow.cs +++ b/PlatformSystems/ANX.PlatformSystem.PsVita/PsVitaGameWindow.cs @@ -81,6 +81,7 @@ namespace ANX.PlatformSystem.PsVita #region Constructor internal PsVitaGameWindow() { + //TODO: Hook up activate and deactivate events } #endregion diff --git a/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameTimer.cs b/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameTimer.cs index 59ebcaf6..20c43150 100644 --- a/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameTimer.cs +++ b/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameTimer.cs @@ -1,6 +1,7 @@ using System; using ANX.Framework.NonXNA.PlatformSystem; using System.Diagnostics; +using ANX.Framework.NonXNA; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -9,8 +10,58 @@ using System.Diagnostics; namespace ANX.PlatformSystem.Windows { public class WindowsGameTimer : INativeGameTimer - { - #region Public + { + #region Using Statements + private Stopwatch stopwatch; + private TimeSpan lastElapsed; + + #endregion + + public WindowsGameTimer() + { + if (!Stopwatch.IsHighResolution) + { + Logger.Warning("Created " + this.GetType().FullName + ", but it is not high resolution. Maybe the underlying platform doesn't support high resolution timers?"); + } + stopwatch = Stopwatch.StartNew(); + Reset(); + } + + public void Update() + { + TimeSpan elapsed = stopwatch.Elapsed; + ElapsedTime = elapsed - lastElapsed; + lastElapsed = elapsed; + } + + public void Reset() + { + stopwatch.Restart(); + lastElapsed = stopwatch.Elapsed; + } + + public void Suspend() + { + stopwatch.Stop(); + } + + public void Resume() + { + stopwatch.Start(); + } + + public TimeSpan ElapsedTime + { + get; + internal set; + } + + public TimeSpan CurrentTime + { + get; + internal set; + } + public long Frequency { get @@ -26,6 +77,5 @@ namespace ANX.PlatformSystem.Windows return Stopwatch.GetTimestamp(); } } - #endregion } } diff --git a/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameWindow.cs b/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameWindow.cs index ddbe334e..480fd9ac 100644 --- a/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameWindow.cs +++ b/PlatformSystems/ANX.PlatformSystem.Windows/WindowsGameWindow.cs @@ -99,7 +99,11 @@ namespace ANX.PlatformSystem.Windows GraphicsDeviceManager.DefaultBackBufferWidth, GraphicsDeviceManager.DefaultBackBufferHeight), }; + + Form.Activated += delegate { base.OnActivated(); }; + Form.Deactivate += delegate { base.OnDeactivated(); }; } + #endregion #region Close diff --git a/Samples/ModelSample/ModelSample/Game1.cs b/Samples/ModelSample/ModelSample/Game1.cs index ff793f63..c3de3ad4 100644 --- a/Samples/ModelSample/ModelSample/Game1.cs +++ b/Samples/ModelSample/ModelSample/Game1.cs @@ -13,11 +13,13 @@ namespace ModelSample GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Model cubeModel; + Matrix cubeWorld; + Model anxLogo; + Matrix anxLogoWorld; Effect effect; Texture2D texture; bool overrideWithSimpleEffect = true; - Matrix world; Matrix view; Matrix projection; @@ -32,14 +34,10 @@ namespace ModelSample protected override void Initialize() { - float aspect = (float)graphics.PreferredBackBufferWidth / - (float)graphics.PreferredBackBufferHeight; + float aspect = GraphicsDevice.Viewport.AspectRatio; - world = Matrix.Identity; - view = Matrix.CreateLookAt(Vector3.Backward * 10, world.Translation, - Vector3.Up); - projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, - aspect, 1f, 100f); + view = Matrix.CreateLookAt(Vector3.Backward * 10, Matrix.Identity.Translation, Vector3.Up); + projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspect, 1f, 100f); base.Initialize(); } @@ -48,7 +46,13 @@ namespace ModelSample { spriteBatch = new SpriteBatch(GraphicsDevice); effect = Content.Load("Effects/SimpleEffect"); + cubeModel = Content.Load("Models/Cube"); + cubeWorld = Matrix.Identity; + + anxLogo = Content.Load("Models/ANX_vertex_color"); + anxLogoWorld = Matrix.CreateWorld(new Vector3(10, 10, 10), Vector3.Forward, Vector3.Up); + texture = Content.Load("Textures/Test_100x100"); // Ovrride the basic effect in the model for testing @@ -66,18 +70,17 @@ namespace ModelSample protected override void Update(GameTime gameTime) { - if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || - Keyboard.GetState().IsKeyDown(Keys.Escape)) + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + { this.Exit(); + } - const float speed = 0.000001f; + const float speed = 0.25f; float rotation = (float)gameTime.TotalGameTime.TotalSeconds * speed; - world = Matrix.CreateRotationX(rotation) * - Matrix.CreateRotationY(rotation) * - Matrix.CreateRotationZ(rotation); + cubeWorld = Matrix.CreateRotationX(rotation) * Matrix.CreateRotationY(rotation) * Matrix.CreateRotationZ(rotation); - worldViewProj = world * view * projection; - worldInverseTranspose = Matrix.Transpose(Matrix.Invert(world)); + worldViewProj = cubeWorld * view * projection; + worldInverseTranspose = Matrix.Transpose(Matrix.Invert(cubeWorld)); base.Update(gameTime); } @@ -88,7 +91,7 @@ namespace ModelSample if (overrideWithSimpleEffect) { - this.effect.Parameters["World"].SetValue(this.world); + this.effect.Parameters["World"].SetValue(this.cubeWorld); this.effect.Parameters["View"].SetValue(this.view); this.effect.Parameters["Projection"].SetValue(this.projection); this.effect.Parameters["WorldViewProj"].SetValue(this.worldViewProj); @@ -96,7 +99,7 @@ namespace ModelSample this.effect.Parameters["Texture"].SetValue(this.texture); } - cubeModel.Draw(world, view, projection); + cubeModel.Draw(cubeWorld, view, projection); base.Draw(gameTime); } } diff --git a/Samples/SampleContent/Models/ANX_vertex_color.fbx b/Samples/SampleContent/Models/ANX_vertex_color.fbx new file mode 100644 index 00000000..94cb5222 --- /dev/null +++ b/Samples/SampleContent/Models/ANX_vertex_color.fbx @@ -0,0 +1,741 @@ +; FBX 6.1.0 project file +; Created by Blender FBX Exporter +; for support mail: ideasman42@gmail.com +; ---------------------------------------------------- + +FBXHeaderExtension: { + FBXHeaderVersion: 1003 + FBXVersion: 6100 + CreationTimeStamp: { + Version: 1000 + Year: 2012 + Month: 09 + Day: 01 + Hour: 12 + Minute: 55 + Second: 02 + Millisecond: 0 + } + Creator: "FBX SDK/FBX Plugins build 20070228" + OtherFlags: { + FlagPLE: 0 + } +} +CreationTime: "2012-09-01 12:55:02:000" +Creator: "Blender version 2.63 (sub 0)" + +; Object definitions +;------------------------------------------------------------------ + +Definitions: { + Version: 100 + Count: 5 + ObjectType: "Model" { + Count: 1 + } + ObjectType: "Geometry" { + Count: 1 + } + ObjectType: "Material" { + Count: 3 + } + ObjectType: "Pose" { + Count: 1 + } + ObjectType: "GlobalSettings" { + Count: 1 + } +} + +; Object properties +;------------------------------------------------------------------ + +Objects: { + Model: "Model::Plane", "Mesh" { + Version: 232 + Properties60: { + Property: "QuaternionInterpolate", "bool", "",0 + Property: "Visibility", "Visibility", "A+",1 + Property: "Lcl Translation", "Lcl Translation", "A+",0.000000000000000,0.000000000000000,0.000000000000000 + Property: "Lcl Rotation", "Lcl Rotation", "A+",0.000000000000000,-0.000000000000000,0.000000000000000 + Property: "Lcl Scaling", "Lcl Scaling", "A+",1.000000000000000,1.000000000000000,1.000000000000000 + Property: "RotationOffset", "Vector3D", "",0,0,0 + Property: "RotationPivot", "Vector3D", "",0,0,0 + Property: "ScalingOffset", "Vector3D", "",0,0,0 + Property: "ScalingPivot", "Vector3D", "",0,0,0 + Property: "TranslationActive", "bool", "",0 + Property: "TranslationMin", "Vector3D", "",0,0,0 + Property: "TranslationMax", "Vector3D", "",0,0,0 + Property: "TranslationMinX", "bool", "",0 + Property: "TranslationMinY", "bool", "",0 + Property: "TranslationMinZ", "bool", "",0 + Property: "TranslationMaxX", "bool", "",0 + Property: "TranslationMaxY", "bool", "",0 + Property: "TranslationMaxZ", "bool", "",0 + Property: "RotationOrder", "enum", "",0 + Property: "RotationSpaceForLimitOnly", "bool", "",0 + Property: "AxisLen", "double", "",10 + Property: "PreRotation", "Vector3D", "",0,0,0 + Property: "PostRotation", "Vector3D", "",0,0,0 + Property: "RotationActive", "bool", "",0 + Property: "RotationMin", "Vector3D", "",0,0,0 + Property: "RotationMax", "Vector3D", "",0,0,0 + Property: "RotationMinX", "bool", "",0 + Property: "RotationMinY", "bool", "",0 + Property: "RotationMinZ", "bool", "",0 + Property: "RotationMaxX", "bool", "",0 + Property: "RotationMaxY", "bool", "",0 + Property: "RotationMaxZ", "bool", "",0 + Property: "RotationStiffnessX", "double", "",0 + Property: "RotationStiffnessY", "double", "",0 + Property: "RotationStiffnessZ", "double", "",0 + Property: "MinDampRangeX", "double", "",0 + Property: "MinDampRangeY", "double", "",0 + Property: "MinDampRangeZ", "double", "",0 + Property: "MaxDampRangeX", "double", "",0 + Property: "MaxDampRangeY", "double", "",0 + Property: "MaxDampRangeZ", "double", "",0 + Property: "MinDampStrengthX", "double", "",0 + Property: "MinDampStrengthY", "double", "",0 + Property: "MinDampStrengthZ", "double", "",0 + Property: "MaxDampStrengthX", "double", "",0 + Property: "MaxDampStrengthY", "double", "",0 + Property: "MaxDampStrengthZ", "double", "",0 + Property: "PreferedAngleX", "double", "",0 + Property: "PreferedAngleY", "double", "",0 + Property: "PreferedAngleZ", "double", "",0 + Property: "InheritType", "enum", "",0 + Property: "ScalingActive", "bool", "",0 + Property: "ScalingMin", "Vector3D", "",1,1,1 + Property: "ScalingMax", "Vector3D", "",1,1,1 + Property: "ScalingMinX", "bool", "",0 + Property: "ScalingMinY", "bool", "",0 + Property: "ScalingMinZ", "bool", "",0 + Property: "ScalingMaxX", "bool", "",0 + Property: "ScalingMaxY", "bool", "",0 + Property: "ScalingMaxZ", "bool", "",0 + Property: "GeometricTranslation", "Vector3D", "",0,0,0 + Property: "GeometricRotation", "Vector3D", "",0,0,0 + Property: "GeometricScaling", "Vector3D", "",1,1,1 + Property: "LookAtProperty", "object", "" + Property: "UpVectorProperty", "object", "" + Property: "Show", "bool", "",1 + Property: "NegativePercentShapeSupport", "bool", "",1 + Property: "DefaultAttributeIndex", "int", "",0 + Property: "Color", "Color", "A",0.8,0.8,0.8 + Property: "Size", "double", "",100 + Property: "Look", "enum", "",1 + } + MultiLayer: 0 + MultiTake: 1 + Shading: Y + Culling: "CullingOff" + Vertices: -0.062397,-0.000000,0.775976,-3.255658,-0.000000,-1.248450,-3.100602,0.000000,-0.828801,-3.492494,0.000000,-0.828801,-3.647550,-0.000000,-1.248450,0.026532,-0.000000,-1.248450,0.181589,0.000000,-0.828801 + ,-0.210303,0.000000,-0.828801,-0.365359,-0.000000,-1.248450,-2.029182,-0.000000,-1.248450,-1.874125,0.000000,-0.828801,-2.727808,0.000000,-0.828801,-2.882864,-0.000000,-1.248450,-0.782843,-0.000000,-1.248450 + ,-0.627787,0.000000,-0.828801,-1.481469,0.000000,-0.828801,-1.636526,-0.000000,-1.248450,2.435764,-0.000000,-0.517204,2.354728,0.000000,-0.229256,1.683934,0.000000,-0.816551,1.545812,-0.000000,-1.209605 + ,2.837115,-0.000000,-0.214731,2.728568,0.000000,0.090776,2.519995,0.000000,-0.085503,2.615496,-0.000000,-0.382524,3.253518,-0.000000,0.083045,3.112051,0.000000,0.429146,2.882330,-0.000000,0.232283 + ,2.988333,-0.000000,-0.109782,4.840578,-0.000000,1.241809,4.066024,-0.000000,1.241809,3.275158,-0.000000,0.555626,3.409146,-0.000000,0.192330,-0.079258,-0.000000,0.763976,-0.952299,-0.000000,0.763976 + ,-0.553724,0.000000,-0.580251,-1.407714,0.000000,-0.580251,0.102558,-0.000000,1.251809,0.727856,-0.000000,0.773473,-0.776067,-0.000000,1.241809,0.775098,-0.000000,0.765931,1.274469,-0.000000,1.252104 + ,0.945606,-0.000000,1.251809,0.970064,-0.000000,0.524279,0.970617,-0.000000,0.522148,1.847475,-0.000000,0.570764,1.914701,-0.000000,0.830229,1.890331,-0.000000,0.710766,0.973167,-0.000000,0.606777 + ,1.929247,-0.000000,0.948030,0.940719,-0.000000,0.670976,1.894448,-0.000000,1.079073,0.898090,-0.000000,0.708488,1.805369,-0.000000,1.168374,0.859492,-0.000000,0.733682,1.702701,-0.000000,1.215587 + ,0.818038,-0.000000,0.752084,1.548959,-0.000000,1.245690,-2.558135,0.000000,-0.145508,0.384246,0.000000,-1.248450,1.214709,0.000000,-1.248450,-1.675058,0.000000,-0.145508,-2.689509,0.000000,-0.580251 + ,-1.834901,0.000000,-0.580251,-3.114837,-0.000000,0.754579,-2.091309,-0.000000,1.251809,-2.273724,-0.000000,0.775976,-2.265720,-0.000000,0.763976,-1.362783,-0.000000,0.763976,-1.207356,-0.000000,1.241809 + ,-3.014837,-0.000000,0.773068,-3.337031,-0.000000,1.252303,-3.569712,-0.000000,1.233742,-3.337330,-0.000000,0.588977,-4.290954,-0.000000,0.570816,-3.363611,-0.000000,0.522109,-3.362898,-0.000000,0.524185 + ,-4.203607,-0.000000,0.801383,-4.253596,-0.000000,0.665420,-4.145105,-0.000000,0.896519,-3.299678,-0.000000,0.636813,-4.074420,-0.000000,0.997020,-3.253835,-0.000000,0.679623,-3.997975,-0.000000,1.078176 + ,-3.217488,-0.000000,0.707342,-3.918510,-0.000000,1.134225,-3.175536,-0.000000,0.727454,-3.767596,-0.000000,1.199345,-3.472363,-0.000000,0.229425,-4.388903,-0.000000,0.269962,-3.584995,0.000000,-0.121703 + ,-3.601820,0.000000,-0.133146,-4.007749,0.000000,-1.248450,-4.518659,0.000000,-0.102441,-4.906785,0.000000,-1.248450,-3.464042,-0.000000,0.217045,-2.440848,-0.000000,0.219283,-2.457300,-0.000000,0.207319 + ,-2.566896,0.000000,-0.133553,-1.549805,-0.000000,0.219283,-0.079258,0.825254,0.763976,3.044110,-0.000000,0.628396,2.818925,-0.000000,1.241809,2.106114,-0.000000,1.241809,2.449814,-0.000000,0.128107 + ,3.734011,0.000000,-1.248450,3.315756,0.000000,-0.118968,2.681684,0.000000,-0.594842,2.896744,-0.000000,-1.248450,-3.492494,0.825254,-0.828801,-3.100602,0.825254,-0.828801,-3.255658,0.825254,-1.248450 + ,-3.647550,0.825254,-1.248450,-0.210303,0.825254,-0.828801,0.181589,0.825254,-0.828801,0.026532,0.825254,-1.248450,-0.365359,0.825254,-1.248450,-2.727808,0.825254,-0.828801,-1.874125,0.825254,-0.828801 + ,-2.029182,0.825254,-1.248450,-2.882864,0.825254,-1.248450,-1.481469,0.825254,-0.828801,-0.627787,0.825254,-0.828801,-0.782843,0.825254,-1.248450,-1.636526,0.825254,-1.248450,1.683934,0.825254,-0.816551 + ,2.354728,0.825254,-0.229256,2.435764,0.825254,-0.517204,1.545812,0.825254,-1.209605,2.519995,0.825254,-0.085503,2.728568,0.825254,0.090776,2.837115,0.825254,-0.214731,2.615495,0.825254,-0.382524 + ,2.882330,0.825254,0.232283,3.112051,0.825254,0.429146,3.253518,0.825254,0.083045,2.988333,0.825254,-0.109782,3.275158,0.825254,0.555626,4.066024,0.825254,1.241809,4.840578,0.825254,1.241809 + ,3.409146,0.825254,0.192330,-0.952299,0.825254,0.763976,-0.553724,0.825254,-0.580251,-1.407714,0.825254,-0.580251,0.775098,0.825254,0.765931,0.102558,0.825254,1.251809,-0.062397,0.825254,0.775976 + ,-0.776067,0.825254,1.241809,0.727856,0.825254,0.773473,0.945606,0.825254,1.251809,1.274469,0.825254,1.252104,0.973167,0.825254,0.606777,1.847475,0.825254,0.570764,0.970617,0.825254,0.522148 + ,0.970064,0.825254,0.524279,1.914701,0.825254,0.830229,1.890331,0.825254,0.710766,1.929247,0.825254,0.948030,0.940719,0.825254,0.670976,1.894448,0.825254,1.079073,0.898090,0.825254,0.708488 + ,1.805369,0.825254,1.168374,0.859492,0.825254,0.733682,1.702701,0.825254,1.215587,0.818038,0.825254,0.752084,1.548959,0.825254,1.245690,-2.265720,0.825254,0.763976,1.214709,0.825254,-1.248450 + ,0.384246,0.825254,-1.248450,-2.558135,0.825254,-0.145508,-1.675058,0.825254,-0.145508,-2.689509,0.825254,-0.580251,-1.834901,0.825254,-0.580251,-2.273724,0.825254,0.775976,-2.091309,0.825254,1.251809 + ,-1.362783,0.825254,0.763976,-1.207356,0.825254,1.241809,-3.014837,0.825254,0.773068,-3.114837,0.825254,0.754579,-3.569712,0.825254,1.233742,-3.337031,0.825254,1.252303,-3.362898,0.825254,0.524185 + ,-3.363611,0.825254,0.522109,-4.290954,0.825254,0.570816,-4.203607,0.825254,0.801383,-4.253596,0.825254,0.665420,-3.337330,0.825254,0.588977,-4.145105,0.825254,0.896519,-3.299678,0.825254,0.636813 + ,-4.074420,0.825254,0.997020,-3.253835,0.825254,0.679623,-3.997975,0.825254,1.078176,-3.217488,0.825254,0.707342,-3.918510,0.825254,1.134225,-3.175536,0.825254,0.727454,-3.767596,0.825254,1.199345 + ,-3.472363,0.825254,0.229425,-4.388903,0.825254,0.269962,-3.601820,0.825254,-0.133146,-4.518659,0.825254,-0.102441,-4.007749,0.825254,-1.248450,-4.906785,0.825254,-1.248450,-3.464042,0.825254,0.217045 + ,-3.584995,0.825254,-0.121703,-2.566896,0.825254,-0.133553,-2.457300,0.825254,0.207319,-2.440848,0.825254,0.219283,-1.549805,0.825254,0.219283,-1.664485,0.010000,-0.145508,2.106114,0.825254,1.241809 + ,2.818925,0.825254,1.241809,3.044110,0.825254,0.628396,2.449814,0.825254,0.128107,2.681684,0.825254,-0.594842,3.315756,0.825254,-0.118968,3.734011,0.825254,-1.248450,2.896744,0.825254,-1.248450 + ,-1.664485,0.815254,-0.145508,-1.814127,0.020000,-0.581335,-1.814127,0.805254,-0.581335,1.903739,0.815254,1.083048,-2.449780,0.813254,0.230707,-2.449780,0.012000,0.230707,-2.281998,0.012000,0.752552 + ,-2.281998,0.813254,0.752552,-2.904644,0.020000,-1.249689,-2.748671,0.020000,-0.827562,-2.748671,0.805254,-0.827562,-2.904644,0.805254,-1.249689,1.814736,0.815254,1.173121,1.814736,0.010000,1.173121 + ,1.903739,0.010000,1.083048,-3.208287,0.815254,0.701739,-3.166744,0.815254,0.720446,-3.166744,0.010000,0.720446,-3.208287,0.010000,0.701739,1.903300,0.811921,0.707513,2.744432,0.020000,0.105865 + ,2.854168,0.020000,-0.202990,2.854168,0.805254,-0.202990,2.744432,0.805254,0.105865,0.962010,0.008000,0.521671,0.962010,0.817254,0.521671,0.362775,0.020000,-1.249505,0.362775,0.805254,-1.249505 + ,0.203368,0.020000,-0.827562,0.047396,0.020000,-1.249689,0.047396,0.805254,-1.249689,0.203368,0.805254,-0.827562,1.925156,0.815254,0.833616,1.925156,0.010000,0.833616,1.903300,0.013333,0.707513 + ,0.888414,0.815254,0.703583,-3.008725,0.010000,0.763976,-2.290325,0.012000,0.763976,-3.008725,0.815254,0.763976,-2.290325,0.813254,0.763976,3.332144,0.020000,-0.105631,3.755800,0.020000,-1.249694 + ,3.755800,0.805254,-1.249694,3.332144,0.805254,-0.105631,2.621032,0.805254,-0.403418,2.844918,0.805254,-0.233909,2.844918,0.020000,-0.233909,2.621032,0.020000,-0.403418,-0.374071,0.805254,-1.268450 + ,0.020464,0.805254,-1.268450,0.020464,0.020000,-1.268450,-0.374071,0.020000,-1.268450,0.931507,0.815254,0.667034,0.931507,0.010000,0.667034,0.888414,0.010000,0.703583,-3.776431,0.815254,1.206387 + ,-3.927792,0.815254,1.139876,-3.927792,0.010000,1.139876,-3.776431,0.010000,1.206387,-4.301294,0.010000,0.571359,0.106025,0.010000,1.261809,0.106025,0.815254,1.261809,-0.770301,0.020000,1.261809 + ,-0.770301,0.805254,1.261809,-4.266081,0.013333,0.670104,-4.266081,0.811921,0.670104,-4.301294,0.815254,0.571359,1.672583,0.013333,-0.808801,2.839781,0.020000,1.243034,3.060825,0.020000,0.640901 + ,3.060825,0.805254,0.640901,2.839781,0.805254,1.243034,1.672583,0.811921,-0.808801,2.350375,0.020000,-0.206367,2.350375,0.805254,-0.206367,-4.399271,0.815254,0.270421,-4.529125,0.815254,-0.102090 + ,-4.529125,0.010000,-0.102090,-4.399271,0.010000,0.270421,0.766923,0.815254,0.757972,-3.486425,0.020000,-0.808801,-3.091891,0.020000,-0.808801,-3.091891,0.805254,-0.808801,-3.486425,0.805254,-0.808801 + ,0.808119,0.815254,0.745385,0.808119,0.010000,0.745385,0.766923,0.010000,0.757972,-4.083631,0.815254,1.001302,-4.154613,0.815254,0.900139,-4.154613,0.010000,0.900139,-4.083631,0.010000,1.001302 + ,-1.352210,0.815254,0.763976,3.392645,0.020000,0.179271,3.258531,0.020000,0.542910,3.258531,0.805254,0.542910,3.392645,0.805254,0.179271,-1.352210,0.010000,0.763976,-1.185799,0.805254,1.242917 + ,-1.185799,0.020000,1.242917,-3.355273,0.817254,0.521671,-3.577232,0.012000,-0.133709,-3.577232,0.813254,-0.133709,-2.582739,0.813254,-0.145368,-2.582739,0.012000,-0.145368,-1.658305,0.020000,-1.249689 + ,-1.502333,0.020000,-0.827562,-1.502333,0.805254,-0.827562,-1.658305,0.805254,-1.249689,-3.327977,0.815254,0.585416,-3.327977,0.010000,0.585416,-3.355273,0.008000,0.521671,-1.539232,0.815254,0.219283 + ,3.127646,0.020000,0.443851,3.270398,0.020000,0.094607,3.270398,0.805254,0.094607,3.127646,0.805254,0.443851,-1.539232,0.010000,0.219283,1.713262,0.815254,1.221622,-1.852346,0.020000,-0.827562 + ,-2.008318,0.020000,-1.249689,-2.008318,0.805254,-1.249689,-1.852346,0.805254,-0.827562,1.713262,0.010000,1.221622,0.950159,0.010000,1.261809,1.284437,0.010000,1.261809,1.284437,0.815254,1.261809 + ,0.950159,0.815254,1.261809,-3.244499,0.815254,0.674622,-3.244499,0.010000,0.674622,1.938698,0.815254,0.951403,2.993675,0.805254,-0.130626,3.261790,0.805254,0.064331,3.261790,0.020000,0.064331 + ,2.993675,0.020000,-0.130626,-2.696948,0.020000,-0.600251,-2.696948,0.805254,-0.600251,-1.840622,0.805254,-0.600251,-1.840622,0.020000,-0.600251,-3.447820,0.813254,0.228756,-3.447820,0.012000,0.228756 + ,-2.465453,0.012000,0.219397,-2.465453,0.813254,0.219397,-2.891576,0.805254,-1.268450,-2.035250,0.805254,-1.268450,-2.035250,0.020000,-1.268450,-2.891576,0.020000,-1.268450,1.938698,0.010000,0.951403 + ,-3.107536,0.815254,0.746888,-0.532939,0.805254,-0.581354,-0.070488,0.813254,0.752638,-0.070488,0.012000,0.752638,-0.532939,0.020000,-0.581354,-3.107536,0.010000,0.746888,0.963675,0.815254,0.603389 + ,2.876019,0.020000,-1.249452,2.664452,0.020000,-0.606459,2.664452,0.805254,-0.606459,2.876019,0.805254,-1.249452,2.512130,0.020000,-0.065964,2.722461,0.020000,0.111801,2.722461,0.805254,0.111801 + ,2.512130,0.805254,-0.065964,1.209006,0.020000,-1.268450,0.376365,0.020000,-1.268450,0.376365,0.805254,-1.268450,1.209006,0.805254,-1.268450,-0.204235,0.020000,-0.808801,0.190300,0.020000,-0.808801 + ,0.190300,0.805254,-0.808801,-0.204235,0.805254,-0.808801,0.963675,0.010000,0.603389,-3.577942,0.815254,1.242411,-3.577942,0.010000,1.242411,-3.343421,0.010000,1.261809,-0.962883,0.010000,0.763976 + ,-0.962883,0.815254,0.763976,-1.429264,0.020000,-0.581354,-1.429264,0.805254,-0.581354,-2.087476,0.010000,1.261809,-2.087476,0.815254,1.261809,-3.343421,0.815254,1.261809,0.849662,0.815254,0.728064 + ,2.433706,0.020000,0.112480,2.084909,0.020000,1.242698,2.084909,0.805254,1.242698,2.433706,0.805254,0.112480,1.509679,0.020000,-1.249689,1.509679,0.805254,-1.249689,-3.455784,0.012000,0.240171 + ,-3.455784,0.813254,0.240171,-3.669330,0.020000,-1.249689,-3.513357,0.020000,-0.827562,-3.513357,0.805254,-0.827562,-3.669330,0.805254,-1.249689,0.849662,0.010000,0.728064,-4.007098,0.815254,1.083062 + ,-4.007098,0.010000,1.083062,0.723533,0.010000,0.763976,4.078557,0.020000,1.261809,4.881681,0.020000,1.261809,4.881681,0.805254,1.261809,4.078557,0.805254,1.261809,2.454904,0.805254,0.106249 + ,3.052417,0.805254,0.609246,3.052417,0.020000,0.609246,2.454904,0.020000,0.106249,-0.606007,0.020000,-0.827562,-0.761980,0.020000,-1.249689,-0.761980,0.805254,-1.249689,-0.606007,0.805254,-0.827562 + ,-3.593259,0.813254,-0.144872,-3.593259,0.012000,-0.144872,-3.986930,0.020000,-1.249610,-3.986930,0.805254,-1.249610,0.723533,0.815254,0.763976,-0.054557,0.012000,0.763976,-0.054557,0.813254,0.763976 + ,-4.213120,0.815254,0.804520,-4.213120,0.010000,0.804520,1.560515,0.815254,1.253494,3.415695,0.805254,0.172332,4.885552,0.805254,1.249983,4.885552,0.020000,1.249983,3.415695,0.020000,0.172332 + ,-1.645237,0.805254,-1.268450,-0.788911,0.805254,-1.268450,-0.788911,0.020000,-1.268450,-1.645237,0.020000,-1.268450,1.560515,0.010000,1.253494,1.858206,0.010000,0.571359,1.858206,0.815254,0.571359 + ,-3.290344,0.815254,0.632473,-3.290344,0.010000,0.632473,2.874523,0.020000,0.251932,3.104892,0.020000,0.449350,3.104892,0.805254,0.449350,2.874523,0.805254,0.251932,-1.199234,0.020000,1.261809 + ,-1.199234,0.805254,1.261809,-2.721740,0.020000,-0.808801,-1.865414,0.020000,-0.808801,-1.865414,0.805254,-0.808801,-2.721740,0.805254,-0.808801,-0.796852,0.805254,1.242912,-0.796852,0.020000,1.242912 + ,2.598965,0.020000,-0.396450,2.502977,0.020000,-0.097914,2.502977,0.805254,-0.097914,2.598965,0.805254,-0.396450,1.235478,0.020000,-1.249526,1.235478,0.805254,-1.249526,2.099011,0.020000,1.261809 + ,2.812888,0.020000,1.261809,2.812888,0.805254,1.261809,2.099011,0.805254,1.261809,-0.387139,0.020000,-1.249689,-0.231167,0.020000,-0.827562,-0.231167,0.805254,-0.827562,-0.387139,0.805254,-1.249689 + ,2.674197,0.020000,-0.575455,3.309203,0.020000,-0.098881,3.309203,0.805254,-0.098881,2.674197,0.805254,-0.575455,2.370742,0.020000,-0.212332,2.453241,0.020000,-0.505479,2.453241,0.805254,-0.505479 + ,2.370742,0.805254,-0.212332,-3.078822,0.020000,-0.827562,-3.234795,0.020000,-1.249689,-3.234795,0.805254,-1.249689,-3.078822,0.805254,-0.827562,-1.415815,0.805254,-0.600251,-0.559489,0.805254,-0.600251 + ,-0.559489,0.020000,-0.600251,-1.415815,0.020000,-0.600251,2.902270,0.805254,-1.268450,3.742745,0.805254,-1.268450,3.742745,0.020000,-1.268450,2.902270,0.020000,-1.268450,1.518533,0.805254,-1.256168 + ,2.442874,0.805254,-0.537012,2.442874,0.020000,-0.537012,1.518533,0.020000,-1.256168,-4.928348,0.805254,-1.249560,-4.928348,0.020000,-1.249560,-3.656261,0.805254,-1.268450,-3.261727,0.805254,-1.268450 + ,-3.261727,0.020000,-1.268450,-3.656261,0.020000,-1.268450,3.266717,0.020000,0.574781,4.043450,0.020000,1.248702,4.043450,0.805254,1.248702,3.266717,0.805254,0.574781,-2.574413,0.012000,-0.156932 + ,-2.574413,0.813254,-0.156932,-2.710826,0.805254,-0.581211,-2.710826,0.020000,-0.581211,-1.475401,0.020000,-0.808801,-0.619075,0.020000,-0.808801,-0.619075,0.805254,-0.808801,-1.475401,0.805254,-0.808801 + ,-4.013644,0.805254,-1.268450,-4.013644,0.020000,-1.268450,-4.914920,0.020000,-1.268450,-4.914920,0.805254,-1.268450,2.971579,0.020000,-0.123284,2.865256,0.020000,0.219814,2.865256,0.805254,0.219814 + ,2.971579,0.805254,-0.123284 + PolygonVertexIndex: 2,3,4,-2,6,7,8,-6,10,11,12,-10,14,15,16,-14,18,19,20,-18,22,23,24,-22,26,27,28,-26,30,31,32,-30,33,34,36,-36,39,0,-38,34,0,-40,33,0,-35,40,41,42,-39 + ,37,0,38,-43,47,46,-44,45,47,-44,45,43,-45,43,46,49,-49,48,49,51,-51,50,51,53,-53,52,53,55,-55,54,55,57,-57,56,57,41,-41,59,60,45,-45,58,62,63,-62,65,66,-70 + ,66,68,-70,66,67,-69,64,70,71,-73,70,66,65,-72,76,77,-79,74,76,-79,74,75,-77,76,73,79,-78,73,80,81,-80,80,82,83,-82,82,84,85,-84,84,86,87,-86,86,64,72,-88 + ,88,75,74,-90,92,91,93,-95,88,89,-94,95,88,-94,90,95,-94,90,93,-92,97,99,-97,97,61,-100,97,98,-62,98,58,-62,67,96,99,-69,98,97,95,-91,102,103,104,-102 + ,106,107,108,-106,110,111,112,-110,114,115,116,-114,118,119,120,-118,122,123,124,-122,126,127,128,-126,130,131,132,-130,134,135,136,-134,138,139,140,-138,100,142,143,-142,145,146,-148,146,141,-148,146,100,-142 + ,144,148,149,-151,148,146,145,-150,154,155,-157,152,154,-157,152,153,-155,154,151,157,-156,151,158,159,-158,158,160,161,-160,160,162,163,-162,162,164,165,-164,164,144,150,-166,168,153,152,-168,169,170,172,-172 + ,174,176,-174,176,175,-174,175,166,-174,178,179,180,-178,177,180,174,-174,185,184,-182,183,185,-182,183,181,-183,181,184,187,-187,186,187,189,-189,188,189,191,-191,190,191,193,-193,192,193,195,-195 + ,194,195,179,-179,196,197,183,-183,200,201,199,-199,199,197,-197,199,196,-203,199,202,-204,198,199,-204,206,207,-206,207,170,-206,170,204,-206,170,169,-205,166,175,207,-207,204,203,202,-206 + ,210,211,212,-210,214,215,216,-214,208,218,219,-218,222,223,224,-222,226,227,228,-226,229,230,231,-221,232,233,234,-236,238,239,240,-238,241,242,244,-244,246,247,248,-246,249,250,251,-237,254,253,255,-257,258,259,260,-258 + ,262,263,264,-262,266,267,268,-266,269,270,271,-253,272,273,274,-276,277,278,280,-280,276,281,282,-284,286,287,288,-286,290,291,289,-285,292,293,294,-296,298,299,300,-298,301,302,303,-297,304,305,306,-308,310,311,312,-310 + ,308,314,315,-314,318,319,320,-318,322,323,324,-322,295,276,283,-293,316,325,326,-328,330,331,332,-330,217,328,333,-209,336,337,338,-336,334,339,230,-230,341,342,343,-341,344,232,235,-346,348,349,350,-348,352,353,354,-352 + ,356,357,358,-356,360,361,362,-360,346,363,250,-250,366,367,368,-366,364,255,253,-370,372,373,374,-372,376,377,378,-376,380,381,382,-380,384,385,386,-384,370,387,270,-270,388,272,275,-390,391,392,394,-394,390,395,396,-398 + ,400,401,402,-400,284,289,404,-404,406,316,327,-406,408,409,410,-408,398,411,302,-302,412,304,307,-414,416,417,418,-416,420,421,422,-420,424,425,426,-424,428,429,430,-428,432,433,431,-415,434,282,281,-436,438,439,440,-438 + ,442,443,444,-442,436,445,339,-335,446,447,236,-252,448,344,345,-450,451,452,453,-451,395,454,455,-397,457,458,459,-457,220,231,363,-347,392,391,461,-461,233,364,369,-235,463,464,465,-463,466,467,447,-447,469,470,471,-469 + ,473,474,475,-473,242,241,387,-371,477,478,479,-477,481,482,483,-481,485,486,487,-485,252,271,411,-399,273,412,413,-275,489,490,491,-489,389,390,397,-389,493,494,495,-493,497,498,499,-497,293,500,501,-295,503,504,505,-503 + ,296,303,414,-432,305,434,435,-307,507,508,509,-507,511,512,513,-511,328,308,313,-334,515,516,517,-515,342,341,445,-437,519,520,521,-519,340,343,278,-278,325,448,449,-327,523,524,525,-523,5,8,268,-268,9,12,362,-362 + ,13,16,444,-444,17,20,499,-499,21,24,264,-264,25,28,350,-350,29,32,440,-440,35,36,491,-491,33,35,368,-368,243,380,-60,391,393,36,-35,303,302,56,-41,446,251,47,-46,414,303,40,-39,38,0,432,-415 + ,315,454,-70,340,277,37,-43,46,47,251,-251,363,231,51,-50,387,241,43,-49,231,230,53,-52,270,387,48,-51,230,339,55,-54,271,270,50,-53,339,445,57,-56,411,271,52,-55,445,341,41,-58,302,411,54,-57 + ,60,59,380,-380,63,62,351,-355,313,315,69,-69,390,389,72,-72,429,92,-520,61,63,218,-209,234,369,64,-87,281,276,74,-79,66,70,253,-255,501,520,-95,395,390,71,-66,78,77,435,-282,307,306,79,-82 + ,327,326,73,-77,413,307,81,-84,326,449,80,-74,274,413,83,-86,449,345,82,-81,275,274,85,-88,345,235,84,-83,389,275,87,-73,235,234,86,-85,92,94,520,-520,429,428,91,-93,295,294,93,-90,294,501,94,-94 + ,102,285,-470,400,103,-469,75,88,405,-328,258,105,-495,108,371,-496,333,313,68,-100,317,320,98,-91,101,104,422,-422,104,103,400,-400,108,107,372,-372,116,115,266,-266,120,119,360,-360,124,123,442,-442 + ,128,127,497,-497,483,482,127,-127,132,131,262,-262,136,135,348,-348,140,139,438,-438,143,142,489,-489,147,141,392,-461,244,168,-382,141,143,394,-393,301,296,144,-165,236,447,152,-157,146,148,431,-434,467,382,-168 + ,278,343,149,-146,156,155,249,-237,220,346,157,-160,242,370,151,-155,229,220,159,-162,370,269,158,-152,334,229,161,-164,269,252,160,-159,436,334,163,-166,252,398,162,-161,342,436,165,-151,398,301,164,-163,168,167,382,-382 + ,153,168,244,-243,213,373,-480,260,214,-479,319,204,169,-512,287,420,-212,430,518,-201,402,212,-420,364,233,194,-179,283,282,185,-184,500,201,-522,177,173,256,-256,203,318,427,-199,397,396,174,-181 + ,142,365,-490,184,185,282,-435,305,304,189,-188,325,316,181,-187,304,412,191,-190,448,325,186,-189,412,273,193,-192,344,448,188,-191,273,272,195,-194,232,344,190,-193,272,388,179,-196,233,232,192,-195,201,200,518,-522 + ,239,262,-132,427,430,200,-199,199,201,500,-294,347,525,-137,240,130,-378,209,401,-472,288,210,-471,196,182,316,-407,374,216,-493,259,493,-216,308,328,207,-176,328,217,170,-208,203,204,319,-319 + ,324,124,-442,221,224,166,-207,228,120,-360,209,212,402,-402,425,442,-124,291,483,-127,248,114,-386,213,216,374,-374,117,227,-460,337,360,-120,510,513,62,-59,224,223,254,-257,169,171,512,-512 + ,482,497,-128,208,333,99,-62,247,266,-116,109,409,-301,227,226,456,-460,410,112,-503,338,337,119,-119,336,335,10,-10,512,171,-353,486,503,-112,243,244,381,-381,257,477,-107,171,172,353,-353 + ,147,460,-281,257,260,478,-478,346,249,155,-158,250,363,49,-47,255,364,178,-178,369,253,70,-65,222,221,358,-358,286,101,-422,462,465,261,-265,113,474,-387,472,475,265,-269,372,107,-477,23,22,376,-376 + ,130,129,378,-378,460,461,279,-281,320,510,58,-99,7,6,384,-384,114,113,386,-386,133,524,-454,285,288,470,-470,355,202,196,-407,75,327,-77,291,290,480,-484,338,118,-459,20,19,284,-404,218,63,-355 + ,404,289,125,-129,261,465,-133,513,351,-63,379,466,-61,109,112,410,-410,4,3,408,-408,418,138,-509,311,310,506,-510,279,461,-40,418,417,139,-139,416,415,30,-30,388,397,180,-180,320,319,511,-511 + ,212,211,420,-420,368,35,-491,441,444,321,-325,323,322,514,-518,32,309,-441,426,425,123,-123,424,423,14,-14,331,348,-136,394,143,-489,416,29,-440,335,338,458,-458,121,323,-518,329,451,-27 + ,522,525,347,-351,153,242,-155,352,351,513,-513,450,523,-28,27,26,451,-451,134,133,453,-453,454,395,65,-70,176,174,396,-456,265,475,-117,375,463,-24,404,128,-497,96,67,223,-223,359,362,225,-229 + ,365,368,490,-490,299,487,-111,28,522,-351,11,10,457,-457,118,117,459,-459,24,462,-265,492,495,371,-375,34,39,461,-392,314,176,-456,373,372,476,-480,20,403,-500,354,353,219,-219,112,111,503,-503 + ,481,17,-499,263,262,239,-239,129,132,465,-465,24,23,463,-463,322,15,-515,245,248,385,-385,447,467,167,-153,45,60,466,-447,423,515,-15,267,266,247,-247,113,116,475,-475,8,7,473,-473,332,134,-453 + ,419,422,399,-403,366,365,142,-101,316,182,-182,401,400,468,-472,226,11,-457,214,213,479,-479,107,106,477,-477,502,505,407,-411,481,480,18,-18,103,102,469,-469,210,209,471,-471,237,376,-23,415,418,508,-508 + ,299,298,484,-488,487,486,111,-111,485,484,2,-2,312,140,-438,336,9,-362,423,426,516,-516,424,13,-444,223,67,66,-255,105,108,495,-495,216,215,493,-493,245,384,-7,430,429,519,-519,129,464,-379 + ,246,5,-268,310,31,-507,0,33,367,-433,296,431,148,-145,434,305,187,-185,306,435,77,-80,241,44,-44,383,473,-8,31,30,507,-507,138,137,509,-509,415,507,-31,8,472,-269,15,14,515,-515 + ,122,121,517,-517,256,173,166,-225,297,408,-4,349,348,331,-331,133,136,525,-525,28,27,523,-523,36,393,-492,172,170,217,-220,237,240,377,-377,361,360,337,-337,117,120,228,-228,12,11,226,-226,317,90,91,-429 + ,341,340,42,-42,343,342,150,-150,172,219,-354,222,357,97,-97,379,382,467,-467,240,239,131,-131,238,237,22,-22,241,243,59,-45,383,386,474,-474,496,499,403,-405,421,420,287,-287,355,358,205,-203,95,97,357,-357 + ,95,356,405,-89,488,491,393,-395,248,247,115,-115,246,245,6,-6,375,378,464,-464,494,493,259,-259,260,259,215,-215,258,257,106,-106,297,300,409,-409,504,503,486,-486,437,440,309,-313,521,520,501,-501,417,438,-140 + ,16,321,-445,433,432,367,-367,277,279,39,-38,280,278,145,-148,221,206,205,-359,480,290,-19,104,399,-423,286,285,102,-102,288,287,211,-211,335,457,-11,484,298,-3,19,18,290,-285,126,125,289,-292 + ,293,292,197,-200,485,1,-505,12,225,-363,4,407,-506,3,2,298,-298,110,109,300,-300,137,311,-510,455,454,315,-315,439,438,417,-417,137,140,312,-312,32,31,310,-310,175,176,314,-309,406,405,356,-356 + ,428,427,318,-318,426,122,-517,329,332,452,-452,443,442,425,-425,121,124,324,-324,16,15,322,-322,292,283,183,-198,276,295,89,-75,238,21,-264,450,453,524,-524,146,433,366,-101,330,25,-350,498,497,482,-482 + ,332,331,135,-135,330,329,26,-26,1,4,505,-505 + Edges: + GeometryVersion: 124 + LayerElementNormal: 0 { + Version: 101 + Name: "" + MappingInformationType: "ByVertice" + ReferenceInformationType: "Direct" + Normals: 0.095492415130138,-0.958037018775940,-0.270180374383926,0.285012364387512,-0.866786718368530,-0.409161657094955 + ,0.352336198091507,-0.903103709220886,0.245429858565331,-0.285012364387512,-0.866786718368530,0.409161657094955 + ,-0.352336198091507,-0.903103709220886,-0.245429858565331,0.285012364387512,-0.866786718368530,-0.409161657094955 + ,0.352336198091507,-0.903103709220886,0.245429858565331,-0.285012364387512,-0.866786718368530,0.409161657094955 + ,-0.352336198091507,-0.903103709220886,-0.245429858565331,0.285012364387512,-0.866786718368530,-0.409161657094955 + ,0.352336198091507,-0.903103709220886,0.245429858565331,-0.285012364387512,-0.866786718368530,0.409161657094955 + ,-0.352336198091507,-0.903103709220886,-0.245429858565331,0.285012364387512,-0.866786718368530,-0.409161657094955 + ,0.352336198091507,-0.903103709220886,0.245429858565331,-0.285012364387512,-0.866786718368530,0.409161657094955 + ,-0.352336198091507,-0.903103709220886,-0.245429858565331,0.473525196313858,-0.866878271102905,-0.155674919486046 + ,0.116611227393150,-0.912961184978485,0.390942096710205,-0.349375903606415,-0.906491279602051,0.236976221203804 + ,-0.135471656918526,-0.970824301242828,-0.197729423642159,0.477553635835648,-0.866878271102905,-0.142857149243355 + ,0.111636705696583,-0.903744637966156,0.413220614194870,-0.479140609502792,-0.866908788681030,0.137272253632545 + ,-0.130314037203789,-0.901425242424011,-0.412793368101120,0.478347122669220,-0.867549657821655,-0.135990470647812 + ,0.102450639009476,-0.899838268756866,0.423993647098541,-0.478682816028595,-0.867030858993530,0.138096258044243 + ,-0.137058630585670,-0.900570690631866,-0.412488162517548,0.250770598649979,-0.964537501335144,0.082064270973206 + ,-0.165410324931145,-0.881069362163544,0.443037211894989,-0.482955425977707,-0.866786718368530,0.124027222394943 + ,-0.127994626760483,-0.895962417125702,-0.425244897603989,0.222846150398254,-0.958220183849335,-0.179265722632408 + ,-0.363566994667053,-0.922513484954834,0.129490032792091,0.288064211606979,-0.866878271102905,-0.406811743974686 + ,-0.352336198091507,-0.900967419147491,-0.253181546926498,-0.002441480755806,-0.923154413700104,0.384319603443146 + ,-0.032807398587465,-0.927457511425018,-0.372417360544205,-0.287911623716354,-0.866634130477905,0.407452613115311 + ,-0.091525010764599,-0.927457511425018,-0.362468332052231,0.003173924982548,-0.918790221214294,0.394726395606995 + ,-0.000061037018895,-0.923307001590729,0.383983880281448,-0.407025367021561,-0.912656009197235,-0.036652728915215 + ,-0.305429250001907,-0.952177524566650,0.007141331210732,0.367168188095093,-0.922208309173584,-0.121188998222351 + ,0.392437517642975,-0.917386412620544,-0.066225163638592,0.381969660520554,-0.919095456600189,-0.096560567617416 + ,-0.316721081733704,-0.945646524429321,-0.073366492986679,0.423291712999344,-0.905758857727051,0.019684437662363 + ,-0.274452954530716,-0.939512312412262,-0.204779192805290,0.369731754064560,-0.902890086174011,0.219214454293251 + ,-0.229926452040672,-0.926450371742249,-0.297982722520828,0.234565258026123,-0.902188181877136,0.361949533224106 + ,-0.182256534695625,-0.927762687206268,-0.325540930032730,0.118350781500340,-0.902890086174011,0.413220614194870 + ,-0.137760549783707,-0.924863457679749,-0.354411453008652,0.032898955047131,-0.905789375305176,0.422376155853271 + ,-0.197851493954659,-0.978942215442657,-0.049653615802526,-0.352671891450882,-0.900265514850616,-0.255195766687393 + ,0.289345979690552,-0.866695165634155,-0.406323432922363,0.363322854042053,-0.922544002532959,-0.129825741052628 + ,-0.350688189268112,-0.898922681808472,-0.262520223855972,0.286507755517960,-0.866664648056030,-0.408368170261383 + ,0.114871665835381,-0.932493031024933,-0.342356652021408,0.001922666095197,-0.922147274017334,0.386761069297791 + ,-0.104983672499657,-0.980315566062927,-0.167149871587753,-0.199102759361267,-0.978820145130157,-0.046998504549265 + ,0.363780617713928,-0.923429071903229,-0.122074037790298,0.353007584810257,-0.900479137897491,0.253883481025696 + ,0.041566208004951,-0.927152335643768,-0.372295290231705,-0.011993774212897,-0.917569518089294,0.397350996732712 + ,-0.046327099204063,-0.914731264114380,0.401348918676376,0.306222736835480,-0.936185777187347,-0.172460094094276 + ,-0.366344183683395,-0.920865476131439,0.133213296532631,0.363841682672501,-0.922208309173584,-0.130802333354950 + ,0.354167312383652,-0.926023125648499,-0.130466625094414,-0.361796915531158,-0.915097534656525,0.177953422069550 + ,-0.358561962842941,-0.923459589481354,0.136326178908348,-0.326273381710052,-0.920285642147064,0.215765863656998 + ,0.275002300739288,-0.928586661815643,-0.249122589826584,-0.308053821325302,-0.916592895984650,0.254829555749893 + ,0.244453266263008,-0.926297783851624,-0.286629855632782,-0.263893544673920,-0.912472903728485,0.312540054321289 + ,0.196172982454300,-0.930326223373413,-0.309793382883072,-0.195257425308228,-0.910031437873840,0.365642249584198 + ,0.161076694726944,-0.922086238861084,-0.351786851882935,-0.109073154628277,-0.906430244445801,0.407971441745758 + ,0.197271645069122,-0.979461014270782,0.041199989616871,-0.361033976078033,-0.924619257450104,0.121127963066101 + ,0.092440567910671,-0.958220183849335,-0.270577102899551,0.218329414725304,-0.958861052989960,-0.181310459971428 + ,0.286111027002335,-0.866878271102905,-0.408185064792633,-0.362773507833481,-0.923459589481354,0.124881744384766 + ,-0.352153092622757,-0.901028454303741,-0.253151029348373,0.108279675245285,-0.979949355125427,0.167119354009628 + ,-0.222144231200218,-0.959471404552460,0.173223063349724,-0.094851523637772,-0.959623992443085,0.264717549085617 + ,-0.108188115060329,-0.978911697864532,-0.173223063349724,0.361919015645981,-0.923856317996979,-0.124240852892399 + ,0.222815632820129,0.958220183849335,-0.179204687476158,0.481948316097260,-0.866786718368530,-0.127994626760483 + ,0.285439610481262,-0.866786718368530,0.408856481313705,-0.354289382696152,-0.897824048995972,0.261452078819275 + ,-0.118228703737259,-0.907803595066071,-0.402294993400574,0.352275162935257,-0.903164744377136,-0.245216220617294 + ,0.124820701777935,-0.896877944469452,0.424268305301666,-0.475661486387253,-0.866786718368530,0.149510174989700 + ,-0.292306274175644,-0.866817235946655,-0.403881967067719,-0.285012364387512,0.866786718368530,0.409161657094955 + ,0.352336198091507,0.903103709220886,0.245429858565331,0.285012364387512,0.866786718368530,-0.409161657094955 + ,-0.352336198091507,0.903103709220886,-0.245429858565331,-0.285012364387512,0.866786718368530,0.409161657094955 + ,0.352336198091507,0.903103709220886,0.245429858565331,0.285012364387512,0.866786718368530,-0.409161657094955 + ,-0.352336198091507,0.903103709220886,-0.245429858565331,-0.285012364387512,0.866786718368530,0.409161657094955 + ,0.352336198091507,0.903103709220886,0.245429858565331,0.285012364387512,0.866786718368530,-0.409161657094955 + ,-0.352336198091507,0.903103709220886,-0.245429858565331,-0.285012364387512,0.866786718368530,0.409161657094955 + ,0.352336198091507,0.903103709220886,0.245429858565331,0.285012364387512,0.866786718368530,-0.409161657094955 + ,-0.352336198091507,0.903103709220886,-0.245429858565331,-0.349375903606415,0.906491279602051,0.236976221203804 + ,0.116611227393150,0.912961184978485,0.390942096710205,0.473525196313858,0.866878271102905,-0.155674919486046 + ,-0.135471656918526,0.970824301242828,-0.197729423642159,-0.479140609502792,0.866908788681030,0.137272253632545 + ,0.111636705696583,0.903744637966156,0.413220614194870,0.477553635835648,0.866878271102905,-0.142857149243355 + ,-0.130314037203789,0.901425242424011,-0.412793368101120,-0.478682816028595,0.867030858993530,0.138096258044243 + ,0.102450639009476,0.899838268756866,0.423993647098541,0.478347122669220,0.867549657821655,-0.135990470647812 + ,-0.137058630585670,0.900570690631866,-0.412488162517548,-0.482955425977707,0.866786718368530,0.124027222394943 + ,-0.165410324931145,0.881069362163544,0.443037211894989,0.250770598649979,0.964537501335144,0.082064270973206 + ,-0.127994626760483,0.895962417125702,-0.425244897603989,-0.363566994667053,0.922482967376709,0.129520550370216 + ,0.288064211606979,0.866878271102905,-0.406811743974686,-0.352336198091507,0.900967419147491,-0.253181546926498 + ,-0.091525010764599,0.927457511425018,-0.362468332052231,-0.002471999265254,0.923154413700104,0.384350121021271 + ,0.095461897552013,0.958067595958710,-0.270149856805801,-0.287942141294479,0.866603612899780,0.407483130693436 + ,-0.032807398587465,0.927457511425018,-0.372417360544205,-0.000061037018895,0.923307001590729,0.383983880281448 + ,0.003173924982548,0.918790221214294,0.394726395606995,-0.316721081733704,0.945646524429321,-0.073366492986679 + ,0.367137670516968,0.922269344329834,-0.120822779834270,-0.305429250001907,0.952177524566650,0.007446516305208 + ,-0.407055884599686,0.912656009197235,-0.036317028105259,0.392407000064850,0.917386412620544,-0.066042050719261 + ,0.381969660520554,0.919156491756439,-0.095980711281300,0.423291712999344,0.905758857727051,0.019684437662363 + ,-0.274452954530716,0.939512312412262,-0.204779192805290,0.369731754064560,0.902890086174011,0.219214454293251 + ,-0.229926452040672,0.926450371742249,-0.297982722520828,0.234565258026123,0.902188181877136,0.361949533224106 + ,-0.182256534695625,0.927762687206268,-0.325540930032730,0.118350781500340,0.902890086174011,0.413220614194870 + ,-0.137760549783707,0.924863457679749,-0.354411453008652,0.032898955047131,0.905789375305176,0.422376155853271 + ,-0.199072241783142,0.978850662708282,-0.046998504549265,0.289345979690552,0.866695165634155,-0.406323432922363 + ,-0.352671891450882,0.900265514850616,-0.255195766687393,-0.197820976376534,0.978972733020782,-0.049623094499111 + ,0.363322854042053,0.922544002532959,-0.129795223474503,-0.350688189268112,0.898922681808472,-0.262520223855972 + ,0.286507755517960,0.866664648056030,-0.408368170261383,-0.104953154921532,0.980315566062927,-0.167119354009628 + ,0.001922666095197,0.922147274017334,0.386761069297791,0.363780617713928,0.923429071903229,-0.122043520212173 + ,0.353007584810257,0.900479137897491,0.253883481025696,0.041566208004951,0.927152335643768,-0.372295290231705 + ,0.114871665835381,0.932493031024933,-0.342356652021408,-0.046327099204063,0.914731264114380,0.401348918676376 + ,-0.011993774212897,0.917569518089294,0.397350996732712,0.354197829961777,0.926053643226624,-0.130161449313164 + ,0.363872200250626,0.922238826751709,-0.130436107516289,-0.366313666105270,0.920834958553314,0.133457437157631 + ,-0.361766397953033,0.915036439895630,0.178258612751961,-0.358500927686691,0.923398554325104,0.136967062950134 + ,0.306222736835480,0.936185777187347,-0.172460094094276,-0.326273381710052,0.920285642147064,0.215765863656998 + ,0.275002300739288,0.928586661815643,-0.249122589826584,-0.308053821325302,0.916592895984650,0.254829555749893 + ,0.244453266263008,0.926297783851624,-0.286629855632782,-0.263893544673920,0.912472903728485,0.312540054321289 + ,0.196172982454300,0.930326223373413,-0.309793382883072,-0.195257425308228,0.910031437873840,0.365642249584198 + ,0.161076694726944,0.922086238861084,-0.351786851882935,-0.109073154628277,0.906430244445801,0.407971441745758 + ,0.197271645069122,0.979461014270782,0.041322059929371,-0.361033976078033,0.924619257450104,0.121250040829182 + ,0.218298897147179,0.958891570568085,-0.181157872080803,-0.362773507833481,0.923429071903229,0.124942779541016 + ,0.286111027002335,0.866878271102905,-0.408185064792633,-0.352153092622757,0.901028454303741,-0.253151029348373 + ,0.108279675245285,0.979918837547302,0.167271956801414,0.092440567910671,0.958281219005585,-0.270455032587051 + ,-0.108188115060329,0.978911697864532,-0.173192545771599,-0.094821006059647,0.959623992443085,0.264748066663742 + ,-0.222144231200218,0.959471404552460,0.173253580927849,0.361949533224106,0.923856317996979,-0.124240852892399 + ,0.872005343437195,-0.384258538484573,-0.303170859813690,-0.354289382696152,0.897824048995972,0.261452078819275 + ,0.285439610481262,0.866786718368530,0.408856481313705,0.481948316097260,0.866786718368530,-0.127994626760483 + ,-0.118228703737259,0.907803595066071,-0.402294993400574,-0.475661486387253,0.866786718368530,0.149510174989700 + ,0.124820701777935,0.896877944469452,0.424268305301666,0.352275162935257,0.903164744377136,-0.245216220617294 + ,-0.292306274175644,0.866817235946655,-0.403881967067719,0.872005343437195,0.384258538484573,-0.303170859813690 + ,0.768120348453522,-0.333780944347382,-0.546372890472412,0.768120348453522,0.333780944347382,-0.546372890472412 + ,0.809839189052582,0.366435736417770,0.458052307367325,-0.735801279544830,0.447920173406601,0.507827997207642 + ,-0.735801279544830,-0.447920173406601,0.507827997207642,-0.854670882225037,-0.514450490474701,-0.069368571043015 + ,-0.854670882225037,0.514450490474701,-0.069368571043015,-0.924283564090729,-0.364116340875626,-0.114322334527969 + ,-0.759880363941193,-0.337748348712921,0.555406332015991,-0.759880363941193,0.337748348712921,0.555406332015991 + ,-0.924283564090729,0.364116340875626,-0.114322334527969,0.551316857337952,0.360271006822586,0.752464354038239 + ,0.551316857337952,-0.360271006822586,0.752464354038239,0.809839189052582,-0.366435736417770,0.458052307367325 + ,0.463728755712509,0.384594261646271,-0.798120081424713,0.380382716655731,0.378185361623764,-0.843958854675293 + ,0.380382716655731,-0.378185361623764,-0.843958854675293,0.463728755712509,-0.384594261646271,-0.798120081424713 + ,0.900845348834991,0.370220035314560,-0.226660966873169,0.634937584400177,-0.364757239818573,0.680990040302277 + ,0.940031111240387,-0.337534725666046,0.048921171575785,0.940031111240387,0.337534725666046,0.048921171575785 + ,0.634937584400177,0.364757239818573,0.680990040302277,-0.902249217033386,-0.400402843952179,0.159916996955872 + ,-0.902249217033386,0.400402843952179,0.159916996955872,-0.923123896121979,-0.360698252916336,-0.133091226220131 + ,-0.923123896121979,0.360698252916336,-0.133091226220131,0.924283564090729,-0.364116340875626,0.114322334527969 + ,0.759880363941193,-0.337748348712921,-0.555406332015991,0.759849846363068,0.337748348712921,-0.555406332015991 + ,0.924283564090729,0.364116340875626,0.114322334527969,0.917508482933044,0.374126404523849,-0.134830772876740 + ,0.917508482933044,-0.374126404523849,-0.134830772876740,0.900845348834991,-0.370220035314560,-0.226660966873169 + ,-0.545426785945892,0.380382716655731,-0.746848940849304,0.073305457830429,-0.379619747400284,-0.922208309173584 + ,-0.328836947679520,-0.508041620254517,-0.796044826507568,0.073305457830429,0.379619747400284,-0.922208309173584 + ,-0.328836947679520,0.508041620254517,-0.796044826507568,0.642597734928131,-0.358073681592941,0.677327811717987 + ,0.924314081668854,-0.364177376031876,-0.113864555954933,0.924314081668854,0.364177376031876,-0.113864555954933 + ,0.642597734928131,0.358073681592941,0.677327811717987,0.163457140326500,0.362437814474106,-0.917539000511169 + ,0.758720636367798,0.337534725666046,-0.557115375995636,0.758720636367798,-0.337534725666046,-0.557115375995636 + ,0.163426622748375,-0.362437814474106,-0.917539000511169,-0.427594840526581,0.364116340875626,-0.827356815338135 + ,0.257606744766235,0.337748348712921,-0.905270516872406,0.257606744766235,-0.337748348712921,-0.905270516872406 + ,-0.427594840526581,-0.364116340875626,-0.827356815338135,-0.715353846549988,0.398724317550659,-0.573778510093689 + ,-0.715353846549988,-0.398724317550659,-0.573778510093689,-0.545426785945892,-0.380382716655731,-0.746848940849304 + ,-0.283913701772690,0.359904795885086,0.888729512691498,-0.467818230390549,0.365092933177948,0.804864645004272 + ,-0.467818230390549,-0.365092933177948,0.804864645004272,-0.283913701772690,-0.359904795885086,0.888729512691498 + ,-0.872280061244965,-0.384075433015823,0.302560508251190,-0.001831110566854,-0.383495599031448,0.923520624637604 + ,-0.001831110566854,0.383495599031448,0.923520624637604,-0.264595478773117,-0.335612058639526,0.904049813747406 + ,-0.264595478773117,0.335612058639526,0.904049813747406,-0.867397069931030,-0.374767303466797,0.327311009168625 + ,-0.867397069931030,0.374736785888672,0.327311009168625,-0.872280061244965,0.384075433015823,0.302560508251190 + ,-0.766045093536377,-0.374889373779297,0.522080123424530,0.760734856128693,-0.337748348712921,0.554216146469116 + ,0.938718855381012,-0.337717831134796,0.068666644394398,0.938718855381012,0.337717831134796,0.068666644394398 + ,0.760734856128693,0.337748348712921,0.554216146469116,-0.766045093536377,0.374889373779297,0.522080123424530 + ,-0.200445562601089,-0.374187439680099,0.905392646789551,-0.200445562601089,0.374187439680099,0.905392646789551 + ,-0.875118255615234,0.383159875869751,0.295449703931808,-0.872707307338715,0.383587151765823,0.301980644464493 + ,-0.872707307338715,-0.383587151765823,0.301980644464493,-0.875118255615234,-0.383159875869751,0.295449703931808 + ,-0.194708094000816,0.380840480327606,-0.903897225856781,-0.257606744766235,-0.337748348712921,0.905270516872406 + ,0.427594840526581,-0.364116340875626,0.827356815338135,0.427594840526581,0.364116340875626,0.827356815338135 + ,-0.257606744766235,0.337748348712921,0.905270516872406,-0.311746567487717,0.378917813301086,-0.871303439140320 + ,-0.311746567487717,-0.378917813301086,-0.871303439140320,-0.194708094000816,-0.380840480327606,-0.903897225856781 + ,-0.721335470676422,0.374645233154297,0.582476258277893,-0.774712383747101,0.377788633108139,0.507034540176392 + ,-0.774712383747101,-0.377788633108139,0.507034540176392,-0.721335470676422,-0.374645233154297,0.582476258277893 + ,0.873378694057465,0.385845512151718,-0.297097682952881,-0.645771682262421,-0.357249677181244,-0.674764215946198 + ,-0.938352584838867,-0.337809383869171,-0.073274940252304,-0.938352584838867,0.337809383869171,-0.073274940252304 + ,-0.645771682262421,0.357249677181244,-0.674764215946198,0.873409211635590,-0.385814994573593,-0.297097682952881 + ,0.923886835575104,0.359965831041336,0.129734188318253,0.923886835575104,-0.359965831041336,0.129734188318253 + ,0.859035015106201,0.388775289058685,-0.332987457513809,0.242622151970863,-0.444868326187134,-0.862086832523346 + ,0.242622151970863,0.444868326187134,-0.862086832523346,-0.338297665119171,0.512070059776306,-0.789483308792114 + ,-0.338297665119171,-0.512070059776306,-0.789483308792114,-0.924283564090729,-0.364116340875626,-0.114322334527969 + ,-0.759880363941193,-0.337748348712921,0.555406332015991,-0.759880363941193,0.337748348712921,0.555406332015991 + ,-0.924283564090729,0.364116340875626,-0.114322334527969,0.790490448474884,0.391430407762527,-0.471022665500641 + ,0.790490448474884,-0.391430407762527,-0.471022665500641,0.859035015106201,-0.388775289058685,-0.332987457513809 + ,0.873805940151215,0.382671594619751,-0.299996942281723,0.612201273441315,-0.360881388187408,0.703512668609619 + ,0.938169479370117,-0.337534725666046,0.076601460576057,0.938169479370117,0.337534725666046,0.076601460576057 + ,0.612201273441315,0.360881388187408,0.703512668609619,0.873805940151215,-0.382671594619751,-0.299996942281723 + ,0.312601089477539,0.352641373872757,0.881984949111938,0.924283564090729,-0.364116340875626,0.114322334527969 + ,0.759880363941193,-0.337748348712921,-0.555406332015991,0.759880363941193,0.337748348712921,-0.555406332015991 + ,0.924283564090729,0.364116340875626,0.114322334527969,0.312601089477539,-0.352641373872757,0.881984949111938 + ,-0.000091555528343,-0.380565822124481,0.924741327762604,0.015442365780473,-0.364085823297501,0.931211292743683 + ,0.015442365780473,0.364085823297501,0.931211292743683,-0.000091555528343,0.380565822124481,0.924741327762604 + ,0.588976740837097,0.382549524307251,-0.711844205856323,0.588976740837097,-0.382549524307251,-0.711844205856323 + ,0.927335441112518,0.366618841886520,0.074953459203243,0.148197889328003,0.361613810062408,-0.920468747615814 + ,0.757499933242798,0.337534725666046,-0.558763384819031,0.757499933242798,-0.337534725666046,-0.558763384819031 + ,0.148197889328003,-0.361613810062408,-0.920468747615814,-0.417310088872910,-0.360026866197586,-0.834376037120819 + ,-0.417310088872910,0.360026866197586,-0.834376037120819,0.262977987527847,0.337626278400421,-0.903775155544281 + ,0.262977987527847,-0.337626278400421,-0.903775155544281,0.341990411281586,0.514572560787201,0.786248385906219 + ,0.341990411281586,-0.514572560787201,0.786248385906219,-0.250160217285156,-0.447157204151154,0.858729839324951 + ,-0.250160217285156,0.447157204151154,0.858729839324951,-0.427594840526581,0.364116340875626,-0.827356815338135 + ,0.257606744766235,0.337748348712921,-0.905270516872406,0.257606744766235,-0.337748348712921,-0.905270516872406 + ,-0.427594840526581,-0.364116340875626,-0.827356815338135,0.927335441112518,-0.366618841886520,0.074953459203243 + ,0.259865105152130,0.386974692344666,-0.884670555591583,0.767723619937897,0.336924344301224,-0.544999539852142 + ,0.727469682693481,0.445326089859009,-0.521958053112030,0.727469682693481,-0.445326089859009,-0.521958053112030 + ,0.767723619937897,-0.336924344301224,-0.544999539852142,0.259865105152130,-0.386974692344666,-0.884670555591583 + ,-0.893612504005432,0.405407875776291,-0.192571789026260,-0.774559795856476,-0.337565243244171,-0.534867405891418 + ,-0.940733075141907,-0.337595760822296,-0.031495101749897,-0.940733075141907,0.337595760822296,-0.031495101749897 + ,-0.774559795856476,0.337565243244171,-0.534867405891418,-0.776116192340851,-0.338053524494171,0.532273352146149 + ,-0.205633714795113,-0.364757239818573,0.908078253269196,-0.205633714795113,0.364757239818573,0.908078253269196 + ,-0.776116192340851,0.338053524494171,0.532273352146149,0.263283193111420,-0.337595760822296,-0.903683602809906 + ,-0.420972317457199,-0.361400187015533,-0.831934571266174,-0.420972317457199,0.361400187015533,-0.831934571266174 + ,0.263283193111420,0.337595760822296,-0.903683602809906,-0.257606744766235,-0.337748348712921,0.905270516872406 + ,0.427594840526581,-0.364116340875626,0.827356815338135,0.427594840526581,0.364116340875626,0.827356815338135 + ,-0.257606744766235,0.337748348712921,0.905270516872406,-0.893612504005432,-0.405407875776291,-0.192571789026260 + ,-0.126407667994499,0.363994270563126,0.922757625579834,-0.126407667994499,-0.363994270563126,0.922757625579834 + ,-0.042085025459528,-0.372112184762955,0.927213370800018,-0.871364474296570,-0.385204613208771,0.303811758756638 + ,-0.871364474296570,0.385204613208771,0.303811758756638,-0.923520624637604,-0.361339151859283,-0.128360852599144 + ,-0.923520624637604,0.361339151859283,-0.128360852599144,0.002563554793596,-0.382030695676804,0.924130976200104 + ,0.002563554793596,0.382030695676804,0.924130976200104,-0.042085025459528,0.372112184762955,0.927213370800018 + ,-0.422040462493896,0.381359279155731,-0.822443306446075,-0.653614938259125,-0.369029819965363,-0.660725712776184 + ,-0.921292781829834,-0.358958721160889,0.149449139833450,-0.921292781829834,0.358958721160889,0.149449139833450 + ,-0.653614938259125,0.369029819965363,-0.660725712776184,-0.834131896495819,-0.476363420486450,-0.277962595224380 + ,-0.834131896495819,0.476363420486450,-0.277962595224380,0.857295453548431,-0.512833058834076,0.044740132987499 + ,0.857295453548431,0.512833058834076,0.044740132987499,-0.924283564090729,-0.364116340875626,-0.114322334527969 + ,-0.759880363941193,-0.337748348712921,0.555406332015991,-0.759880363941193,0.337748348712921,0.555406332015991 + ,-0.924283564090729,0.364116340875626,-0.114322334527969,-0.422040462493896,-0.381359279155731,-0.822443306446075 + ,-0.616565465927124,0.369731754064560,0.695028543472290,-0.616565465927124,-0.369731754064560,0.695028543472290 + ,-0.061830498278141,-0.381786555051804,-0.922147274017334,-0.145786926150322,-0.349162280559540,0.925626397132874 + ,0.540299713611603,-0.461348295211792,0.703695774078369,0.540299713611603,0.461348295211792,0.703695774078369 + ,-0.145786926150322,0.349162280559540,0.925626397132874,0.192114010453224,0.369029819965363,-0.909329533576965 + ,0.780907630920410,0.337717831134796,-0.525437176227570,0.780907630920410,-0.337717831134796,-0.525437176227570 + ,0.192114010453224,-0.369029819965363,-0.909329533576965,0.924283564090729,-0.364116340875626,0.114322334527969 + ,0.759880363941193,-0.337748348712921,-0.555406332015991,0.759880363941193,0.337748348712921,-0.555406332015991 + ,0.924283564090729,0.364116340875626,0.114322334527969,0.722190022468567,0.446180611848831,-0.528489053249359 + ,0.722190022468567,-0.446180611848831,-0.528489053249359,0.764091908931732,-0.336832791566849,-0.550126671791077 + ,0.764091908931732,0.336832791566849,-0.550126671791077,-0.061830498278141,0.381786555051804,-0.922147274017334 + ,0.252601712942123,-0.441358685493469,-0.861018717288971,0.252601712942123,0.441358685493469,-0.861018717288971 + ,-0.831598877906799,0.377605527639389,0.407177954912186,-0.831598877906799,-0.377605527639389,0.407177954912186 + ,0.122928559780121,0.352305680513382,0.927762687206268,0.165929138660431,0.357249677181244,-0.919125974178314 + ,0.851802110671997,0.461348295211792,-0.248023927211761,0.851802110671997,-0.461348295211792,-0.248023927211761 + ,0.165929138660431,-0.357249677181244,-0.919125974178314,-0.427594840526581,0.364116340875626,-0.827356815338135 + ,0.257606744766235,0.337748348712921,-0.905270516872406,0.257606744766235,-0.337748348712921,-0.905270516872406 + ,-0.427594840526581,-0.364116340875626,-0.827356815338135,0.122928559780121,-0.352305680513382,0.927762687206268 + ,0.875942230224609,-0.385570853948593,-0.289834290742874,0.875942230224609,0.385570853948593,-0.289834290742874 + ,0.672994196414948,0.384594261646271,-0.631763637065887,0.672994196414948,-0.384594261646271,-0.631763637065887 + ,-0.777367472648621,-0.338236629962921,0.530350685119629,-0.223334446549416,-0.360881388187408,0.905453681945801 + ,-0.223334446549416,0.360881388187408,0.905453681945801,-0.777367472648621,0.338236629962921,0.530350685119629 + ,0.424573510885239,-0.360942423343658,0.830317080020905,0.424573510885239,0.360942423343658,0.830317080020905 + ,-0.257606744766235,-0.337748348712921,0.905270516872406,0.427594840526581,-0.364116340875626,0.827356815338135 + ,0.427594840526581,0.364116340875626,0.827356815338135,-0.257606744766235,0.337748348712921,0.905270516872406 + ,-0.767021715641022,0.334116637706757,0.547685146331787,-0.767021715641022,-0.334116637706757,0.547685146331787 + ,-0.660695195198059,-0.362437814474106,-0.657307684421539,-0.940244734287262,-0.338053524494171,-0.040559098124504 + ,-0.940244734287262,0.338053524494171,-0.040559098124504,-0.660695195198059,0.362437814474106,-0.657307684421539 + ,0.769646286964417,-0.336497098207474,-0.542558073997498,0.769646286964417,0.336497098207474,-0.542558073997498 + ,-0.414471864700317,-0.358958721160889,0.836237668991089,0.258095026016235,-0.337748348712921,0.905148446559906 + ,0.258095026016235,0.337748348712921,0.905148446559906,-0.414471864700317,0.358958721160889,0.836237668991089 + ,-0.924283564090729,-0.364116340875626,-0.114322334527969,-0.759849846363068,-0.337748348712921,0.555406332015991 + ,-0.759880363941193,0.337748348712921,0.555406332015991,-0.924283564090729,0.364116340875626,-0.114322334527969 + ,-0.753532528877258,-0.337595760822296,0.564043104648590,-0.173375651240349,-0.358073681592941,0.917416930198669 + ,-0.173375651240349,0.358073681592941,0.917416930198669,-0.753532528877258,0.337595760822296,0.564043104648590 + ,0.657612860202789,-0.375164031982422,0.653279185295105,0.941099286079407,-0.338023006916046,0.005096591077745 + ,0.941099286079407,0.338023006916046,0.005096591077745,0.657612860202789,0.375164031982422,0.653279185295105 + ,0.924283564090729,-0.364116340875626,0.114322334527969,0.759880363941193,-0.337748348712921,-0.555406332015991 + ,0.759880363941193,0.337748348712921,-0.555406332015991,0.924283564090729,0.364116340875626,0.114322334527969 + ,-0.422742396593094,0.362132638692856,-0.830713808536530,0.262306600809097,0.337626278400421,-0.903958261013031 + ,0.262306600809097,-0.337626278400421,-0.903958261013031,-0.422742396593094,-0.362132638692856,-0.830713808536530 + ,-0.265968799591064,0.337565243244171,-0.902920603752136,0.427747428417206,0.364177376031876,-0.827265262603760 + ,0.427747428417206,-0.364177376031876,-0.827265262603760,-0.265968799591064,-0.337565243244171,-0.902920603752136 + ,-0.012085329741240,0.477767258882523,-0.878383755683899,0.754478573799133,0.338023006916046,-0.562547683715820 + ,0.754478573799133,-0.338023006916046,-0.562547683715820,-0.012085329741240,-0.477767258882523,-0.878383755683899 + ,-0.923612177371979,0.361308634281158,-0.127811521291733,-0.923612177371979,-0.361308634281158,-0.127811521291733 + ,-0.427594840526581,0.364116340875626,-0.827356815338135,0.257606744766235,0.337748348712921,-0.905270516872406 + ,0.257606744766235,-0.337748348712921,-0.905270516872406,-0.427594840526581,-0.364116340875626,-0.827356815338135 + ,-0.786889255046844,-0.337809383869171,0.516403675079346,-0.496475100517273,-0.349162280559540,0.794701993465424 + ,-0.496475100517273,0.349162280559540,0.794701993465424,-0.786889255046844,0.337809383869171,0.516403675079346 + ,-0.853236496448517,-0.515793323516846,-0.076937161386013,-0.853236496448517,0.515793323516846,-0.076937161386013 + ,-0.922116756439209,0.358745068311691,-0.144749283790588,-0.922116756439209,-0.358745068311691,-0.144749283790588 + ,-0.257606744766235,-0.337748348712921,0.905270516872406,0.427594840526581,-0.364116340875626,0.827356815338135 + ,0.427594840526581,0.364116340875626,0.827356815338135,-0.257606744766235,0.337748348712921,0.905270516872406 + ,0.260292381048203,0.337687313556671,-0.904538094997406,0.260292381048203,-0.337687313556671,-0.904538094997406 + ,-0.423017054796219,-0.362224191427231,-0.830530703067780,-0.423017054796219,0.362224191427231,-0.830530703067780 + ,-0.669606626033783,-0.361583292484283,-0.648701429367065,-0.940397322177887,-0.338236629962921,-0.034730061888695 + ,-0.940397322177887,0.338236629962921,-0.034730061888695,-0.669606626033783,0.361613810062408,-0.648701429367065 + } + LayerElementMaterial: 0 { + Version: 101 + Name: "" + MappingInformationType: "ByPolygon" + ReferenceInformationType: "IndexToDirect" + Materials: 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1 + ,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 + ,0,1,0,1,0,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,0,1,0,1 + ,0,0,0,1,1,0,0,0,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0 + ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 + ,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1 + ,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,1,1,1,0,0 + ,0,1,1,1,0,1,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,1,1,1,1,1,0,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,1 + ,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1 + ,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,1,1 + ,1,1,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,0,1,1,1,1,1 + } + Layer: 0 { + Version: 100 + LayerElement: { + Type: "LayerElementNormal" + TypedIndex: 0 + } + LayerElement: { + Type: "LayerElementMaterial" + TypedIndex: 0 + } + } + } + Material: "Material::Red", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties60: { + Property: "ShadingModel", "KString", "", "Lambert" + Property: "MultiLayer", "bool", "",0 + Property: "EmissiveColor", "ColorRGB", "",0.3757,0.0443,0.0443 + Property: "EmissiveFactor", "double", "",0.0000 + Property: "AmbientColor", "ColorRGB", "",0.0000,0.0000,0.0000 + Property: "AmbientFactor", "double", "",1.0000 + Property: "DiffuseColor", "ColorRGB", "",0.3757,0.0443,0.0443 + Property: "DiffuseFactor", "double", "",0.8000 + Property: "Bump", "Vector3D", "",0,0,0 + Property: "TransparentColor", "ColorRGB", "",1,1,1 + Property: "TransparencyFactor", "double", "",0.0000 + Property: "SpecularColor", "ColorRGB", "",1.0000,1.0000,1.0000 + Property: "SpecularFactor", "double", "",0.2500 + Property: "ShininessExponent", "double", "",80.0 + Property: "ReflectionColor", "ColorRGB", "",0,0,0 + Property: "ReflectionFactor", "double", "",1 + Property: "Emissive", "ColorRGB", "",0,0,0 + Property: "Ambient", "ColorRGB", "",0.0,0.0,0.0 + Property: "Diffuse", "ColorRGB", "",0.4,0.0,0.0 + Property: "Specular", "ColorRGB", "",1.0,1.0,1.0 + Property: "Shininess", "double", "",9.6 + Property: "Opacity", "double", "",1.0 + Property: "Reflectivity", "double", "",0 + } + } + Material: "Material::Yellow", "" { + Version: 102 + ShadingModel: "lambert" + MultiLayer: 0 + Properties60: { + Property: "ShadingModel", "KString", "", "Lambert" + Property: "MultiLayer", "bool", "",0 + Property: "EmissiveColor", "ColorRGB", "",1.0000,0.4758,0.0705 + Property: "EmissiveFactor", "double", "",0.0000 + Property: "AmbientColor", "ColorRGB", "",0.0000,0.0000,0.0000 + Property: "AmbientFactor", "double", "",1.0000 + Property: "DiffuseColor", "ColorRGB", "",1.0000,0.4758,0.0705 + Property: "DiffuseFactor", "double", "",0.8000 + Property: "Bump", "Vector3D", "",0,0,0 + Property: "TransparentColor", "ColorRGB", "",1,1,1 + Property: "TransparencyFactor", "double", "",0.0000 + Property: "SpecularColor", "ColorRGB", "",1.0000,1.0000,1.0000 + Property: "SpecularFactor", "double", "",0.2500 + Property: "ShininessExponent", "double", "",80.0 + Property: "ReflectionColor", "ColorRGB", "",0,0,0 + Property: "ReflectionFactor", "double", "",1 + Property: "Emissive", "ColorRGB", "",0,0,0 + Property: "Ambient", "ColorRGB", "",0.0,0.0,0.0 + Property: "Diffuse", "ColorRGB", "",1.0,0.5,0.1 + Property: "Specular", "ColorRGB", "",1.0,1.0,1.0 + Property: "Shininess", "double", "",9.6 + Property: "Opacity", "double", "",1.0 + Property: "Reflectivity", "double", "",0 + } + } + Material: "Material::unnamed", "" { + Version: 102 + ShadingModel: "phong" + MultiLayer: 0 + Properties60: { + Property: "ShadingModel", "KString", "", "Phong" + Property: "MultiLayer", "bool", "",0 + Property: "EmissiveColor", "ColorRGB", "",0.8000,0.8000,0.8000 + Property: "EmissiveFactor", "double", "",0.0000 + Property: "AmbientColor", "ColorRGB", "",0.0000,0.0000,0.0000 + Property: "AmbientFactor", "double", "",0.5000 + Property: "DiffuseColor", "ColorRGB", "",0.8000,0.8000,0.8000 + Property: "DiffuseFactor", "double", "",1.0000 + Property: "Bump", "Vector3D", "",0,0,0 + Property: "TransparentColor", "ColorRGB", "",1,1,1 + Property: "TransparencyFactor", "double", "",0.0000 + Property: "SpecularColor", "ColorRGB", "",0.8000,0.8000,0.8000 + Property: "SpecularFactor", "double", "",0.2000 + Property: "ShininessExponent", "double", "",80.0 + Property: "ReflectionColor", "ColorRGB", "",0,0,0 + Property: "ReflectionFactor", "double", "",1 + Property: "Emissive", "ColorRGB", "",0,0,0 + Property: "Ambient", "ColorRGB", "",0.0,0.0,0.0 + Property: "Diffuse", "ColorRGB", "",0.8,0.8,0.8 + Property: "Specular", "ColorRGB", "",0.8,0.8,0.8 + Property: "Shininess", "double", "",20.0 + Property: "Opacity", "double", "",1.0 + Property: "Reflectivity", "double", "",0 + } + } + Pose: "Pose::BIND_POSES", "BindPose" { + Type: "BindPose" + Version: 100 + Properties60: { + } + NbPoseNodes: 1 + PoseNode: { + Node: "Model::Plane" + Matrix: 1.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,1.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,0.000000000000000,1.000000000000000 + } + } + GlobalSettings: { + Version: 1000 + Properties60: { + Property: "UpAxis", "int", "",1 + Property: "UpAxisSign", "int", "",1 + Property: "FrontAxis", "int", "",2 + Property: "FrontAxisSign", "int", "",1 + Property: "CoordAxis", "int", "",0 + Property: "CoordAxisSign", "int", "",1 + Property: "UnitScaleFactor", "double", "",1 + } + } +} + +; Object relations +;------------------------------------------------------------------ + +Relations: { + Model: "Model::Plane", "Mesh" { + } + Model: "Model::Producer Perspective", "Camera" { + } + Model: "Model::Producer Top", "Camera" { + } + Model: "Model::Producer Bottom", "Camera" { + } + Model: "Model::Producer Front", "Camera" { + } + Model: "Model::Producer Back", "Camera" { + } + Model: "Model::Producer Right", "Camera" { + } + Model: "Model::Producer Left", "Camera" { + } + Model: "Model::Camera Switcher", "CameraSwitcher" { + } + Material: "Material::Red", "" { + } + Material: "Material::Yellow", "" { + } + Material: "Material::unnamed", "" { + } +} + +; Object connections +;------------------------------------------------------------------ + +Connections: { + Connect: "OO", "Model::Plane", "Model::Scene" + Connect: "OO", "Material::Red", "Model::Plane" + Connect: "OO", "Material::Yellow", "Model::Plane" +} +;Takes and animation section +;---------------------------------------------------- + +Takes: { + Current: "Default Take" +} +;Version 5 settings +;------------------------------------------------------------------ + +Version5: { + AmbientRenderSettings: { + Version: 101 + AmbientLightColor: 0.0,0.0,0.0,0 + } + FogOptions: { + FogEnable: 0 + FogMode: 0 + FogDensity: 0.000 + FogStart: 5.000 + FogEnd: 25.000 + FogColor: 0.1,0.1,0.1,1 + } + Settings: { + FrameRate: "24" + TimeFormat: 1 + SnapOnFrames: 0 + ReferenceTimeIndex: -1 + TimeLineStartTime: 0 + TimeLineStopTime: 479181389250 + } + RendererSetting: { + DefaultCamera: "Producer Perspective" + DefaultViewingMode: 0 + } +} diff --git a/Samples/SampleContent/SampleContent.contentproj b/Samples/SampleContent/SampleContent.contentproj index b3bb477b..f89d981d 100644 --- a/Samples/SampleContent/SampleContent.contentproj +++ b/Samples/SampleContent/SampleContent.contentproj @@ -134,6 +134,13 @@ SoundEffectProcessor + + + ANX_vertex_color + FbxImporter + ModelProcessor + +