From ac5f6db3f612b8492100ca161f3718cd502d0fc2 Mon Sep 17 00:00:00 2001 From: adazem009 <68537469+adazem009@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:37:27 +0100 Subject: [PATCH] fix #458: Use Target instead of Sprite for graphic effects --- src/blocks/looksblocks.cpp | 102 +++++++++++++++--------------- test/blocks/looks_blocks_test.cpp | 92 +++++++++++++-------------- 2 files changed, 97 insertions(+), 97 deletions(-) diff --git a/src/blocks/looksblocks.cpp b/src/blocks/looksblocks.cpp index eda7fe4b..4d553499 100644 --- a/src/blocks/looksblocks.cpp +++ b/src/blocks/looksblocks.cpp @@ -537,11 +537,11 @@ unsigned int LooksBlocks::hide(VirtualMachine *vm) unsigned int LooksBlocks::changeEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) { + if (target) { IGraphicsEffect *effect = m_customGraphicsEffects[vm->getInput(0, 2)->toLong()]; - sprite->setGraphicsEffectValue(effect, sprite->graphicsEffectValue(effect) + vm->getInput(1, 2)->toDouble()); + target->setGraphicsEffectValue(effect, target->graphicsEffectValue(effect) + vm->getInput(1, 2)->toDouble()); } return 2; @@ -549,160 +549,160 @@ unsigned int LooksBlocks::changeEffectBy(VirtualMachine *vm) unsigned int LooksBlocks::changeColorEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_colorEffect, sprite->graphicsEffectValue(m_colorEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_colorEffect, target->graphicsEffectValue(m_colorEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::changeFisheyeEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_fisheyeEffect, sprite->graphicsEffectValue(m_fisheyeEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_fisheyeEffect, target->graphicsEffectValue(m_fisheyeEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::changeWhirlEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_whirlEffect, sprite->graphicsEffectValue(m_whirlEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_whirlEffect, target->graphicsEffectValue(m_whirlEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::changePixelateEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_pixelateEffect, sprite->graphicsEffectValue(m_pixelateEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_pixelateEffect, target->graphicsEffectValue(m_pixelateEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::changeMosaicEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_mosaicEffect, sprite->graphicsEffectValue(m_mosaicEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_mosaicEffect, target->graphicsEffectValue(m_mosaicEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::changeBrightnessEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_brightnessEffect, sprite->graphicsEffectValue(m_brightnessEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_brightnessEffect, target->graphicsEffectValue(m_brightnessEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::changeGhostEffectBy(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_ghostEffect, sprite->graphicsEffectValue(m_ghostEffect) + vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_ghostEffect, target->graphicsEffectValue(m_ghostEffect) + vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_customGraphicsEffects[vm->getInput(0, 2)->toLong()], vm->getInput(1, 2)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_customGraphicsEffects[vm->getInput(0, 2)->toLong()], vm->getInput(1, 2)->toDouble()); return 2; } unsigned int LooksBlocks::setColorEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_colorEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_colorEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setFisheyeEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_fisheyeEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_fisheyeEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setWhirlEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_whirlEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_whirlEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setPixelateEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_pixelateEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_pixelateEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setMosaicEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_mosaicEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_mosaicEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setBrightnessEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_brightnessEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_brightnessEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::setGhostEffectTo(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->setGraphicsEffectValue(m_ghostEffect, vm->getInput(0, 1)->toDouble()); + if (target) + target->setGraphicsEffectValue(m_ghostEffect, vm->getInput(0, 1)->toDouble()); return 1; } unsigned int LooksBlocks::clearGraphicEffects(VirtualMachine *vm) { - Sprite *sprite = dynamic_cast(vm->target()); + Target *target = vm->target(); - if (sprite) - sprite->clearGraphicsEffects(); + if (target) + target->clearGraphicsEffects(); return 0; } diff --git a/test/blocks/looks_blocks_test.cpp b/test/blocks/looks_blocks_test.cpp index 3abc1ec8..9057051a 100644 --- a/test/blocks/looks_blocks_test.cpp +++ b/test/blocks/looks_blocks_test.cpp @@ -472,12 +472,12 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) GraphicsEffectMock effect1, effect2; - Sprite sprite; - sprite.setGraphicsEffectValue(&effect1, 12.5); - sprite.setGraphicsEffectValue(&effect2, -100.48); + Target target; + target.setGraphicsEffectValue(&effect1, 12.5); + target.setGraphicsEffectValue(&effect2, -100.48); // custom1 - VirtualMachine vm(&sprite, nullptr, nullptr); + VirtualMachine vm(&target, nullptr, nullptr); LooksBlocks::m_customGraphicsEffects.clear(); LooksBlocks::m_customGraphicsEffects.push_back(&effect1); vm.setBytecode(bytecode1); @@ -486,7 +486,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 67.65); + ASSERT_EQ(target.graphicsEffectValue(&effect1), 67.65); // custom2 LooksBlocks::m_customGraphicsEffects.push_back(&effect2); @@ -495,17 +495,17 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(&effect2), -141.02); + ASSERT_EQ(target.graphicsEffectValue(&effect2), -141.02); // Initialize graphics effects initEffects(); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color"), 12.4); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye"), -8.45); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl"), 50.15); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate"), -45.21); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic"), 0.2); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness"), -0.01); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost"), 45.78); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color"), 12.4); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye"), -8.45); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl"), 50.15); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate"), -45.21); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic"), 0.2); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness"), -0.01); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost"), 45.78); // color vm.reset(); @@ -513,7 +513,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color")), 13.6); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color")), 13.6); // fisheye vm.reset(); @@ -521,7 +521,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(std::round(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye")) * 100) / 100, -6.15); + ASSERT_EQ(std::round(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye")) * 100) / 100, -6.15); // whirl vm.reset(); @@ -529,7 +529,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl")), 46.75); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl")), 46.75); // pixelate vm.reset(); @@ -537,7 +537,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate")), -49.71); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate")), -49.71); // mosaic vm.reset(); @@ -545,7 +545,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic")), 0.7); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic")), 0.7); // brightness vm.reset(); @@ -553,7 +553,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(std::round(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness")) * 100) / 100, -8.55); + ASSERT_EQ(std::round(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness")) * 100) / 100, -8.55); // ghost vm.reset(); @@ -561,7 +561,7 @@ TEST_F(LooksBlocksTest, ChangeEffectByImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost")), 45.79); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost")), 45.79); removeEffects(); } @@ -748,12 +748,12 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) GraphicsEffectMock effect1, effect2; - Sprite sprite; - sprite.setGraphicsEffectValue(&effect1, 12.5); - sprite.setGraphicsEffectValue(&effect2, -100.48); + Target target; + target.setGraphicsEffectValue(&effect1, 12.5); + target.setGraphicsEffectValue(&effect2, -100.48); // custom1 - VirtualMachine vm(&sprite, nullptr, nullptr); + VirtualMachine vm(&target, nullptr, nullptr); LooksBlocks::m_customGraphicsEffects.clear(); LooksBlocks::m_customGraphicsEffects.push_back(&effect1); vm.setBytecode(bytecode1); @@ -762,7 +762,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 55.15); + ASSERT_EQ(target.graphicsEffectValue(&effect1), 55.15); // custom2 LooksBlocks::m_customGraphicsEffects.push_back(&effect2); @@ -771,17 +771,17 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(&effect2), -40.54); + ASSERT_EQ(target.graphicsEffectValue(&effect2), -40.54); // Initialize graphics effects initEffects(); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color"), 12.4); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye"), -8.45); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl"), 50.15); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate"), -45.21); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic"), 0.2); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness"), -0.01); - sprite.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost"), 45.78); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color"), 12.4); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye"), -8.45); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl"), 50.15); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate"), -45.21); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic"), 0.2); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness"), -0.01); + target.setGraphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost"), 45.78); // color vm.reset(); @@ -789,7 +789,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color")), 1.2); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("color")), 1.2); // fisheye vm.reset(); @@ -797,7 +797,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye")), 2.3); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("fisheye")), 2.3); // whirl vm.reset(); @@ -805,7 +805,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl")), -3.4); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("whirl")), -3.4); // pixelate vm.reset(); @@ -813,7 +813,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate")), -4.5); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("pixelate")), -4.5); // mosaic vm.reset(); @@ -821,7 +821,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic")), 0.5); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("mosaic")), 0.5); // brightness vm.reset(); @@ -829,7 +829,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness")), -8.54); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("brightness")), -8.54); // ghost vm.reset(); @@ -837,7 +837,7 @@ TEST_F(LooksBlocksTest, SetEffectToImpl) vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost")), 0.01); + ASSERT_EQ(target.graphicsEffectValue(ScratchConfiguration::getGraphicsEffect("ghost")), 0.01); removeEffects(); } @@ -864,19 +864,19 @@ TEST_F(LooksBlocksTest, ClearGraphicEffectsImpl) static unsigned int bytecode[] = { vm::OP_START, vm::OP_EXEC, 0, vm::OP_HALT }; static BlockFunc functions[] = { &LooksBlocks::clearGraphicEffects }; - Sprite sprite; + Target target; GraphicsEffectMock effect1, effect2; - sprite.setGraphicsEffectValue(&effect1, 48.21); - sprite.setGraphicsEffectValue(&effect2, -107.08); + target.setGraphicsEffectValue(&effect1, 48.21); + target.setGraphicsEffectValue(&effect2, -107.08); - VirtualMachine vm(&sprite, nullptr, nullptr); + VirtualMachine vm(&target, nullptr, nullptr); vm.setBytecode(bytecode); vm.setFunctions(functions); vm.run(); ASSERT_EQ(vm.registerCount(), 0); - ASSERT_EQ(sprite.graphicsEffectValue(&effect1), 0); - ASSERT_EQ(sprite.graphicsEffectValue(&effect2), 0); + ASSERT_EQ(target.graphicsEffectValue(&effect1), 0); + ASSERT_EQ(target.graphicsEffectValue(&effect2), 0); } TEST_F(LooksBlocksTest, ChangeSizeBy)