private IDMigrationStepCard CreateIDMigrationStepCard(SourceTargetRange r, int index) { return(new IDMigrationStepCard(r) { Margin = new MarginPadding { Top = CardMargin }, Index = index, CardDragged = (c, e) => RearrangeCards(index, e), CardClicked = HandleCardClicked }); }
public void AddStep(SourceTargetRange range, bool addToEditor = true, int?newIndex = null) { var newCard = CreateIDMigrationStepCard(range, newIndex ?? TabRanges.Count); Cards.Add(newCard); stepList.Add(newCard); if (addToEditor) { editor.AddIDMigrationStep(range); } UpdateNoStepDialogVisibility(TabRanges); }
public void ValueAdjustment() { var range = new SourceTargetRange(1, 5, 11); Assert.AreEqual(15, range.TargetTo); range.SourceFrom = 5; Assert.AreEqual(5, range.SourceFrom); Assert.AreEqual(11, range.TargetTo); range.SourceFrom = 1; range.SourceTo = 3; Assert.AreEqual(3, range.SourceTo); Assert.AreEqual(13, range.TargetTo); range.SourceTo = 5; range.TargetFrom = 21; Assert.AreEqual(21, range.TargetFrom); Assert.AreEqual(25, range.TargetTo); range.TargetFrom = 11; range.TargetTo = 20; Assert.AreEqual(20, range.TargetTo); Assert.AreEqual(10, range.SourceTo); }
public IDMigrationStepCard(SourceTargetRange range) { StepRange = range; CornerRadius = 5; Masking = true; RelativeSizeAxes = Axes.X; Height = 25; Children = new Drawable[] { hoverBox = new Box { RelativeSizeAxes = Axes.Both, Colour = FromHex("181818") }, new FillFlowContainer { Direction = FillDirection.Horizontal, RelativeSizeAxes = Axes.Y, Children = new Drawable[] { selectionBar = new Box { RelativeSizeAxes = Axes.Y, Width = 5, Colour = FromHex("808080"), Alpha = 0.5f // Transparency will allow the background to lighten the container up }, stepIndexContainer = new Container { RelativeSizeAxes = Axes.Y, Width = 25, Children = new Drawable[] { stepIndexContainerBackground = new Box { RelativeSizeAxes = Axes.Both, Colour = new ColourInfo { BottomLeft = FromHex("606060"), BottomRight = FromHex("606060"), TopLeft = FromHex("606060"), TopRight = FromHex("606060") }, Alpha = 0.5f }, stepIndex = new SpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = Index.ToString(), Font = new FontUsage(size: 20) } } } } }, // TODO: Migrate to a class called IDMigrationStepText new Container { RelativeSizeAxes = Axes.Both, Anchor = Anchor.Centre, Origin = Anchor.Centre, Children = new Drawable[] { sourceText = new SpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, RelativePositionAxes = Axes.X, X = -0.25f, Margin = new MarginPadding { Left = 30 }, Text = range.SourceToString(), Font = new FontUsage(size: 20) }, rightArrow = new SpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = ">", Font = new FontUsage(size: 20), Alpha = 0.5f }, targetText = new SpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, RelativePositionAxes = Axes.X, X = 0.25f, Margin = new MarginPadding { Right = 25 }, Text = range.TargetToString(), Font = new FontUsage(size: 20) } } }, stepDragContainer = new DraggableCardContainer { RelativeSizeAxes = Axes.Y, Anchor = Anchor.CentreRight, Origin = Anchor.CentreRight, Width = 25, Children = new Drawable[] { new SpriteIcon { Icon = FontAwesome.Solid.Bars, Origin = Anchor.Centre, Anchor = Anchor.Centre, RelativeSizeAxes = Axes.Both, Size = new Vector2(0.7f), Y = -1, // I have no f*****g idea why this happens, but it's necessary to make the sprite appear centered Alpha = 0.6f } }, CardDragged = e => { Position += e.Delta; CardDragged?.Invoke(this, e); } } }; Selected.ValueChanged += OnSelected; StepRange.SourceTargetRangeChanged += (a, b, c, d) => { sourceText.Text = StepRange.SourceToString(); targetText.Text = StepRange.TargetToString(); }; }
public TestSceneIDMigrationBackend() { Children = new Drawable[] { new SpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Font = new FontUsage(size: 26), Text = "Nothing to see here, too bored to make friendly visualized messages indicating test cases" } }; var normalBlocks = new GeneralObject[5]; var moveTriggers = new MoveTrigger[5]; var pickupItems = new PickupItem[5]; var pickupTriggers = new PickupTrigger[5]; var colorTriggers = new ColorTrigger[5]; var instantCountTriggers = new InstantCountTrigger[5]; var collisionBlocks = new CollisionBlock[5]; var collisionTriggers = new CollisionTrigger[5]; for (var i = 0; i < 5; i++) { normalBlocks[i] = new GeneralObject(1) { GroupIDs = new[] { i + 1 }, Color1ID = i + 1, Color2ID = i + 21 } } ; for (var i = 0; i < 5; i++) { moveTriggers[i] = new MoveTrigger(0, i + 1); } for (var i = 0; i < 5; i++) { pickupItems[i] = new PickupItem(1275) { TargetItemID = i + 1 } } ; for (var i = 0; i < 5; i++) { pickupTriggers[i] = new PickupTrigger(i + 1, 0); } for (var i = 0; i < 5; i++) { colorTriggers[i] = new ColorTrigger(i + 1) { CopiedColorID = i + 21 } } ; for (var i = 0; i < 5; i++) { instantCountTriggers[i] = new InstantCountTrigger(i + 1, i + 1, 0); } for (var i = 0; i < 5; i++) { collisionBlocks[i] = new CollisionBlock { BlockID = i + 1 } } ; for (var i = 0; i < 5; i++) { collisionTriggers[i] = new CollisionTrigger(i + 1, i + 21, i + 1); } var allObjects = new LevelObjectCollection(normalBlocks.Concat(moveTriggers).Concat(pickupItems) .Concat(pickupTriggers).Concat(colorTriggers).Concat(instantCountTriggers).Concat(collisionBlocks) .Concat(collisionTriggers).ToList()); var level = new Level { Name = "ID Migration Test Level", Description = "This is a test level to help testing the ID migration feature in the backend", LevelObjects = allObjects }; var editor = new Editor(level); var step0 = new SourceTargetRange(1, 5, 6); var step1 = new SourceTargetRange(21, 25, 46); var step2 = new SourceTargetRange(1, 25, 26); var step3 = new SourceTargetRange(8, 8, 10); AddStep("Perform Group ID migration 1-5 > 6-10", () => editor.PerformGroupIDMigration(new List <SourceTargetRange> { step0 })); AddAssert("Verify Group ID migration", () => VerifyGroupIDMigration(step0.TargetFrom)); AddStep("Perform Color ID migration 1-25 > 26-50", () => editor.PerformColorIDMigration(new List <SourceTargetRange> { step2 })); AddAssert("Verify Color ID migration", () => VerifyColorIDMigration(step2.TargetFrom, step1.TargetFrom)); AddStep("Perform Item ID migration 1-5 > 6-10", () => editor.PerformItemIDMigration(new List <SourceTargetRange> { step0 })); AddAssert("Verify Item ID migration", () => VerifyItemIDMigration(step0.TargetFrom)); AddStep("Perform Block ID migration 21-25 > 46-50", () => editor.PerformBlockIDMigration(new List <SourceTargetRange> { step1 })); AddAssert("Verify Block ID migration", () => VerifyBlockIDMigration(step0.SourceFrom, step1.TargetFrom)); // TODO: Add more test steps with multiple step ID migrations bool VerifyGroupIDMigration(int targetFrom) { for (var i = 0; i < 5; i++) { if (normalBlocks[i].GetGroupID(0) != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (moveTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (instantCountTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (collisionTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } return(true); } bool VerifyColorIDMigration(int targetFromA, int targetFromB) { for (var i = 0; i < 5; i++) { if (normalBlocks[i].Color1ID != i + targetFromA) { return(false); } if (normalBlocks[i].Color2ID != i + targetFromB) { return(false); } } for (var i = 0; i < 5; i++) { if (colorTriggers[i].TargetColorID != i + targetFromA) { return(false); } if (colorTriggers[i].CopiedColorID != i + targetFromB) { return(false); } } return(true); } bool VerifyItemIDMigration(int targetFrom) { for (var i = 0; i < 5; i++) { if (pickupItems[i].TargetItemID != i + targetFrom) { return(false); } } for (var i = 0; i < 5; i++) { if (pickupTriggers[i].TargetItemID != i + targetFrom) { return(false); } } return(true); } bool VerifyBlockIDMigration(int targetFromA, int targetFromB) { for (var i = 0; i < 5; i++) { if (collisionBlocks[i].BlockID != i + targetFromA) { return(false); } } for (var i = 0; i < 5; i++) { if (collisionTriggers[i].PrimaryBlockID != i + targetFromA) { return(false); } if (collisionTriggers[i].SecondaryBlockID != i + targetFromB) { return(false); } } return(true); } } } }
public void IDMigration() { var normalBlocks = new GeneralObject[5]; var moveTriggers = new MoveTrigger[5]; var pickupItems = new PickupItem[5]; var pickupTriggers = new PickupTrigger[5]; var colorTriggers = new ColorTrigger[5]; var instantCountTriggers = new InstantCountTrigger[5]; var collisionBlocks = new CollisionBlock[5]; var collisionTriggers = new CollisionTrigger[5]; for (int i = 0; i < 5; i++) { normalBlocks[i] = new GeneralObject(1) { GroupIDs = new int[] { i + 1 }, Color1ID = i + 1, Color2ID = i + 21, } } ; for (int i = 0; i < 5; i++) { moveTriggers[i] = new MoveTrigger(0, i + 1); } for (int i = 0; i < 5; i++) { pickupItems[i] = new PickupItem(1275) { TargetItemID = i + 1, } } ; for (int i = 0; i < 5; i++) { pickupTriggers[i] = new PickupTrigger(i + 1, 0); } for (int i = 0; i < 5; i++) { colorTriggers[i] = new ColorTrigger(i + 1) { CopiedColorID = i + 21, } } ; for (int i = 0; i < 5; i++) { instantCountTriggers[i] = new InstantCountTrigger(i + 1, i + 1, 0); } for (int i = 0; i < 5; i++) { collisionBlocks[i] = new CollisionBlock { BlockID = i + 1, } } ; for (int i = 0; i < 5; i++) { collisionTriggers[i] = new CollisionTrigger(i + 1, i + 21, i + 1); } var allObjects = new LevelObjectCollection(normalBlocks.Concat(moveTriggers).Concat(pickupItems).Concat(pickupTriggers).Concat(colorTriggers).Concat(instantCountTriggers).Concat(collisionBlocks).Concat(collisionTriggers).ToList()); var level = new Level { Name = "ID Migration Test Level", Description = "This is a test level to help testing the ID migration feature in the backend", LevelObjects = allObjects, }; var editor = new Editor(level); var step0 = new SourceTargetRange(1, 5, 6); var step1 = new SourceTargetRange(21, 25, 46); var step2 = new SourceTargetRange(1, 25, 26); var step3 = new SourceTargetRange(8, 8, 10); editor.PerformGroupIDMigration(new List <SourceTargetRange> { step0 }); Assert.IsTrue(VerifyGroupIDMigration(step0.TargetFrom)); editor.PerformColorIDMigration(new List <SourceTargetRange> { step2 }); Assert.IsTrue(VerifyColorIDMigration(step2.TargetFrom, step1.TargetFrom)); editor.PerformItemIDMigration(new List <SourceTargetRange> { step0 }); Assert.IsTrue(VerifyItemIDMigration(step0.TargetFrom)); editor.PerformBlockIDMigration(new List <SourceTargetRange> { step1 }); Assert.IsTrue(VerifyBlockIDMigration(step0.SourceFrom, step1.TargetFrom)); // TODO: Add more test steps with multiple step ID migrations bool VerifyGroupIDMigration(int targetFrom) { for (int i = 0; i < 5; i++) { if (normalBlocks[i].GetGroupID(0) != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (moveTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (instantCountTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (collisionTriggers[i].TargetGroupID != i + targetFrom) { return(false); } } return(true); } bool VerifyColorIDMigration(int targetFromA, int targetFromB) { for (int i = 0; i < 5; i++) { if (normalBlocks[i].Color1ID != i + targetFromA) { return(false); } if (normalBlocks[i].Color2ID != i + targetFromB) { return(false); } } for (int i = 0; i < 5; i++) { if (colorTriggers[i].TargetColorID != i + targetFromA) { return(false); } if (colorTriggers[i].CopiedColorID != i + targetFromB) { return(false); } } return(true); } bool VerifyItemIDMigration(int targetFrom) { for (int i = 0; i < 5; i++) { if (pickupItems[i].TargetItemID != i + targetFrom) { return(false); } } for (int i = 0; i < 5; i++) { if (pickupTriggers[i].TargetItemID != i + targetFrom) { return(false); } } return(true); } bool VerifyBlockIDMigration(int targetFromA, int targetFromB) { for (int i = 0; i < 5; i++) { if (collisionBlocks[i].BlockID != i + targetFromA) { return(false); } } for (int i = 0; i < 5; i++) { if (collisionTriggers[i].PrimaryBlockID != i + targetFromA) { return(false); } if (collisionTriggers[i].SecondaryBlockID != i + targetFromB) { return(false); } } return(true); } } } }
public void IDMigration() { var step0 = new SourceTargetRange(1, 5, 6); // 1 - 5 > 6 - 10 var step1 = new SourceTargetRange(21, 25, 46); // 21 - 25 > 46 - 50 var step2 = new SourceTargetRange(1, 25, 26); // 1 - 25 > 26 - 50 var step3 = new SourceTargetRange(8, 8, 10); // 8 > 10 ReinitializeLevelStuff(); migrationEditor.PerformGroupIDMigration(new List <SourceTargetRange> { step0 }); VerifyGroupIDMigration(step0.TargetFrom); migrationEditor.PerformColorIDMigration(new List <SourceTargetRange> { step2 }); VerifyColorIDMigration(step2.TargetFrom, step1.TargetFrom); migrationEditor.PerformItemIDMigration(new List <SourceTargetRange> { step0 }); VerifyItemIDMigration(step0.TargetFrom); migrationEditor.PerformBlockIDMigration(new List <SourceTargetRange> { step1 }); VerifyBlockIDMigration(step0.SourceFrom, step1.TargetFrom); // TODO: Add more test steps with multiple step ID migrations void VerifyGroupIDMigration(int offset) { for (int i = 0; i < 5; i++) { Assert.AreEqual(i + offset, normalBlocks[i].GetGroupID(0)); Assert.AreEqual(i + offset, moveTriggers[i].TargetGroupID); Assert.AreEqual(i + offset, instantCountTriggers[i].TargetGroupID); Assert.AreEqual(i + offset, collisionTriggers[i].TargetGroupID); } } void VerifyColorIDMigration(int offsetA, int offsetB) { for (int i = 0; i < 5; i++) { Assert.AreEqual(i + offsetA, normalBlocks[i].Color1ID); Assert.AreEqual(i + offsetB, normalBlocks[i].Color2ID); Assert.AreEqual(i + offsetA, colorTriggers[i].TargetColorID); Assert.AreEqual(i + offsetB, colorTriggers[i].CopiedColorID); } for (int i = 26; i <= 50; i++) { int origin = i - 25; Assert.AreEqual(i, level.ColorChannels[i].CopiedColorID); Assert.AreEqual(i, level.ColorChannels[i].ColorChannelID); Assert.AreEqual(origin, level.ColorChannels[origin].ColorChannelID); } } void VerifyItemIDMigration(int offset) { for (int i = 0; i < 5; i++) { Assert.AreEqual(i + offset, pickupItems[i].TargetItemID); Assert.AreEqual(i + offset, pickupTriggers[i].TargetItemID); } } void VerifyBlockIDMigration(int offsetA, int offsetB) { for (int i = 0; i < 5; i++) { Assert.AreEqual(i + offsetA, collisionBlocks[i].BlockID); Assert.AreEqual(i + offsetA, collisionTriggers[i].PrimaryBlockID); Assert.AreEqual(i + offsetB, collisionTriggers[i].SecondaryBlockID); } } }