From 8719ee8b5817854795c13167ea25d49b66991e63 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 7 Jan 2016 14:48:46 +0100 Subject: [PATCH] Test scenario for SetGraphics() Scenario that tests SetGraphics() in various ways: Setting graphics of meshes/sprites to other objects, overlaying objects onto other objects. The scenario is not in the Issues.ocf folder, because it addresses multiple issues #1458 and #1538 and the status of the issues has not been acknowledged yet. --- planet/Tests.ocf/OverlayTest.ocs/Scenario.txt | 5 + planet/Tests.ocf/OverlayTest.ocs/Script.c | 206 ++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 planet/Tests.ocf/OverlayTest.ocs/Scenario.txt create mode 100644 planet/Tests.ocf/OverlayTest.ocs/Script.c diff --git a/planet/Tests.ocf/OverlayTest.ocs/Scenario.txt b/planet/Tests.ocf/OverlayTest.ocs/Scenario.txt new file mode 100644 index 000000000..e888597f5 --- /dev/null +++ b/planet/Tests.ocf/OverlayTest.ocs/Scenario.txt @@ -0,0 +1,5 @@ +[Head] +Title=Object Overlays + +[Landscape] +NoScan=1 \ No newline at end of file diff --git a/planet/Tests.ocf/OverlayTest.ocs/Script.c b/planet/Tests.ocf/OverlayTest.ocs/Script.c new file mode 100644 index 000000000..7a872da9b --- /dev/null +++ b/planet/Tests.ocf/OverlayTest.ocs/Script.c @@ -0,0 +1,206 @@ +func Initialize() +{ + var effect = AddEffect("IntOverlayTest", nil, 1, 10); +} + +public func InitializePlayer(int player) +{ + var crew = GetCrew(player); + crew->SetPosition(50, 200); +} + +global func FxIntOverlayTestTimer(object target, proplist effect, int timer) +{ + if (effect.delay) { effect.delay--; return FX_OK;} + + if (!effect.initialized) return InitializeTest(effect); + if (!effect.test1) return TestSequence001(effect); + if (!effect.test2) return TestSequence002(effect); + if (!effect.test3) return TestSequence003(effect); + if (!effect.test4) return TestSequence004(effect); + if (!effect.test5) return TestSequence005(effect); + if (!effect.test6) return TestSequence006(effect); + if (!effect.test7) return TestSequence007(effect); + if (!effect.test8) return TestSequence008(effect); + if (!effect.test9) return TestSequence009(effect); + if (!effect.test10) return TestSequence010(effect); +} + +global func InitializeTest(proplist effect) +{ + // objects + effect.dummy1 = CreateObject(Dummy, 100, LandscapeHeight() / 2); + effect.dummy2 = CreateObject(Dummy, 200, LandscapeHeight() / 2); + effect.dummy3 = CreateObject(Dummy, 300, LandscapeHeight() / 2); + effect.dummy4 = CreateObject(Dummy, 10, LandscapeHeight() / 2); // object with sprite graphics + effect.dummy5 = CreateObject(Dummy, 20, LandscapeHeight() / 2); // object with mesh graphics + + // visibility + effect.dummy1.Visibility = VIS_All; + effect.dummy2.Visibility = VIS_All; + effect.dummy3.Visibility = VIS_All; + effect.dummy4.Visibility = VIS_All; + effect.dummy5.Visibility = VIS_All; + + // done + effect.initialized = true; + return FX_OK; +} + +global func TestSequence001(proplist effect) +{ + var graphics = Amethyst; + effect.dummy1->SetShape(-64, -64, 128, 128); + effect.dummy1->SetGraphics(nil, graphics); + effect.dummy1->Message("This object should use the following graphics {{%i}}", graphics); + effect.delay = 15; + effect.test1 = true; + return FX_OK; +} + +global func TestSequence002(proplist effect) +{ + var graphics = Loam; + effect.dummy2->SetShape(-5, -5, 11, 11); + effect.dummy2->SetGraphics(nil, graphics); + effect.dummy2->Message("This object should use the following graphics {{%i}}", graphics); + effect.delay = 15; + effect.test2 = true; + return FX_OK; +} + +global func TestSequence003(proplist effect) +{ + var graphics = Cloth; + effect.dummy3->SetShape(-64, -64, 128, 128); + effect.dummy3->SetGraphics(nil, graphics); + effect.dummy3->Message("This object should use the following graphics {{%i}}", graphics); + effect.delay = 15; + effect.test3 = true; + return FX_OK; +} + +global func TestSequence004(proplist effect) +{ + var graphics = GoldBar; + effect.dummy4->SetShape(-5, -2, 10, 4); + effect.dummy4->SetGraphics(nil, graphics); + effect.dummy4->Message("This object should use the following graphics {{%i}}", graphics); + effect.delay = 15; + effect.test4 = true; + return FX_OK; +} + +global func TestSequence005(proplist effect) +{ + var graphics = Hammer; + effect.dummy5->SetShape(-4, -6, 8, 12); + effect.dummy5->SetGraphics(nil, Hammer); + effect.dummy5->SetGraphics(nil, graphics); + effect.dummy5->Message("This object should use the following graphics {{%i}}", graphics); + effect.delay = 15; + effect.test5 = true; + return FX_OK; +} + +global func TestSequence006(proplist effect) +{ + // the effect.dummy2 object gets a lot of overlays + effect.dummy2->SetGraphics(nil, Firestone, 1, GFXOV_MODE_Base); // sprite graphics as overlay + effect.dummy2->SetGraphics(nil, Axe, 2, GFXOV_MODE_Base); // mesh graphics as overlay + effect.dummy2->SetGraphics(nil, nil, 3, GFXOV_MODE_Object, nil, nil, effect.dummy4); // sprite graphics from other object + effect.dummy2->SetGraphics(nil, nil, 4, GFXOV_MODE_Object, nil, nil, effect.dummy5); // mesh graphics from other object + effect.dummy2->SetObjDrawTransform(1000, 0, -10000, 0, 1000, -32000, 0); + effect.dummy2->SetObjDrawTransform(1000, 0, -10000, 0, 1000, -24000, 1); + effect.dummy2->SetObjDrawTransform(1000, 0, -10000, 0, 1000, -16000, 2); + effect.dummy2->SetObjDrawTransform(1000, 0, -10000, 0, 1000, -8000, 3); + effect.dummy2->SetObjDrawTransform(1000, 0, -10000, 0, 1000, 0, 4); + effect.dummy2->Message("This object should have the graphics in this order now:|{{Loam}}|{{Firestone}}|{{Axe}}|{{GoldBar}}|{{Hammer}}"); + effect.dummy4->Message("*!*"); + effect.dummy5->Message("*!*"); + effect.delay = 25; + effect.test6 = true; + return FX_OK; +} + +global func TestSequence007(proplist effect) +{ + // the effect.dummy1 object gets the effect.dummy2 as object overlay + effect.dummy1->SetGraphics(nil, nil, 1, GFXOV_MODE_Object, nil, nil, effect.dummy2); + effect.dummy1->Message("Should have the graphics of Nr.2 as overlay now"); + effect.dummy2->Message("> Nr.2"); + effect.test7 = true; + effect.delay = 15; + return FX_OK; +} + +global func TestSequence008(proplist effect) +{ + // the effect.dummy3 object gets the effect.dummy2 as object overlay + effect.dummy3->SetGraphics(nil, nil, 1, GFXOV_MODE_Object, nil, nil, effect.dummy2); + effect.dummy3->Message("Should have the graphics of Nr.2 as overlay now"); + effect.dummy2->Message("> Nr.2"); + effect.test8 = true; + effect.delay = 15; + return FX_OK; +} + +global func TestSequence009(proplist effect) +{ + // remove old objects + effect.dummy1->RemoveObject(); + effect.dummy2->RemoveObject(); + effect.dummy3->RemoveObject(); + effect.dummy4->RemoveObject(); + effect.dummy5->RemoveObject(); + + // objects + effect.dummy1 = CreateObject(Rock, 100, LandscapeHeight() / 2); + effect.dummy2 = CreateObject(Rock, 200, LandscapeHeight() / 2); + effect.dummy3 = CreateObject(Rock, 300, LandscapeHeight() / 2); + effect.dummy4 = CreateObject(Rock, 10, LandscapeHeight() / 2); // object with sprite graphics + effect.dummy5 = CreateObject(Rock, 20, LandscapeHeight() / 2); // object with mesh graphics + + // done + effect.test9 = true; + effect.test1 = false; + effect.test2 = false; + effect.test3 = false; + effect.test4 = false; + effect.test5 = false; + effect.test6 = false; + effect.test7 = false; + effect.test8 = false; + effect.delay = 10; + return FX_OK; +} + +global func TestSequence010(proplist effect) +{ + // remove old objects + effect.dummy1->RemoveObject(); + effect.dummy2->RemoveObject(); + effect.dummy3->RemoveObject(); + effect.dummy4->RemoveObject(); + effect.dummy5->RemoveObject(); + + // objects + effect.dummy1 = CreateObject(Hammer, 100, LandscapeHeight() / 2); + effect.dummy2 = CreateObject(Hammer, 200, LandscapeHeight() / 2); + effect.dummy3 = CreateObject(Hammer, 300, LandscapeHeight() / 2); + effect.dummy4 = CreateObject(Hammer, 10, LandscapeHeight() / 2); // object with sprite graphics + effect.dummy5 = CreateObject(Hammer, 20, LandscapeHeight() / 2); // object with mesh graphics + + // done + effect.test10 = true; + effect.test1 = false; + effect.test2 = false; + effect.test3 = false; + effect.test4 = false; + effect.test5 = false; + effect.test6 = false; + effect.test7 = false; + effect.test8 = false; + effect.delay = 10; + return FX_OK; +}