Example #1
0
        public IndieCityManager(string gameId, string serviceId, string serviceSecret, bool hasAchievements, bool hasLeaderboards, IManagerServiceProvider serviceProvider, SessionEndDelegate sessionEndDelegate)
        {
            _sceneInterface     = serviceProvider;
            _sessionEndDelegate = sessionEndDelegate;

            ManagerProcessOrder = 10;

            var service = new ServiceId
            {
                Data1 = uint.Parse(serviceId.Substring(0, 8), NumberStyles.HexNumber),
                Data2 = ushort.Parse(serviceId.Substring(9, 4), NumberStyles.HexNumber),
                Data3 = ushort.Parse(serviceId.Substring(14, 4), NumberStyles.HexNumber),
                Data4 = new[]
                {
                    byte.Parse(serviceId.Substring(19, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(21, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(24, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(26, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(28, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(30, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(32, 2), NumberStyles.HexNumber),
                    byte.Parse(serviceId.Substring(34, 2), NumberStyles.HexNumber)
                }
            };

            var bridge = new CoBridge2();

            bridge.Initialise(gameId);
            bridge.SetServiceCredentials(GameService.GameService_IndieCityLeaderboardsAndAchievements, service, serviceSecret);

            Session        = bridge.CreateDefaultGameSession();
            _sessionCookie = Session.RegisterEventHandler(0, 0, this);
            _sessionActive = false;
            _startPhase    = SessionStartPhase.NotStarted;

            _username = bridge.UserStore.GetUserFromId(Session.UserId).Name;

            _achievementsReady = !hasAchievements;
            if (hasAchievements)
            {
                AchievementsManager = new CoAchievementManager();
                AchievementsManager.SetGameSession(Session);
                AchievementsManager.InitialiseAchievements(null);
                _achievementsCookie = ((IAchievementService)AchievementsManager).RegisterAchievementEventHandler(this);
                _achievementsUnlockedAtIndieCity = new Dictionary <long, bool>();
            }

            _leaderboardsReady = !hasLeaderboards;
            if (hasLeaderboards)
            {
                _leaderboardsManager = new CoLeaderboardManager();
                _leaderboardsManager.SetGameSession(Session);
                _leaderboardsManager.InitialiseLeaderboards(null);
                _leaderboardsCookie = ((ILeaderboardService)_leaderboardsManager).RegisterLeaderboardEventHandler(this);
            }
        }
Example #2
0
        public IndieCityManager(string gameId, string serviceId, string serviceSecret, bool hasAchievements, bool hasLeaderboards, IManagerServiceProvider serviceProvider, SessionEndDelegate sessionEndDelegate)
        {
            _sceneInterface = serviceProvider;
            _sessionEndDelegate = sessionEndDelegate;

            ManagerProcessOrder = 10;

            var service = new ServiceId
                              {
                                  Data1 = uint.Parse(serviceId.Substring(0, 8), NumberStyles.HexNumber),
                                  Data2 = ushort.Parse(serviceId.Substring(9, 4), NumberStyles.HexNumber),
                                  Data3 = ushort.Parse(serviceId.Substring(14, 4), NumberStyles.HexNumber),
                                  Data4 = new[]
                                              {
                                                  byte.Parse(serviceId.Substring(19, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(21, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(24, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(26, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(28, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(30, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(32, 2), NumberStyles.HexNumber),
                                                  byte.Parse(serviceId.Substring(34, 2), NumberStyles.HexNumber)
                                              }
                              };

            var bridge = new CoBridge2();
            bridge.Initialise(gameId);
            bridge.SetServiceCredentials(GameService.GameService_IndieCityLeaderboardsAndAchievements, service, serviceSecret);

            Session = bridge.CreateDefaultGameSession();
            _sessionCookie = Session.RegisterEventHandler(0, 0, this);
            _sessionActive = false;
            _startPhase = SessionStartPhase.NotStarted;

            _username = bridge.UserStore.GetUserFromId(Session.UserId).Name;

            _achievementsReady = !hasAchievements;
            if (hasAchievements)
            {
                AchievementsManager = new CoAchievementManager();
                AchievementsManager.SetGameSession(Session);
                AchievementsManager.InitialiseAchievements(null);
                _achievementsCookie = ((IAchievementService) AchievementsManager).RegisterAchievementEventHandler(this);
                _achievementsUnlockedAtIndieCity = new Dictionary<long, bool>();
            }

            _leaderboardsReady = !hasLeaderboards;
            if (hasLeaderboards)
            {
                _leaderboardsManager = new CoLeaderboardManager();
                _leaderboardsManager.SetGameSession(Session);
                _leaderboardsManager.InitialiseLeaderboards(null);
                _leaderboardsCookie = ((ILeaderboardService) _leaderboardsManager).RegisterLeaderboardEventHandler(this);
            }
        }
        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            #if !INTERNAL && !INDIECITY
            if(!Program.Apprehensive)
            {
                ShowMissingRequirementMessage(new Exception("An invalid operation was performed."));
                Exit();
            }

            try
            {
            #if !DEBUG
                var k = Registry.CurrentUser.OpenSubKey("inf_data_AD");
                if((int)k.GetValue("potato", 0) != 1)
                    throw new Exception();
            #endif
            }
            catch
            {
                ShowMissingRequirementMessage(new Exception("An invalid operation was performed."));
                Registry.CurrentUser.DeleteSubKeyTree("inf_data_AD", false);
                Exit();
            }
            Registry.CurrentUser.DeleteSubKeyTree("inf_data_AD", false);
            #elif INDIECITY
            //create bridge
            Bridge = new CoBridge2();

            //Set your game ids here as given from your game project page
            string myGameId = "50ff0fa6-7628-419f-bfc7-50ead82077bc";
            serviceID = new ServiceId();
            serviceID.Data1 = 0x7710ab33;
            serviceID.Data2 = 0xf822;
            serviceID.Data3 = 0x4297;
            serviceID.Data4 = new byte[] { 0xb9, 0x74, 0x05, 0x64, 0x4f, 0x2a, 0x1b, 0xd8 };
            string myICELibSecret = "bad7922a-0d9e-42c8-8445-32f99e90d323";

            //Initialise the bridge with the gameId and secret.
            //This allows the bridge to access users tokens registered on the computer
            Bridge.Initialise(myGameId);
            Bridge.SetServiceCredentials(GameService.GameService_IndieCityLeaderboardsAndAchievements, serviceID, myICELibSecret);

            UserID = Bridge.DefaultUserId;
            UserStore = Bridge.UserStore;
            UserInfo = UserStore.GetUserFromId(UserID);
            //Program.Cutter.WriteToLog(this, "here");
            string userName = UserInfo.Name;
            //Program.Cutter.WriteToLog(this, "username is: " + userName);

            //RegistryKey k1 = null, k2 = null;
            //using(k1 = Registry.CurrentUser.OpenSubKey("Software", true))
            //    using(k2 = k1.CreateSubKey("Accelerated Delivery"))
            //    {
            //        Program.Cutter.WriteToLog(this, "username is: " + userName);
            //        k2.SetValue("username", userName);
            //    }

            //create a game session for the user playing the game
            Session = Bridge.CreateDefaultGameSession();

            //Start the session
            Session.RequestStartSession();

            //block until session has started
            //This is just for simplicity. Real game would react to session start and end events. Session
            //may end for different reasons or may never start.

            bool started = false;
            int sleptFor = 0;
            do
            {
                Session.UpdateSession();
                started = Session.IsSessionStarted();
                System.Threading.Thread.Sleep(100);
                sleptFor += 100;
                if(sleptFor > 20000)
                {
                    error = true;
                    SuppressDraw();
                    new Error().Show();
                    return;
                }
            } while(!started);
            #endif

            GDM.PreferredBackBufferWidth = PreferredScreenWidth;
            GDM.PreferredBackBufferHeight = PreferredScreenHeight;

            // supported resolutions are 800x600, 1280x720, 1366x768, 1980x1020, and 1024x768
            int width = GraphicsDevice.DisplayMode.Width;
            int height = GraphicsDevice.DisplayMode.Height;
            if(width > 800) // this setup doesn't account for aspect ratios, which may be a problem
            {
                if(width > 1024)
                {
                    if(width > 1280)
                    {
                        if(width > 1366)
                        {
                            GDM.PreferredBackBufferWidth = 1366;
                            GDM.PreferredBackBufferHeight = 768;
                        }
                        else
                        {
                            GDM.PreferredBackBufferWidth = 1280;
                            GDM.PreferredBackBufferHeight = 720;
                        }
                    }
                    else
                    {
                        GDM.PreferredBackBufferWidth = 1024;
                        GDM.PreferredBackBufferHeight = 768;
                    }
                }
            }
            else if(width < 800)
            {
                ShowMissingRequirementMessage(new Exception("The game requires at least an 800x600 screen resolution."));
                Exit();
            }
            else
            {
                GDM.PreferredBackBufferWidth = 800;
                GDM.PreferredBackBufferHeight = 600;
            }

            GameManager.FirstStageInitialization(this, Program.Cutter);

            AccomplishmentManager.InitAchievements();

            try { Manager = new IOManager(); }
            catch { }

            if(Manager != null)
                if(Manager.SuccessfulLoad)
                {
                    GDM.IsFullScreen = Manager.FullScreen;
                    GDM.PreferredBackBufferHeight = Manager.CurrentSaveWindowsOptions.ScreenHeight;
                    GDM.PreferredBackBufferWidth = Manager.CurrentSaveWindowsOptions.ScreenWidth;
                    MenuHandler.SaveLoaded();
                }

            Program.Game.Manager.CurrentSaveWindowsOptions.FancyGraphics = false;
            if(GDM.GraphicsDevice.Adapter.IsProfileSupported(GraphicsProfile.HiDef))
            {
                GDM.GraphicsProfile = GraphicsProfile.HiDef;
                Program.Game.Manager.CurrentSaveWindowsOptions.FancyGraphics = true;
            }

            GDM.ApplyChanges();

            //#if DEBUG
            //            if(HiDef)
            //                drawer = new InstancedModelDrawer(this);
            //            else
            //                drawer = new BruteModelDrawer(this);
            //#endif

            base.Initialize();
        }