public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            var options = new List <Option>
            {
                new ChangeMenuOption("Options", new OptionsMenu(this, "Go back"), game),
                new ChangeMenuOption("Back to Game", null, game),
                new ActionOption("Return to Title", ReturnToTitleAction)
            };

            RenderScrollingListTable(options, Location.Right);

            const int width   = 16;
            var       seconds = Game.GameTime / 60;
            var       minutes = seconds / 60;
            var       hours   = minutes / 60;

            minutes %= 60;
            seconds %= 60;

            var ts =
                $"{(hours > 0 ? hours + ":" + (minutes < 10 ? "0" : "") + minutes + ":" : minutes + ":" + (seconds < 10 ? "0" : "") + seconds)}";

            _lines = new List <string>
            {
                Utils.SpacesCenter(ts, width, 0, 1),
                $"Score:{Utils.SpacesPushleft(Game.Player.Score.ToString(), width, 6)}",
                $"Mode:{Utils.SpacesPushleft(McGame.Difficulty.ShortName, width, 5)}",
                $"Size:{Utils.SpacesPushleft($"{GameConts.Instance.MaxWidth}x{GameConts.Instance.MaxHeight}", width, 5)}"
            };

            _titleLabel = new Label(Game.UiManager, "Game is Paused", (GameConts.ScreenMiddleWidth - ("Game is Paused".Length * 8 / 2)), 15, Color.White);
            Game.UiManager.Add(_titleLabel);
        }
示例#2
0
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            ConfigMenuOptions();

            _titleLabel = new Label(Game.UiManager, "Options", (GameConts.ScreenMiddleWidth - ("Options".Length * 8 / 2)), 15, Color.White);
            Game.UiManager.Add(_titleLabel);

            RenderScrollingListTable(_menus["main"]);
        }
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            string text = "UI Object Testing";

            _titleLabel = new Label(Game.UiManager, text, -text.Length, 20, Color.White);
            _progBar    = new ProgressBar(Game.UiManager)
            {
                X        = 10,
                Y        = 30,
                Width    = 20,
                Progress = 0
            };

            Game.UiManager.Add(_titleLabel);
            Game.UiManager.Add(_progBar);
        }
示例#4
0
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            if (_credits == null)
            {
                _credits = File.Exists(Path.Combine(Game.Content.RootDirectory, "credits.txt")) ?
                           File.ReadAllLines(Path.Combine(Game.Content.RootDirectory, "credits.txt")) : new[] { "Credits are missing why?" }
            }
            ;

            ScoreBoardManager.Load();
            _score       = ScoreBoardManager.Scores.Score;
            _bottomLabel = new Label(Game.UiManager)
            {
                Text = "", Color = Color.Get(-100, 222, 222, 222)
            };
            _bottomLabel.X = -(_bottomLabel.Text.Length * 8);
            _bottomLabel.Y = GameConts.Height - 8;

            Game.UiManager.Add(_bottomLabel);

            var options = new List <Option>
            {
                new ChangeMenuOption("New Game", new NewGameMenu(this), Game),
                new ChangeMenuOption("How to play", new InstructionsMenu(this), Game),
                new LabelOption("Mods")
                {
                    Enabled = false
                },
#if DEBUG
                new ChangeMenuOption("Debug", new DebugMenu(this), Game),
#endif
                new ChangeMenuOption("Options", new OptionsMenu(this), Game),
                new ActionOption("Exit", () => Game.Exit())
                {
                    ClickSound = false
                }
            };

            RenderScrollingListTable(options, Location.Right);
        }
        public ConsoleCommands(McGame game)
        {
            _game = game;
            ManualInterpreter.RegisterCommand("game-seed", _ => $"Current game seed is: {LevelGen.Seed}");
            ManualInterpreter.RegisterCommand("give-item", GiveItemCommand);
            ManualInterpreter.RegisterCommand("spawn-mob", SpawnMobCommand);
            ManualInterpreter.RegisterCommand("kill-me", KillMeCommand);
            ManualInterpreter.RegisterCommand("save-image", SaveWorldImageCommand);
            ManualInterpreter.RegisterCommand("play-sound", PlaySoundCommand);
            ManualInterpreter.RegisterCommand("goto-level", MoveToLevel);
            ManualInterpreter.RegisterCommand("player-color", NewRandomPlayerColorCommand);
#if DEBUG
            ManualInterpreter.RegisterCommand("etx", ExportTileXmlCommand);
#endif

            //Normal commands XD
            ManualInterpreter.RegisterCommand("clear", _ => game.Console.Clear());
            ManualInterpreter.RegisterCommand("exit", _ => game.Exit());
            ManualInterpreter.RegisterCommand("fps", _ => $"Current FPS: {game.FpsCounterComponent.FrameRate}");
        }
