(ded4a3e0a) v0.9.0.7
This commit is contained in:
@@ -0,0 +1,427 @@
|
||||
#region License
|
||||
/*
|
||||
Microsoft Public License (Ms-PL)
|
||||
MonoGame - Copyright © 2009 The MonoGame Team
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This license governs use of the accompanying software. If you use the software, you accept this license. If you do not
|
||||
accept the license, do not use the software.
|
||||
|
||||
1. Definitions
|
||||
The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under
|
||||
U.S. copyright law.
|
||||
|
||||
A "contribution" is the original software, or any additions or changes to the software.
|
||||
A "contributor" is any person that distributes its contribution under this license.
|
||||
"Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
|
||||
2. Grant of Rights
|
||||
(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3,
|
||||
each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
|
||||
(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3,
|
||||
each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
|
||||
|
||||
3. Conditions and Limitations
|
||||
(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software,
|
||||
your patent license from such contributor to the software ends automatically.
|
||||
(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
notices that are present in the software.
|
||||
(D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object
|
||||
code form, you may only do so under a license that complies with this license.
|
||||
(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees
|
||||
or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent
|
||||
permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular
|
||||
purpose and non-infringement.
|
||||
*/
|
||||
#endregion License
|
||||
|
||||
#region Using clause
|
||||
|
||||
using MGXna_Framework = global::Microsoft.Xna.Framework;
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
#if WINDOWS_UAP
|
||||
using System.Threading.Tasks;
|
||||
using Windows.ApplicationModel;
|
||||
using Windows.ApplicationModel.Store;
|
||||
using Windows.UI.Core;
|
||||
using Windows.UI.Popups;
|
||||
using Windows.System;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
#else
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
#if !(WINDOWS && DIRECTX)
|
||||
using Microsoft.Xna.Framework.Net;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endregion Using clause
|
||||
|
||||
namespace Microsoft.Xna.Framework.GamerServices
|
||||
{
|
||||
|
||||
|
||||
public static class Guide
|
||||
{
|
||||
private static bool isScreenSaverEnabled;
|
||||
private static bool isTrialMode = false;
|
||||
private static bool isVisible;
|
||||
private static bool simulateTrialMode;
|
||||
|
||||
#if WINDOWS_UAP
|
||||
private static readonly CoreDispatcher _dispatcher;
|
||||
#endif
|
||||
|
||||
static Guide()
|
||||
{
|
||||
#if WINDOWS_UAP
|
||||
_dispatcher = Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher;
|
||||
|
||||
|
||||
var licenseInformation = CurrentApp.LicenseInformation;
|
||||
licenseInformation.LicenseChanged += () => isTrialMode = !licenseInformation.IsActive || licenseInformation.IsTrial;
|
||||
|
||||
isTrialMode = !licenseInformation.IsActive || licenseInformation.IsTrial;
|
||||
#endif
|
||||
}
|
||||
|
||||
delegate string ShowKeyboardInputDelegate(
|
||||
MGXna_Framework.PlayerIndex player,
|
||||
string title,
|
||||
string description,
|
||||
string defaultText,
|
||||
bool usePasswordMode);
|
||||
|
||||
private static string ShowKeyboardInput(
|
||||
MGXna_Framework.PlayerIndex player,
|
||||
string title,
|
||||
string description,
|
||||
string defaultText,
|
||||
bool usePasswordMode)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static IAsyncResult BeginShowKeyboardInput (
|
||||
MGXna_Framework.PlayerIndex player,
|
||||
string title,
|
||||
string description,
|
||||
string defaultText,
|
||||
AsyncCallback callback,
|
||||
Object state)
|
||||
{
|
||||
return BeginShowKeyboardInput(player, title, description, defaultText, callback, state, false );
|
||||
}
|
||||
|
||||
public static IAsyncResult BeginShowKeyboardInput (
|
||||
MGXna_Framework.PlayerIndex player,
|
||||
string title,
|
||||
string description,
|
||||
string defaultText,
|
||||
AsyncCallback callback,
|
||||
Object state,
|
||||
bool usePasswordMode)
|
||||
{
|
||||
#if !WINDOWS_UAP
|
||||
ShowKeyboardInputDelegate ski = ShowKeyboardInput;
|
||||
|
||||
return ski.BeginInvoke(player, title, description, defaultText, usePasswordMode, callback, ski);
|
||||
#else
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
public static string EndShowKeyboardInput (IAsyncResult result)
|
||||
{
|
||||
#if !WINDOWS_UAP
|
||||
ShowKeyboardInputDelegate ski = (ShowKeyboardInputDelegate)result.AsyncState;
|
||||
|
||||
return ski.EndInvoke(result);
|
||||
#else
|
||||
throw new NotImplementedException();
|
||||
#endif
|
||||
}
|
||||
|
||||
delegate Nullable<int> ShowMessageBoxDelegate(string title,
|
||||
string text,
|
||||
IEnumerable<string> buttons,
|
||||
int focusButton,
|
||||
MessageBoxIcon icon);
|
||||
|
||||
private static Nullable<int> ShowMessageBox(string title,
|
||||
string text,
|
||||
IEnumerable<string> buttons,
|
||||
int focusButton,
|
||||
MessageBoxIcon icon)
|
||||
{
|
||||
int? result = null;
|
||||
IsVisible = true;
|
||||
|
||||
#if WINDOWS_UAP
|
||||
|
||||
MessageDialog dialog = new MessageDialog(text, title);
|
||||
foreach (string button in buttons)
|
||||
dialog.Commands.Add(new UICommand(button, null, dialog.Commands.Count));
|
||||
|
||||
if (focusButton < 0 || focusButton >= dialog.Commands.Count)
|
||||
throw new ArgumentOutOfRangeException("focusButton", "Specified argument was out of the range of valid values.");
|
||||
dialog.DefaultCommandIndex = (uint)focusButton;
|
||||
|
||||
// The message box must be popped up on the UI thread.
|
||||
Task<IUICommand> dialogResult = null;
|
||||
_dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
|
||||
{
|
||||
dialogResult = dialog.ShowAsync().AsTask();
|
||||
}).AsTask().Wait();
|
||||
|
||||
dialogResult.Wait();
|
||||
result = (int)dialogResult.Result.Id;
|
||||
|
||||
#endif
|
||||
IsVisible = false;
|
||||
return result;
|
||||
}
|
||||
|
||||
public static IAsyncResult BeginShowMessageBox(
|
||||
MGXna_Framework.PlayerIndex player,
|
||||
string title,
|
||||
string text,
|
||||
IEnumerable<string> buttons,
|
||||
int focusButton,
|
||||
MessageBoxIcon icon,
|
||||
AsyncCallback callback,
|
||||
Object state
|
||||
)
|
||||
{
|
||||
#if !WINDOWS_UAP
|
||||
// TODO: GuideAlreadyVisibleException
|
||||
if (IsVisible)
|
||||
throw new Exception("The function cannot be completed at this time: the Guide UI is already active. Wait until Guide.IsVisible is false before issuing this call.");
|
||||
|
||||
if (player != PlayerIndex.One)
|
||||
throw new ArgumentOutOfRangeException("player", "Specified argument was out of the range of valid values.");
|
||||
if (title == null)
|
||||
throw new ArgumentNullException("title", "This string cannot be null or empty, and must be less than 256 characters long.");
|
||||
if (text == null)
|
||||
throw new ArgumentNullException("text", "This string cannot be null or empty, and must be less than 256 characters long.");
|
||||
if (buttons == null)
|
||||
throw new ArgumentNullException("buttons", "Value can not be null.");
|
||||
|
||||
ShowMessageBoxDelegate smb = ShowMessageBox;
|
||||
|
||||
return smb.BeginInvoke(title, text, buttons, focusButton, icon, callback, smb);
|
||||
#else
|
||||
|
||||
var tcs = new TaskCompletionSource<int?>(state);
|
||||
var task = Task.Run<int?>(() => ShowMessageBox(title, text, buttons, focusButton, icon));
|
||||
task.ContinueWith(t =>
|
||||
{
|
||||
// Copy the task result into the returned task.
|
||||
if (t.IsFaulted)
|
||||
tcs.TrySetException(t.Exception.InnerExceptions);
|
||||
else if (t.IsCanceled)
|
||||
tcs.TrySetCanceled();
|
||||
else
|
||||
tcs.TrySetResult(t.Result);
|
||||
|
||||
// Invoke the user callback if necessary.
|
||||
if (callback != null)
|
||||
callback(tcs.Task);
|
||||
});
|
||||
return tcs.Task;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static IAsyncResult BeginShowMessageBox(
|
||||
string title,
|
||||
string text,
|
||||
IEnumerable<string> buttons,
|
||||
int focusButton,
|
||||
MessageBoxIcon icon,
|
||||
AsyncCallback callback,
|
||||
Object state
|
||||
)
|
||||
{
|
||||
return BeginShowMessageBox(MGXna_Framework.PlayerIndex.One, title, text, buttons, focusButton, icon, callback, state);
|
||||
}
|
||||
|
||||
public static Nullable<int> EndShowMessageBox(IAsyncResult result)
|
||||
{
|
||||
#if WINDOWS_UAP
|
||||
var x = (Task<int?>)result;
|
||||
return x.Result;
|
||||
#else
|
||||
return ((ShowMessageBoxDelegate)result.AsyncState).EndInvoke(result);
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void ShowMarketplace(MGXna_Framework.PlayerIndex player)
|
||||
{
|
||||
}
|
||||
|
||||
public static void Show ()
|
||||
{
|
||||
ShowSignIn(1, false);
|
||||
}
|
||||
|
||||
public static void ShowSignIn (int paneCount, bool onlineOnly)
|
||||
{
|
||||
if ( paneCount != 1 && paneCount != 2 && paneCount != 4)
|
||||
{
|
||||
new ArgumentException("paneCount Can only be 1, 2 or 4 on Windows");
|
||||
return;
|
||||
}
|
||||
|
||||
#if !WINDOWS_UAP && !(WINDOWS && DIRECTX)
|
||||
Microsoft.Xna.Framework.GamerServices.MonoGameGamerServicesHelper.ShowSigninSheet();
|
||||
|
||||
if (GamerServicesComponent.LocalNetworkGamer == null)
|
||||
{
|
||||
GamerServicesComponent.LocalNetworkGamer = new LocalNetworkGamer();
|
||||
}
|
||||
else
|
||||
{
|
||||
GamerServicesComponent.LocalNetworkGamer.SignedInGamer.BeginAuthentication(null, null);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void ShowLeaderboard()
|
||||
{
|
||||
//if ( ( Gamer.SignedInGamers.Count > 0 ) && ( Gamer.SignedInGamers[0].IsSignedInToLive ) )
|
||||
//{
|
||||
// // Lazy load it
|
||||
// if ( leaderboardController == null )
|
||||
// {
|
||||
// leaderboardController = new GKLeaderboardViewController();
|
||||
// }
|
||||
|
||||
// if (leaderboardController != null)
|
||||
// {
|
||||
// leaderboardController.DidFinish += delegate(object sender, EventArgs e)
|
||||
// {
|
||||
// leaderboardController.DismissModalViewControllerAnimated(true);
|
||||
// isVisible = false;
|
||||
// };
|
||||
|
||||
// if (Window !=null)
|
||||
// {
|
||||
// if(viewController == null)
|
||||
// {
|
||||
// viewController = new UIViewController();
|
||||
// Window.Add(viewController.View);
|
||||
// viewController.View.Hidden = true;
|
||||
// }
|
||||
|
||||
// viewController.PresentModalViewController(leaderboardController, true);
|
||||
// isVisible = true;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
public static void ShowAchievements()
|
||||
{
|
||||
//if ( ( Gamer.SignedInGamers.Count > 0 ) && ( Gamer.SignedInGamers[0].IsSignedInToLive ) )
|
||||
//{
|
||||
// // Lazy load it
|
||||
// if ( achievementController == null )
|
||||
// {
|
||||
// achievementController = new GKAchievementViewController();
|
||||
// }
|
||||
|
||||
// if (achievementController != null)
|
||||
// {
|
||||
// achievementController.DidFinish += delegate(object sender, EventArgs e)
|
||||
// {
|
||||
// leaderboardController.DismissModalViewControllerAnimated(true);
|
||||
// isVisible = false;
|
||||
// };
|
||||
|
||||
// if (Window !=null)
|
||||
// {
|
||||
// if(viewController == null)
|
||||
// {
|
||||
// viewController = new UIViewController();
|
||||
// Window.Add(viewController.View);
|
||||
// viewController.View.Hidden = true;
|
||||
// }
|
||||
|
||||
// viewController.PresentModalViewController(achievementController, true);
|
||||
// isVisible = true;
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
}
|
||||
|
||||
#region Properties
|
||||
public static bool IsScreenSaverEnabled
|
||||
{
|
||||
get
|
||||
{
|
||||
return isScreenSaverEnabled;
|
||||
}
|
||||
set
|
||||
{
|
||||
isScreenSaverEnabled = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsTrialMode
|
||||
{
|
||||
get
|
||||
{
|
||||
// If simulate trial mode is enabled then
|
||||
// we're in the trial mode.
|
||||
#if DEBUG
|
||||
return simulateTrialMode || isTrialMode;
|
||||
#else
|
||||
return simulateTrialMode || isTrialMode;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsVisible
|
||||
{
|
||||
get
|
||||
{
|
||||
return isVisible;
|
||||
}
|
||||
set
|
||||
{
|
||||
isVisible = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool SimulateTrialMode
|
||||
{
|
||||
get
|
||||
{
|
||||
return simulateTrialMode;
|
||||
}
|
||||
set
|
||||
{
|
||||
simulateTrialMode = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static MGXna_Framework.GameWindow Window
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal static void Initialise(MGXna_Framework.Game game)
|
||||
{
|
||||
#if !DIRECTX
|
||||
MonoGameGamerServicesHelper.Initialise(game);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
+151
@@ -0,0 +1,151 @@
|
||||
using System;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
|
||||
namespace Microsoft.Xna.Framework.GamerServices
|
||||
{
|
||||
internal class MonoGameGamerServicesHelper
|
||||
{
|
||||
private static MonoLiveGuide guide = null;
|
||||
|
||||
|
||||
|
||||
public static void ShowSigninSheet()
|
||||
{
|
||||
guide.Enabled = true;
|
||||
guide.Visible = true;
|
||||
Guide.IsVisible = true;
|
||||
}
|
||||
|
||||
internal static void Initialise(Game game)
|
||||
{
|
||||
if (guide == null)
|
||||
{
|
||||
guide = new MonoLiveGuide(game);
|
||||
game.Components.Add(guide);
|
||||
}
|
||||
}}
|
||||
|
||||
internal class MonoLiveGuide : DrawableGameComponent
|
||||
{
|
||||
SpriteBatch spriteBatch;
|
||||
Texture2D signInProgress;
|
||||
Color alphaColor = new Color(128, 128, 128, 0);
|
||||
byte startalpha = 0;
|
||||
|
||||
public MonoLiveGuide(Game game)
|
||||
: base(game)
|
||||
{
|
||||
this.Enabled = false;
|
||||
this.Visible = false;
|
||||
//Guide.IsVisible = false;
|
||||
this.DrawOrder = Int32.MaxValue;
|
||||
}
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
}
|
||||
|
||||
Texture2D Circle(GraphicsDevice graphics, int radius)
|
||||
{
|
||||
int aDiameter = radius * 2;
|
||||
Vector2 aCenter = new Vector2(radius, radius);
|
||||
|
||||
Texture2D aCircle = new Texture2D(graphics, aDiameter, aDiameter, false, SurfaceFormat.Color);
|
||||
Color[] aColors = new Color[aDiameter * aDiameter];
|
||||
|
||||
for (int i = 0; i < aColors.Length; i++)
|
||||
{
|
||||
int x = (i + 1) % aDiameter;
|
||||
int y = (i + 1) / aDiameter;
|
||||
|
||||
Vector2 aDistance = new Vector2(Math.Abs(aCenter.X - x), Math.Abs(aCenter.Y - y));
|
||||
|
||||
|
||||
if (Math.Sqrt((aDistance.X * aDistance.X) + (aDistance.Y * aDistance.Y)) > radius)
|
||||
{
|
||||
aColors[i] = Color.Transparent;
|
||||
}
|
||||
else
|
||||
{
|
||||
aColors[i] = Color.White;
|
||||
}
|
||||
}
|
||||
|
||||
aCircle.SetData<Color>(aColors);
|
||||
|
||||
return aCircle;
|
||||
}
|
||||
|
||||
protected override void LoadContent()
|
||||
{
|
||||
spriteBatch = new SpriteBatch(this.Game.GraphicsDevice);
|
||||
|
||||
signInProgress = Circle(this.Game.GraphicsDevice, 10);
|
||||
|
||||
base.LoadContent();
|
||||
}
|
||||
|
||||
protected override void UnloadContent()
|
||||
{
|
||||
base.UnloadContent();
|
||||
}
|
||||
|
||||
public override void Draw(GameTime gameTime)
|
||||
{
|
||||
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
|
||||
|
||||
Vector2 center = new Vector2(this.Game.GraphicsDevice.PresentationParameters.BackBufferWidth / 2, this.Game.GraphicsDevice.PresentationParameters.BackBufferHeight - 100);
|
||||
Vector2 loc = Vector2.Zero;
|
||||
alphaColor.A = startalpha;
|
||||
for (int i = 0; i < 12; i++)
|
||||
{
|
||||
float angle = (float)(i / 12.0 * Math.PI * 2);
|
||||
loc = new Vector2(center.X + (float)Math.Cos(angle) * 50, center.Y + (float)Math.Sin(angle) * 50);
|
||||
spriteBatch.Draw(signInProgress, loc, alphaColor);
|
||||
alphaColor.A += 255 / 12;
|
||||
if (alphaColor.A > 255) alphaColor.A = 0;
|
||||
}
|
||||
spriteBatch.End();
|
||||
base.Draw(gameTime);
|
||||
}
|
||||
|
||||
TimeSpan gt = TimeSpan.Zero;
|
||||
TimeSpan last = TimeSpan.Zero;
|
||||
|
||||
public override void Update(GameTime gameTime)
|
||||
{
|
||||
if (gt == TimeSpan.Zero) gt = last = gameTime.TotalGameTime;
|
||||
|
||||
if ((gameTime.TotalGameTime - last).Milliseconds > 100)
|
||||
{
|
||||
last = gameTime.TotalGameTime;
|
||||
startalpha += 255 / 12;
|
||||
}
|
||||
|
||||
if ((gameTime.TotalGameTime - gt).TotalSeconds > 5) // close after 10 seconds
|
||||
{
|
||||
string strUsr = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
|
||||
|
||||
if (strUsr.Contains(@"\"))
|
||||
{
|
||||
int idx = strUsr.IndexOf(@"\") + 1;
|
||||
strUsr = strUsr.Substring(idx, strUsr.Length - idx);
|
||||
}
|
||||
|
||||
SignedInGamer sig = new SignedInGamer();
|
||||
sig.DisplayName = strUsr;
|
||||
sig.Gamertag = strUsr;
|
||||
|
||||
Gamer.SignedInGamers.Add(sig);
|
||||
|
||||
this.Visible = false;
|
||||
this.Enabled = false;
|
||||
//Guide.IsVisible = false;
|
||||
gt = TimeSpan.Zero;
|
||||
}
|
||||
base.Update(gameTime);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+327
@@ -0,0 +1,327 @@
|
||||
#region License
|
||||
/*
|
||||
Microsoft Public License (Ms-PL)
|
||||
MonoGame - Copyright © 2009 The MonoGame Team
|
||||
|
||||
All rights reserved.
|
||||
|
||||
This license governs use of the accompanying software. If you use the software, you accept this license. If you do not
|
||||
accept the license, do not use the software.
|
||||
|
||||
1. Definitions
|
||||
The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under
|
||||
U.S. copyright law.
|
||||
|
||||
A "contribution" is the original software, or any additions or changes to the software.
|
||||
A "contributor" is any person that distributes its contribution under this license.
|
||||
"Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
|
||||
2. Grant of Rights
|
||||
(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3,
|
||||
each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
|
||||
(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3,
|
||||
each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
|
||||
|
||||
3. Conditions and Limitations
|
||||
(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software,
|
||||
your patent license from such contributor to the software ends automatically.
|
||||
(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution
|
||||
notices that are present in the software.
|
||||
(D) If you distribute any portion of the software in source code form, you may do so only under this license by including
|
||||
a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object
|
||||
code form, you may only do so under a license that complies with this license.
|
||||
(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees
|
||||
or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent
|
||||
permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular
|
||||
purpose and non-infringement.
|
||||
*/
|
||||
#endregion License
|
||||
|
||||
#region Statement
|
||||
using System;
|
||||
|
||||
#endregion Statement
|
||||
|
||||
|
||||
namespace Microsoft.Xna.Framework.GamerServices
|
||||
{
|
||||
public class SignedInGamer : Gamer
|
||||
{
|
||||
private AchievementCollection gamerAchievements;
|
||||
private FriendCollection friendCollection;
|
||||
|
||||
delegate void AuthenticationDelegate();
|
||||
|
||||
public IAsyncResult BeginAuthentication(AsyncCallback callback, Object asyncState)
|
||||
{
|
||||
// Go off authenticate
|
||||
AuthenticationDelegate ad = DoAuthentication;
|
||||
|
||||
return ad.BeginInvoke(callback, ad);
|
||||
}
|
||||
|
||||
public void EndAuthentication( IAsyncResult result )
|
||||
{
|
||||
AuthenticationDelegate ad = (AuthenticationDelegate)result.AsyncState;
|
||||
|
||||
ad.EndInvoke(result);
|
||||
}
|
||||
|
||||
private void DoAuthentication()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public SignedInGamer()
|
||||
{
|
||||
|
||||
var result = BeginAuthentication(null, null);
|
||||
EndAuthentication( result );
|
||||
}
|
||||
|
||||
private void AuthenticationCompletedCallback( IAsyncResult result )
|
||||
{
|
||||
EndAuthentication(result);
|
||||
}
|
||||
|
||||
#region Methods
|
||||
public FriendCollection GetFriends()
|
||||
{
|
||||
if(IsSignedInToLive)
|
||||
{
|
||||
if ( friendCollection == null )
|
||||
{
|
||||
friendCollection = new FriendCollection();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return friendCollection;
|
||||
}
|
||||
|
||||
public bool IsFriend (Gamer gamer)
|
||||
{
|
||||
if ( gamer == null )
|
||||
throw new ArgumentNullException();
|
||||
|
||||
if ( gamer.IsDisposed )
|
||||
throw new ObjectDisposedException(gamer.ToString());
|
||||
|
||||
bool found = false;
|
||||
foreach(FriendGamer f in friendCollection)
|
||||
{
|
||||
if ( f.Gamertag == gamer.Gamertag )
|
||||
{
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
return found;
|
||||
|
||||
}
|
||||
|
||||
delegate AchievementCollection GetAchievementsDelegate();
|
||||
|
||||
public IAsyncResult BeginGetAchievements( AsyncCallback callback, Object asyncState)
|
||||
{
|
||||
// Go off and grab achievements
|
||||
GetAchievementsDelegate gad = GetAchievements;
|
||||
|
||||
return gad.BeginInvoke(callback, gad);
|
||||
}
|
||||
|
||||
private void GetAchievementCompletedCallback( IAsyncResult result )
|
||||
{
|
||||
// get the delegate that was used to call that method
|
||||
GetAchievementsDelegate gad = (GetAchievementsDelegate)result.AsyncState;
|
||||
|
||||
// get the return value from that method call
|
||||
gamerAchievements = gad.EndInvoke(result);
|
||||
}
|
||||
|
||||
public AchievementCollection EndGetAchievements( IAsyncResult result )
|
||||
{
|
||||
GetAchievementsDelegate gad = (GetAchievementsDelegate)result.AsyncState;
|
||||
|
||||
gamerAchievements = gad.EndInvoke(result);
|
||||
|
||||
return gamerAchievements;
|
||||
}
|
||||
|
||||
public AchievementCollection GetAchievements()
|
||||
{
|
||||
if ( IsSignedInToLive )
|
||||
{
|
||||
if (gamerAchievements == null)
|
||||
{
|
||||
gamerAchievements = new AchievementCollection();
|
||||
}
|
||||
|
||||
}
|
||||
return gamerAchievements;
|
||||
}
|
||||
|
||||
delegate void AwardAchievementDelegate(string achievementId, double percentageComplete);
|
||||
|
||||
public IAsyncResult BeginAwardAchievement(string achievementId, AsyncCallback callback, Object state)
|
||||
{
|
||||
return BeginAwardAchievement(achievementId, 100.0, callback, state);
|
||||
}
|
||||
|
||||
public IAsyncResult BeginAwardAchievement(
|
||||
string achievementId,
|
||||
double percentageComplete,
|
||||
AsyncCallback callback,
|
||||
Object state
|
||||
)
|
||||
{
|
||||
// Go off and award the achievement
|
||||
AwardAchievementDelegate aad = DoAwardAchievement;
|
||||
|
||||
return aad.BeginInvoke(achievementId, percentageComplete, callback, aad);
|
||||
}
|
||||
|
||||
public void EndAwardAchievement(IAsyncResult result)
|
||||
{
|
||||
AwardAchievementDelegate aad = (AwardAchievementDelegate)result.AsyncState;
|
||||
|
||||
aad.EndInvoke(result);
|
||||
}
|
||||
|
||||
private void AwardAchievementCompletedCallback( IAsyncResult result )
|
||||
{
|
||||
EndAwardAchievement(result);
|
||||
}
|
||||
|
||||
public void AwardAchievement( string achievementId )
|
||||
{
|
||||
AwardAchievement(achievementId, 100.0f);
|
||||
}
|
||||
|
||||
public void DoAwardAchievement( string achievementId, double percentageComplete )
|
||||
{
|
||||
}
|
||||
|
||||
public void AwardAchievement( string achievementId, double percentageComplete )
|
||||
{
|
||||
if (IsSignedInToLive)
|
||||
{
|
||||
BeginAwardAchievement( achievementId, percentageComplete, AwardAchievementCompletedCallback, null );
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateScore( string aCategory, long aScore )
|
||||
{
|
||||
if (IsSignedInToLive)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetAchievements()
|
||||
{
|
||||
if (IsSignedInToLive)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
public GameDefaults GameDefaults
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsGuest
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsSignedInToLive
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public int PartySize
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
set
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
public PlayerIndex PlayerIndex
|
||||
{
|
||||
get
|
||||
{
|
||||
return PlayerIndex.One;
|
||||
}
|
||||
}
|
||||
|
||||
public GamerPresence Presence
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
GamerPrivileges _privileges = new GamerPrivileges();
|
||||
public GamerPrivileges Privileges
|
||||
{
|
||||
get
|
||||
{
|
||||
return _privileges;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
protected virtual void OnSignedIn(SignedInEventArgs e)
|
||||
{
|
||||
EventHelpers.Raise(this, SignedIn, e);
|
||||
}
|
||||
|
||||
protected virtual void OnSignedOut(SignedOutEventArgs e)
|
||||
{
|
||||
EventHelpers.Raise(this, SignedOut, e);
|
||||
}
|
||||
|
||||
|
||||
#region Events
|
||||
public static event EventHandler<SignedInEventArgs> SignedIn;
|
||||
|
||||
public static event EventHandler<SignedOutEventArgs> SignedOut;
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class SignedInEventArgs : EventArgs
|
||||
{
|
||||
public SignedInEventArgs ( SignedInGamer gamer )
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class SignedOutEventArgs : EventArgs
|
||||
{
|
||||
public SignedOutEventArgs (SignedInGamer gamer )
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
|
||||
namespace Microsoft.Xna.Framework.Windows
|
||||
{
|
||||
internal class HorizontalMouseWheelEventArgs : EventArgs
|
||||
{
|
||||
internal int Delta { get; private set; }
|
||||
|
||||
internal HorizontalMouseWheelEventArgs(int delta)
|
||||
{
|
||||
Delta = delta;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,184 @@
|
||||
// MonoGame - Copyright (C) The MonoGame Team
|
||||
// This file is subject to the terms and conditions defined in
|
||||
// file 'LICENSE.txt', which is part of this source code package.
|
||||
|
||||
namespace Microsoft.Xna.Framework
|
||||
{
|
||||
using System;
|
||||
using Graphics;
|
||||
using SharpDX.Mathematics.Interop;
|
||||
|
||||
static internal class SharpDXHelper
|
||||
{
|
||||
static public SharpDX.DXGI.SwapEffect ToSwapEffect(PresentInterval presentInterval)
|
||||
{
|
||||
SharpDX.DXGI.SwapEffect effect;
|
||||
|
||||
switch (presentInterval)
|
||||
{
|
||||
case PresentInterval.One:
|
||||
case PresentInterval.Two:
|
||||
default:
|
||||
#if WINDOWS_UAP
|
||||
effect = SharpDX.DXGI.SwapEffect.FlipSequential;
|
||||
#else
|
||||
effect = SharpDX.DXGI.SwapEffect.Discard;
|
||||
#endif
|
||||
break;
|
||||
|
||||
case PresentInterval.Immediate:
|
||||
effect = SharpDX.DXGI.SwapEffect.Sequential;
|
||||
break;
|
||||
}
|
||||
|
||||
//if (present.RenderTargetUsage != RenderTargetUsage.PreserveContents && present.MultiSampleCount == 0)
|
||||
//effect = SharpDX.DXGI.SwapEffect.Discard;
|
||||
|
||||
return effect;
|
||||
}
|
||||
|
||||
static public SharpDX.DXGI.Format ToFormat(DepthFormat format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
default:
|
||||
case DepthFormat.None:
|
||||
return SharpDX.DXGI.Format.Unknown;
|
||||
|
||||
case DepthFormat.Depth16:
|
||||
return SharpDX.DXGI.Format.D16_UNorm;
|
||||
|
||||
case DepthFormat.Depth24:
|
||||
case DepthFormat.Depth24Stencil8:
|
||||
return SharpDX.DXGI.Format.D24_UNorm_S8_UInt;
|
||||
}
|
||||
}
|
||||
|
||||
static public SharpDX.DXGI.Format ToFormat(SurfaceFormat format)
|
||||
{
|
||||
switch (format)
|
||||
{
|
||||
case SurfaceFormat.Color:
|
||||
default:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm;
|
||||
|
||||
case SurfaceFormat.Bgr565:
|
||||
return SharpDX.DXGI.Format.B5G6R5_UNorm;
|
||||
case SurfaceFormat.Bgra5551:
|
||||
return SharpDX.DXGI.Format.B5G5R5A1_UNorm;
|
||||
case SurfaceFormat.Bgra4444:
|
||||
#if WINDOWS_UAP
|
||||
return SharpDX.DXGI.Format.B4G4R4A4_UNorm;
|
||||
#else
|
||||
return (SharpDX.DXGI.Format)115;
|
||||
#endif
|
||||
case SurfaceFormat.Dxt1:
|
||||
return SharpDX.DXGI.Format.BC1_UNorm;
|
||||
case SurfaceFormat.Dxt3:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm;
|
||||
case SurfaceFormat.Dxt5:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm;
|
||||
case SurfaceFormat.NormalizedByte2:
|
||||
return SharpDX.DXGI.Format.R8G8_SNorm;
|
||||
case SurfaceFormat.NormalizedByte4:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_SNorm;
|
||||
case SurfaceFormat.Rgba1010102:
|
||||
return SharpDX.DXGI.Format.R10G10B10A2_UNorm;
|
||||
case SurfaceFormat.Rg32:
|
||||
return SharpDX.DXGI.Format.R16G16_UNorm;
|
||||
case SurfaceFormat.Rgba64:
|
||||
return SharpDX.DXGI.Format.R16G16B16A16_UNorm;
|
||||
case SurfaceFormat.Alpha8:
|
||||
return SharpDX.DXGI.Format.A8_UNorm;
|
||||
case SurfaceFormat.Single:
|
||||
return SharpDX.DXGI.Format.R32_Float;
|
||||
case SurfaceFormat.HalfSingle:
|
||||
return SharpDX.DXGI.Format.R16_Float;
|
||||
case SurfaceFormat.HalfVector2:
|
||||
return SharpDX.DXGI.Format.R16G16_Float;
|
||||
case SurfaceFormat.Vector2:
|
||||
return SharpDX.DXGI.Format.R32G32_Float;
|
||||
case SurfaceFormat.Vector4:
|
||||
return SharpDX.DXGI.Format.R32G32B32A32_Float;
|
||||
case SurfaceFormat.HalfVector4:
|
||||
return SharpDX.DXGI.Format.R16G16B16A16_Float;
|
||||
|
||||
case SurfaceFormat.HdrBlendable:
|
||||
// TODO: This needs to check the graphics device and
|
||||
// return the best hdr blendable format for the device.
|
||||
return SharpDX.DXGI.Format.R16G16B16A16_Float;
|
||||
|
||||
case SurfaceFormat.Bgr32:
|
||||
return SharpDX.DXGI.Format.B8G8R8X8_UNorm;
|
||||
case SurfaceFormat.Bgra32:
|
||||
return SharpDX.DXGI.Format.B8G8R8A8_UNorm;
|
||||
|
||||
case SurfaceFormat.ColorSRgb:
|
||||
return SharpDX.DXGI.Format.R8G8B8A8_UNorm_SRgb;
|
||||
case SurfaceFormat.Bgr32SRgb:
|
||||
return SharpDX.DXGI.Format.B8G8R8X8_UNorm_SRgb;
|
||||
case SurfaceFormat.Bgra32SRgb:
|
||||
return SharpDX.DXGI.Format.B8G8R8A8_UNorm_SRgb;
|
||||
case SurfaceFormat.Dxt1SRgb:
|
||||
return SharpDX.DXGI.Format.BC1_UNorm_SRgb;
|
||||
case SurfaceFormat.Dxt3SRgb:
|
||||
return SharpDX.DXGI.Format.BC2_UNorm_SRgb;
|
||||
case SurfaceFormat.Dxt5SRgb:
|
||||
return SharpDX.DXGI.Format.BC3_UNorm_SRgb;
|
||||
}
|
||||
}
|
||||
|
||||
static public RawVector2 ToVector2(this Vector2 vec)
|
||||
{
|
||||
return new RawVector2(vec.X, vec.Y);
|
||||
}
|
||||
|
||||
static public RawVector3 ToVector3(this Vector3 vec)
|
||||
{
|
||||
return new RawVector3(vec.X, vec.Y, vec.Z);
|
||||
}
|
||||
|
||||
static public RawVector4 ToVector4(this Vector4 vec)
|
||||
{
|
||||
return new RawVector4(vec.X, vec.Y, vec.Z, vec.W);
|
||||
}
|
||||
|
||||
static public RawColor4 ToColor4(this Color color)
|
||||
{
|
||||
return new RawColor4(color.R / 255.0f, color.G / 255.0f, color.B / 255.0f, color.A / 255.0f);
|
||||
}
|
||||
|
||||
static public SharpDX.Direct3D11.Comparison ToComparison(this CompareFunction compare)
|
||||
{
|
||||
switch (compare)
|
||||
{
|
||||
case CompareFunction.Always:
|
||||
return SharpDX.Direct3D11.Comparison.Always;
|
||||
|
||||
case CompareFunction.Equal:
|
||||
return SharpDX.Direct3D11.Comparison.Equal;
|
||||
|
||||
case CompareFunction.Greater:
|
||||
return SharpDX.Direct3D11.Comparison.Greater;
|
||||
|
||||
case CompareFunction.GreaterEqual:
|
||||
return SharpDX.Direct3D11.Comparison.GreaterEqual;
|
||||
|
||||
case CompareFunction.Less:
|
||||
return SharpDX.Direct3D11.Comparison.Less;
|
||||
|
||||
case CompareFunction.LessEqual:
|
||||
return SharpDX.Direct3D11.Comparison.LessEqual;
|
||||
|
||||
case CompareFunction.Never:
|
||||
return SharpDX.Direct3D11.Comparison.Never;
|
||||
|
||||
case CompareFunction.NotEqual:
|
||||
return SharpDX.Direct3D11.Comparison.NotEqual;
|
||||
|
||||
default:
|
||||
throw new ArgumentException("Invalid comparison!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user