예제 #1
0
        public override void OnGameLoad(GameSpecification specification, MachinaRuntime runtime)
        {
            SceneLayers.BackgroundColor = Color.Maroon;
            var scene     = SceneLayers.AddNewScene();
            var rootActor = scene.AddActor("Main");

            var errorText = this.exception.Message + "\n\n" + this.exception.StackTrace;

            var filePath = $"{Path.Join(MachinaClient.FileSystem.AppDataPath, $"crashdump-{DateTime.Now.ToFileTime()}.txt")}";

            MachinaClient.FileSystem.WriteStringToAppData(errorText, filePath, true);

            var titleText       = "Game Crashed, sorry about that :(";
            var contactInfoText = $"You can also get this message in text form at:\n{filePath}\nReach out to @NotExplosive on Twitter so I can fix it";

            new BoundingRect(rootActor, Point.Zero);
            new BoundingRectToViewportSize(rootActor);
            new LayoutGroup(rootActor, Orientation.Vertical)
            .AddHorizontallyStretchedElement("title", 64, titleActor =>
            {
                new BoundedTextRenderer(titleActor, titleText, MachinaClient.DefaultStyle.uiElementFont);
            })
            .AddHorizontallyStretchedElement("contact-info", 80, contactInfoActor =>
            {
                new BoundedTextRenderer(contactInfoActor, contactInfoText, MachinaClient.DefaultStyle.uiElementFont, Color.White, Alignment.TopLeft, Overflow.Ignore);
            })
            .AddBothStretchedElement("content", contentActor =>
            {
                new BoundedTextRenderer(contentActor, errorText, MachinaClient.DefaultStyle.uiElementFont);
            });
        }
예제 #2
0
        public override void OnGameLoad(GameSpecification specification, MachinaRuntime runtime)
        {
            var gameScene = SceneLayers.AddNewScene();

            var platform = gameScene.AddActor("Platform", new Vector2(200, 300));

            new BoundingRect(platform, new Point(300, 32))
            .SetOffsetToCenter();
            new BoundingRectFill(platform, Color.White);

            var playerActor   = gameScene.AddActor("Player", new Vector2(200, 200));
            var playerSprites = MachinaClient.Assets.GetMachinaAsset <GridBasedSpriteSheet>("player");

            new BoundingRect(playerActor, new Point(64, 32));
            new SpriteRenderer(playerActor, playerSprites)
            .SetupBoundingRect();
            // new PlayerController(playerActor);


            var uiScene     = SceneLayers.AddNewScene();
            var healthActor = uiScene.AddActor("Healthbar", new Vector2(10, 10));

            new BoundingRect(healthActor, new Point(200, 20));
            // new HealthbarRenderer(healthActor);
        }
예제 #3
0
        public void SetupSceneLayers(MachinaRuntime runtime, GameSpecification specification, WindowInterface machinaWindow)
        {
            BuildSceneLayers(runtime);

            SceneLayers.OnError += (exception) =>
            {
                runtime.InsertCartridge(new CrashCartridge(specification.settings, exception));
            };
        }
예제 #4
0
        public override void OnGameLoad(GameSpecification specification, MachinaRuntime runtime)
        {
            var introScene = SceneLayers.AddNewScene();

            var textActor = introScene.AddActor("text");

            new BoundingRect(textActor, 20, 20);
            new BoundingRectToViewportSize(textActor);
            new BoundedTextRenderer(textActor, "", MachinaClient.Assets.GetSpriteFont("LogoFont"), Color.White, Alignment.Center);
            new IntroTextAnimation(textActor);
            new CallbackOnDestroy(textActor, onEnd);
        }
        public void PrepareLoadingScreen(GameCartridge gameCartridge, MachinaRuntime runtime, AssetLibrary assets, WindowInterface machinaWindow, Action <GameCartridge> onFinished)
        {
            var loader = assets.GetStaticAssetLoadTree();

            LoadDefaultStyle(loader, assets, runtime.Painter);
            gameCartridge.PrepareDynamicAssets(loader, runtime);

            var loadingScreen =
                new LoadingScreen(loader);

            var introScene  = SceneLayers.AddNewScene();
            var loaderActor = introScene.AddActor("Loader");
            var adHoc       = new AdHoc(loaderActor);

            adHoc.onPreDraw += (spriteBatch) =>
            {
                if (!loadingScreen.IsDoneUpdateLoading())
                {
                    // Waiting for this to complete before draw loading
                }
                else if (!loadingScreen.IsDoneDrawLoading())
                {
                    loadingScreen.IncrementDrawLoopLoad(assets, spriteBatch);
                }
            };

            adHoc.onDraw += (spriteBatch) =>
            {
                loadingScreen.Draw(spriteBatch, machinaWindow.CurrentWindowSize);
            };

            adHoc.onUpdate += (dt) =>
            {
                if (!loadingScreen.IsDoneUpdateLoading())
                {
                    var increment = 3;
                    for (var i = 0; i < increment; i++)
                    {
                        loadingScreen.Update(dt / increment);
                    }
                }

                if (loadingScreen.IsDoneDrawLoading() && loadingScreen.IsDoneUpdateLoading())
                {
                    onFinished(gameCartridge);
                }
            };
        }
예제 #6
0
 /// <summary>
 /// Just before the loading screen runs it collects up all the assets it needs to load (namely the Textures, Sounds, SpriteFonts, etc in Content)
 /// If there are any other assets you want it to load (such as MachinaAssets or dynamically generated Textures) you can set them up here.
 /// </summary>
 /// <param name="loader">Use this to request assets to be loaded</param>
 /// <param name="graphicsDevice">MonoGame GraphicsDevice, you might need this to build textures dynamically</param>
 public abstract void PrepareDynamicAssets(AssetLoader loader, MachinaRuntime runtime);
 public override void OnGameLoad(GameSpecification specification, MachinaRuntime runtime)
 {
     SceneLayers.BackgroundColor = Color.Black;
 }
예제 #8
0
 public void DrawCanvasToScreen(MachinaRuntime runtime, Painter painter)
 {
     this.resizeStrategy.DrawCanvasToScreen(this.internalCanvas, CanvasRect, runtime, painter);
 }
예제 #9
0
 public void DrawCanvasToScreen(RenderTarget2D screenRenderTarget, Rectangle canvasRect, MachinaRuntime runtime, Painter painter)
 {
     // no-op
 }
예제 #10
0
            public void DrawCanvasToScreen(RenderTarget2D canvas, Rectangle canvasRect, MachinaRuntime runtime, Painter painter)
            {
                painter.ClearRenderTarget();
                painter.SpriteBatch.Begin(SpriteSortMode.BackToFront, null, runtime.CurrentCartridge.UsedSamplerState, DepthStencilState.DepthRead);
                painter.SpriteBatch.Draw(canvas,
                                         canvasRect,
                                         null, Color.White);

                painter.SpriteBatch.End();
            }
예제 #11
0
 public override void PrepareDynamicAssets(AssetLoader loader, MachinaRuntime runtime)
 {
     // Assumes Content has a SpriteFont called "my-font"
     // Assumes Content has a Texture called "player-sprite"
     loader.AddMachinaAssetCallback("player", () => new GridBasedSpriteSheet("player-sprite", new Point(64, 64)));
 }