示例#6
0
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            _worldSizeOption  = new WorldSizeOption();
            _difficultyOption = new DifficultyOption();

            _options = new List <Option>
            {
                _worldSizeOption,
                _difficultyOption,
                new ActionOption("Create and Start", CreateAndStartWorld),
                new ChangeMenuOption("Cancel", Parent, game)
            };

            _titleLabel = new Label(Game.UiManager, "New Game", (GameConts.ScreenMiddleWidth - ("New Game".Length * 8 / 2)), 15, Color.White);
            Game.UiManager.Add(_titleLabel);

            RenderScrollingListTable(_options);
        }
示例#7
0
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            var options = new List <Option>
            {
                new ChangeMenuOption("Color Test", new ColorTestMenu(this), game),
                new ChangeMenuOption("UI Object Test", new UiObjectTestMenu(this), game),
                new ActionOption("Alert Dialog", () =>
                {
                    game.SetMenu(new AlertMenu(this, new[] { "I am a test", "So am i", "But also am i" }, YesAction));
                }),
                new ChangeMenuOption("Main Menu", Parent, game)
            };

            _titleLabel = new Label(Game.UiManager, "Debug Tools", (GameConts.ScreenMiddleWidth - ("Debug Tools".Length * 8 / 2)), 15, Color.White);
            Game.UiManager.Add(_titleLabel);

            RenderScrollingListTable(options);
        }
示例#8
0
        public Player(McGame game, InputHandler input)
        {
            Game    = game;
            _input  = input;
            X       = 24;
            Y       = 24;
            Stamina = MaxStamina;

            Inventory.Add(new FurnitureItem(new Workbench()));
            Inventory.Add(new PowerGloveItem());

            var rnd = new Random((int)LevelGen.Seed);


            ChangePlayerColor(100, rnd.NextInt(555) + 1, rnd.NextInt(555) + 1);
#if DEBUG
            foreach (var item in Resource.AllResources)
            {
                Inventory.Add(new ResourceItem(item, 1000));
            }
#endif
        }
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            _options.Clear();
            for (var i = 0; i < _rand.Next(9, 100) + 1; i++)
            {
                var a = -1;
                var b = _rand.Next(1, 555) + 1;
                var c = _rand.Next(1, 555) + 1;
                var d = _rand.Next(1, 555) + 1;

                _options.Add(new LabelOption(Color.GetHex(a, b, c, d))
                {
                    SelectedColor = Color.Get(a, b, c, d),
                    Enabled       = true
                });
            }

            _options.Add(new ChangeMenuOption("Debug Menu", Parent, Game));

            RenderScrollingListTable(_options, Location.Right);
        }
示例#10
0
 public virtual void Init(McGame game, InputHandler input)
 {
     Input = input;
     Game  = game;
 }
示例#11
0
        public async System.Threading.Tasks.Task StopGame()
        {
            McGame.Get()?.OnGameStop(mGameInstance);

            foreach (var i in AutoMembers)
            {
                i.Key.OnGameStop(i.Value);
            }

            var savedLogic  = CEngine.Instance.ThreadLogic.LimitTime;
            var savedRender = CEngine.Instance.ThreadRHI.LimitTime;

            CEngine.Instance.ThreadLogic.LimitTime = long.MaxValue;
            CEngine.Instance.ThreadRHI.LimitTime   = long.MaxValue;
            await EngineNS.CEngine.Instance.EventPoster.Post(() =>
            {
                while (mGameInstance != null && mGameInstance.GameState != GamePlay.GGameInstance.enGameState.Initialized)
                {
                    System.Threading.Thread.Sleep(50);
                }

                if (mGameInstance == null)
                {
                    return(false);
                }
                mGameInstance.GameState = GamePlay.GGameInstance.enGameState.Stopping;
                mGameInstance.FinalGame();
                mGameInstance.GameState = GamePlay.GGameInstance.enGameState.Stopped;
                CEngine.Instance.TickManager.RemoveTickInfo(mGameInstance);
                mGameInstance = null;
                return(true);
            }, Thread.Async.EAsyncTarget.Logic);

            //EngineNS.CEngine.Instance.EventPoster.RunOn(() =>
            //{
            //    if (mGameInstance == null)
            //        return false;
            //    mGameInstance.GameState = GamePlay.GGameInstance.enGameState.Stopping;
            //    mGameInstance.FinalGame();
            //    mGameInstance.GameState = GamePlay.GGameInstance.enGameState.Stopped;
            //    CEngine.Instance.TickManager.RemoveTickInfo(mGameInstance);
            //    mGameInstance = null;
            //    return true;
            //}, Thread.Async.EAsyncTarget.Logic);

            OnGameStoped();

            McGame.Reset();
            CEngine.Instance.MacrossDataManager.CleanDebugContextGCRefrence();

            CEngine.Instance.ThreadLogic.LimitTime = savedLogic;
            CEngine.Instance.ThreadRHI.LimitTime   = savedRender;
            //CEngine.Instance.MacrossDataManager.ClearDebugContext();
            GC.Collect();
            GC.WaitForFullGCComplete();
            GC.Collect();
            GC.WaitForFullGCComplete();

            if (TickableNum != CEngine.Instance.TickManager.GetTickableNum())
            {
                System.Diagnostics.Debug.Assert(false);
            }
        }
