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); }); }
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); }
public void SetupSceneLayers(MachinaRuntime runtime, GameSpecification specification, WindowInterface machinaWindow) { BuildSceneLayers(runtime); SceneLayers.OnError += (exception) => { runtime.InsertCartridge(new CrashCartridge(specification.settings, exception)); }; }
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); } }; }
/// <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; }
public void DrawCanvasToScreen(MachinaRuntime runtime, Painter painter) { this.resizeStrategy.DrawCanvasToScreen(this.internalCanvas, CanvasRect, runtime, painter); }
public void DrawCanvasToScreen(RenderTarget2D screenRenderTarget, Rectangle canvasRect, MachinaRuntime runtime, Painter painter) { // no-op }
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(); }
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))); }