/// <summary> /// Run the stress test /// </summary> protected override void StressTest() { var game = (StressTest)RB.Game; Random.InitState(0); for (int i = 0; i < mStressLevel; i++) { var wiggle = GetWiggle(); var randRect = new Rect2i( (int)(Random.Range(-game.spriteSheet.grid.cellSize.width * 0.75f, RB.DisplaySize.width - (game.spriteSheet.grid.cellSize.width * 0.25f)) + wiggle.x), (int)(Random.Range(-game.spriteSheet.grid.cellSize.height * 0.75f, RB.DisplaySize.height - (game.spriteSheet.grid.cellSize.height * 0.25f)) + wiggle.y), Random.Range(8, 64), Random.Range(8, 64)); int type = Random.Range(0, 5); if (type == 0) { RB.DrawLine(new Vector2i(randRect.x, randRect.y), new Vector2i(randRect.x + randRect.width, randRect.y + randRect.height), mRandomColor[i]); } else if (type == 1) { RB.DrawRect(randRect, mRandomColor[i]); } else if (type == 2) { RB.DrawRectFill(randRect, mRandomColor[i]); } else if (type == 3) { RB.DrawTriangleFill( new Vector2i(randRect.x, randRect.y), new Vector2i(randRect.x + randRect.width, randRect.y), new Vector2i(randRect.x + (randRect.width / 2), randRect.y + randRect.height), mRandomColor[i]); } else if (type == 4) { RB.DrawTriangle( new Vector2i(randRect.x, randRect.y), new Vector2i(randRect.x + randRect.width, randRect.y), new Vector2i(randRect.x + (randRect.width / 2), randRect.y + randRect.height), mRandomColor[i]); } } }
private void DrawShapes(int x, int y) { var demo = (DemoReel)RB.Game; RB.CameraSet(new Vector2i(-x, -y - 66)); DemoUtil.DrawOutputFrame(new Rect2i(0, 0, 263, 27), -1, mOutputFrame, mOutputBackground); for (int i = 0; i < mShapeSize.Length; i++) { mShapeSize[i].x = (int)((Mathf.Sin((RB.Ticks / 20.0f) + i) * 6) + 8); mShapeSize[i].y = (int)((Mathf.Sin((RB.Ticks / 2 / 20.0f) + i) * 6) + 8); } RB.DrawRect(new Rect2i(-mShapeSize[0].x + 13, -mShapeSize[0].y + 13, mShapeSize[0].x * 2, mShapeSize[0].y * 2), DemoUtil.IndexToRGB(6)); RB.DrawRectFill(new Rect2i(40 - mShapeSize[1].x + 13, -mShapeSize[1].y + 13, mShapeSize[1].x * 2, mShapeSize[1].y * 2), DemoUtil.IndexToRGB(27)); RB.DrawEllipse(new Vector2i(80 + 13, 13), new Vector2i(mShapeSize[2].x, mShapeSize[2].y), DemoUtil.IndexToRGB(8)); RB.DrawEllipseFill(new Vector2i(120 + 13, 13), new Vector2i(mShapeSize[3].x, mShapeSize[3].y), DemoUtil.IndexToRGB(23)); RB.DrawEllipseInvertedFill(new Vector2i(160 + 13, 13), new Vector2i(mShapeSize[4].x, mShapeSize[4].y), DemoUtil.IndexToRGB(2)); Rect2i triRect = new Rect2i(-mShapeSize[5].x + 210, -mShapeSize[5].y + 13, mShapeSize[5].x * 2, mShapeSize[5].y * 2); RB.DrawTriangle(new Vector2i(triRect.x + (triRect.width / 2), triRect.y), new Vector2i(triRect.x, triRect.y + triRect.height), new Vector2i(triRect.x + triRect.width, triRect.y + triRect.height), DemoUtil.IndexToRGB(15)); triRect = new Rect2i(-mShapeSize[6].x + 250, -mShapeSize[6].y + 13, mShapeSize[6].x * 2, mShapeSize[6].y * 2); RB.DrawTriangleFill(new Vector2i(triRect.x, triRect.y), new Vector2i(triRect.x + triRect.width, triRect.y), new Vector2i(triRect.x + (triRect.width / 2), triRect.y + triRect.height), DemoUtil.IndexToRGB(9)); RB.CameraReset(); mFormatStr.Set("@C// Draw primitive shapes\n"); mFormatStr.Append("@[email protected](@Knew @MRect2i@N(@L").Append(-mShapeSize[0].x + 13).Append("@N, @L").Append(-mShapeSize[0].y + 13).Append("@N, @L").Append(mShapeSize[0].x * 2).Append("@N, @L").Append(mShapeSize[0].y * 2).Append("@N), @I6);\n"); mFormatStr.Append("@[email protected](@Knew @MRect2i(@L").Append(40 - mShapeSize[1].x + 13).Append("@N, @L").Append(-mShapeSize[1].y + 13).Append("@N, @L").Append(mShapeSize[1].x * 2).Append("@N, @L").Append(mShapeSize[1].y * 2).Append("@N), @I27);\n"); mFormatStr.Append("@[email protected](@Knew @MVector2i(@L").Append(80 + 13).Append("@N, @L13@N), @Knew @MVector2i@N(@L").Append(mShapeSize[2].x).Append("@N, @L").Append(mShapeSize[2].y).Append("@N), @I8);\n"); mFormatStr.Append("@[email protected](@Knew @MVector2i@N(@L").Append(120 + 13).Append("@N, @L13@N), @Knew @MVector2i@N(@L").Append(mShapeSize[3].x).Append("@N, @L").Append(mShapeSize[3].y).Append("@N),\n @I31);\n"); mFormatStr.Append("@[email protected](@Knew @MVector2i@N(@L").Append(160 + 13).Append("@N, @L13@N),\n @Knew @MVector2i@N(@L").Append(mShapeSize[4].x).Append("@N, @L").Append(mShapeSize[4].y).Append("@N), @I2);"); RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(5), DemoUtil.HighlightCode(mFormatStr, mFinalStr)); }
private void DrawSpritePacking(int x, int y) { var demo = (DemoReel)RB.Game; mFormatStr.Set( "@DRetroBlit features a sprite packer that can cram your folders\n" + "full of sprites into optimal sprite sheets! To use it simply\n" + "create a sprite pack file (.sp) and point it to your sprite folder."); RB.Print(new Vector2i(4, 4), DemoUtil.IndexToRGB(25), DemoUtil.HighlightCode(mFormatStr, mFinalStr)); y += 16; int indent = 16; int row = 0; int rowSpacing = 9; int imageSpacing = 3; int fileColor = 5; int folderColor = 3; int alphaSprite = 7; // Draw sprite pack file RB.CameraSet(new Vector2i(-170, -16)); RB.DrawRectFill(new Rect2i(x - 4, y - 4, 108, 112), DemoUtil.IndexToRGB(2)); mFormatStr.Set("@C// Source folder(s)\n"); mFormatStr.Append("@C// relative to project\n"); mFormatStr.Append("@C// root\n"); mFormatStr.Append("@MSOURCE_FOLDER@N=@LSprites@N\n\n"); mFormatStr.Append("@C// Output size\n"); mFormatStr.Append("@MOUTPUT_WIDTH@N=@L96@N\n"); mFormatStr.Append("@MOUTPUT_HEIGHT@N=@L96@N\n\n"); mFormatStr.Append("@C// Trim empty space\n"); mFormatStr.Append("@MTRIM@N=@Ltrue@N"); RB.Print(new Vector2i(x, y), DemoUtil.IndexToRGB(fileColor), "DemoSpritePack.sp"); RB.DrawLine(new Vector2i(x, y + rowSpacing + 2), new Vector2i(x + 100, y + rowSpacing + 2), DemoUtil.IndexToRGB(3)); RB.Print(new Vector2i(x, y + rowSpacing + rowSpacing), DemoUtil.IndexToRGB(fileColor), DemoUtil.HighlightCode(mFormatStr, mFinalStr)); RB.DrawRectFill(new Rect2i(-32, 60, 6 * 3, 6), DemoUtil.IndexToRGB(5)); RB.DrawRectFill(new Rect2i(-26, 54, 6, 6 * 3), DemoUtil.IndexToRGB(5)); // Draw file listing RB.CameraSet(new Vector2i(-4, -16)); RB.SpriteSheetSet(0); RB.DrawRectFill(new Rect2i(x - 4, y - 4, 120, 266), DemoUtil.IndexToRGB(2)); mFormatStr.Set( "@DYour sprite source folders can be anywhere, but it's best to keep\n" + "them out of your @NAssets@D folder so that Unity does not put your\n" + "source sprites into the game @NAsset Resources@D!\n" + "\n" + "When you change your source sprites be sure to manually re-import\n" + "your sprite pack because Unity can't detect sprite changes outside\n" + "of the @NAssets@D folder!"); RB.Print(new Vector2i(x - 4, y - 4 + 270), DemoUtil.IndexToRGB(25), DemoUtil.HighlightCode(mFormatStr, mFinalStr)); RB.Print(new Vector2i(x, y + row), DemoUtil.IndexToRGB(folderColor), "Sprites/"); row += rowSpacing; RB.Print(new Vector2i(x + indent, y + row), DemoUtil.IndexToRGB(folderColor), "Characters/"); row += rowSpacing; RB.SpriteSheetSet(1); RB.DrawSprite(alphaSprite, new Vector2i(x + (indent * 2), y + row)); RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteHero1, new Vector2i(x + (indent * 2), y + row)); row += mSpriteHero1.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "Hero1.png"); row += rowSpacing; RB.SpriteSheetSet(1); RB.DrawSprite(alphaSprite, new Vector2i(x + (indent * 2), y + row)); RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteHero2, new Vector2i(x + (indent * 2), y + row)); row += mSpriteHero2.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "Hero2.png"); row += rowSpacing; RB.Print(new Vector2i(x + indent, y + row), DemoUtil.IndexToRGB(folderColor), "Terrain/"); row += rowSpacing; RB.SpriteSheetSet(1); RB.DrawSprite(alphaSprite, new Vector2i(x + (indent * 2), y + row)); RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteDirtCenter, new Vector2i(x + (indent * 2), y + row)); row += mSpriteDirtCenter.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "DirtCenter.png"); row += rowSpacing; RB.SpriteSheetSet(1); RB.DrawSprite(alphaSprite, new Vector2i(x + (indent * 2), y + row)); RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteDirtSide, new Vector2i(x + (indent * 2), y + row)); row += mSpriteDirtSide.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "DirtSide.png"); row += rowSpacing; RB.SpriteSheetSet(1); RB.DrawSprite(alphaSprite, new Vector2i(x + (indent * 2), y + row)); RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteGrassTop, new Vector2i(x + (indent * 2), y + row)); row += mSpriteGrassTop.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "GrassTop.png"); row += rowSpacing; RB.SpriteSheetSet(1); RB.DrawSprite(alphaSprite, new Vector2i(x + (indent * 2), y + row)); RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteGrassTopRight, new Vector2i(x + (indent * 2), y + row)); row += mSpriteGrassTopRight.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "GrassTopRight.png"); row += rowSpacing; RB.SpriteSheetSet(0); RB.DrawSprite(mSpriteWater, new Vector2i(x + (indent * 2), y + row)); row += mSpriteWater.Size.height + imageSpacing; RB.Print(new Vector2i(x + (indent * 2), y + row), DemoUtil.IndexToRGB(fileColor), "Water.png"); row += rowSpacing; RB.Print(new Vector2i(x + indent, y + row), DemoUtil.IndexToRGB(folderColor), "Other/"); row += rowSpacing; RB.Print(new Vector2i(x + (indent * 3), y + row), DemoUtil.IndexToRGB(folderColor), "...\n...\n..."); // Draw packed sprite sheet RB.CameraSet(new Vector2i(-168, -172)); RB.DrawRectFill(new Rect2i(x, y, RB.SpriteSheetSize().width + 4, RB.SpriteSheetSize().height + 4), DemoUtil.IndexToRGB(2)); RB.SpriteSheetSet(1); for (int gx = 0; gx < 6; gx++) { for (int gy = 0; gy < 6; gy++) { RB.DrawSprite(alphaSprite, new Vector2i(x + 2 + (gx * 16), y + 2 + (gy * 16))); } } RB.SpriteSheetSet(0); RB.DrawCopy(new Rect2i(0, 0, RB.SpriteSheetSize().width, RB.SpriteSheetSize().height), new Vector2i(x + 2, y + 2)); Vector2i p0 = new Vector2i((RB.SpriteSheetSize().width / 2) + 6, 8); Vector2i p1 = new Vector2i(p0.x - 10, p0.y - 10); Vector2i p2 = new Vector2i(p0.x + 10, p0.y - 10); RB.DrawTriangleFill(p0, p1, p2, DemoUtil.IndexToRGB(5)); RB.DrawRectFill(new Rect2i(p0.x - 6, p1.y - 10, 11, 10), DemoUtil.IndexToRGB(5)); RB.CameraReset(); }