示例#12
0
        public async System.Threading.Tasks.Task <bool> StartGame(Type gameInstanceType, IntPtr WinHandle, UInt32 width, UInt32 height, EngineNS.GamePlay.GGameInstanceDesc desc, EngineNS.Graphics.CGfxCamera camera, RName startScript)
        {
#if PWindow
            //Bricks.RemoteServices.RPCExecManager.Insance.SaveCode();
#endif
            McGame = CEngine.Instance.MacrossDataManager.NewObjectGetter <GamePlay.McGameInstance>(startScript);

            TickableNum = CEngine.Instance.TickManager.GetTickableNum();
            if (mGameInstance != null && mGameInstance.GameState != GamePlay.GGameInstance.enGameState.Stopped)
            {
                return(false);
            }

            var savedLogic  = CEngine.Instance.ThreadLogic.LimitTime;
            var savedRender = CEngine.Instance.ThreadRHI.LimitTime;
            CEngine.Instance.ThreadLogic.LimitTime = long.MaxValue;
            CEngine.Instance.ThreadRHI.LimitTime   = long.MaxValue;

            mGameInstance           = System.Activator.CreateInstance(gameInstanceType) as GamePlay.GGameInstance;
            mGameInstance.GameState = GamePlay.GGameInstance.enGameState.initializing;
            try
            {
                if (false == await mGameInstance.InitGame(WinHandle, width, height, desc, camera))
                {
                    CEngine.Instance.ThreadLogic.LimitTime = savedLogic;
                    CEngine.Instance.ThreadRHI.LimitTime   = savedRender;
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Profiler.Log.WriteException(ex);
            }

            foreach (var i in AutoMembers)
            {
                await i.Key.OnGameStart(i.Value);
            }

            OnGameStarted();

            CEngine.Instance.ThreadLogic.LimitTime = savedLogic;
            CEngine.Instance.ThreadRHI.LimitTime   = savedRender;

            var smp = Thread.ASyncSemaphore.CreateSemaphore(1);
            EngineNS.CEngine.Instance.EventPoster.RunOn(async() =>
            {
                var mcGame = McGame.Get();
                if (mcGame != null)
                {
                    Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Macross", "Macross begin mcGame.OnGameStart");
                    try
                    {
                        await mcGame.OnGameStart(mGameInstance);
                    }
                    catch (Exception ex)
                    {
                        Profiler.Log.WriteException(ex);
                    }
                    Profiler.Log.WriteLine(Profiler.ELogTag.Info, "Macross", "Macross end mcGame.OnGameStart");
                }

                smp.Release();
                return(true);
            }, Thread.Async.EAsyncTarget.Logic);

            await smp.Await();

            mGameInstance.GameState = GamePlay.GGameInstance.enGameState.Initialized;
            await mGameInstance.OnGameInited();

            return(true);
        }
示例#13
0
        public override void Init(McGame game, InputHandler input)
        {
            base.Init(game, input);

            ScoreBoardManager.AddItem(DateTime.Now, game.GameTime, Game.Player.Score, McGame.Difficulty.ShortName, _youWon);
        }
 public ChangeMenuOption(string label, Menu @goto, McGame game) : base(label)
 {
     _goto = @goto;
     _game = game;
 }
示例#15
0
 public UiManager(McGame game, InputHandler inputHandler)
 {
     Game         = game;
     InputHandler = inputHandler;
     _uiObjects   = new List <UiObject>();
 }