diff --git a/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp b/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp new file mode 100644 index 0000000..4e4c8ac --- /dev/null +++ b/OneLoneCoder_PGE_ExtensionTestGFX2D.cpp @@ -0,0 +1,183 @@ +/* + OneLoneCoder_PGE_ExtensionTestGFX2D.cpp + + + License (OLC-3) + ~~~~~~~~~~~~~~~ + + Copyright 2018 OneLoneCoder.com + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions or derivations of source code must retain the above + copyright notice, this list of conditions and the following disclaimer. + + 2. Redistributions or derivative works in binary form must reproduce + the above copyright notice. This list of conditions and the following + disclaimer must be reproduced in the documentation and/or other + materials provided with the distribution. + + 3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + Links + ~~~~~ + YouTube: https://www.youtube.com/javidx9 + Discord: https://discord.gg/WhwHUMV + Twitter: https://www.twitter.com/javidx9 + Twitch: https://www.twitch.tv/javidx9 + GitHub: https://www.github.com/onelonecoder + Homepage: https://www.onelonecoder.com + + Author + ~~~~~~ + David Barr, aka javidx9, ŠOneLoneCoder 2018 +*/ + +// Include the olcPixelGameEngine +#include "olcPixelGameEngine.h" + +// To use an extension, just include it +#include "olcPGEX_Graphics2D.h" + +class TestExtension : public olc::PixelGameEngine +{ +public: + TestExtension() + { + sAppName = "Testing Graphics2D"; + } + +public: + bool OnUserCreate() override + { + for (int i = 0; i < 16; i++) + listEvents.push_back(""); + + spr = new olc::Sprite("logo_long.png"); + + return true; + } + + std::list listEvents; + float fTotalTime = 0.0f; + olc::Sprite *spr; + + bool OnUserUpdate(float fElapsedTime) override + { + // Clear Screen + SetPixelMode(olc::Pixel::NORMAL); + Clear(olc::BLUE); + + // Draw Primitives + DrawCircle(32, 32, 30); // Circle + DrawCircle(96, 32, 30); // Circle + + + float mx = GetMouseX(); + float my = GetMouseY(); + + float px1 = mx - 32, px2 = mx - 96; + float py1 = my - 32, py2 = my - 32; + float pr1 = 1.0f / sqrtf(px1*px1 + py1*py1); + float pr2 = 1.0f / sqrtf(px2*px2 + py2*py2); + px1 = 22.0f * (px1 * pr1) + 32.0f; + py1 = 22.0f * (py1 * pr1) + 32.0f; + px2 = 22.0f * (px2 * pr2) + 96.0f; + py2 = 22.0f * (py2 * pr2) + 32.0f; + FillCircle(px1, py1, 8, olc::CYAN); + FillCircle(px2, py2, 8, olc::CYAN); + + DrawLine(10, 70, 54, 70); // Lines + DrawLine(54, 70, 70, 54); + + DrawRect(10, 80, 54, 30); + FillRect(10, 80, 54, 30); + + // Multiline Text + std::string mpos = "Your Mouse Position is:\nX=" + std::to_string(mx) + "\nY=" + std::to_string(my); + DrawString(10, 130, mpos); + + auto AddEvent = [&](std::string s) + { + listEvents.push_back(s); + listEvents.pop_front(); + }; + + if (GetMouse(0).bPressed) AddEvent("Mouse Button 0 Down"); + if (GetMouse(0).bReleased) AddEvent("Mouse Button 0 Up"); + if (GetMouse(1).bPressed) AddEvent("Mouse Button 1 Down"); + if (GetMouse(1).bReleased) AddEvent("Mouse Button 1 Up"); + if (GetMouse(2).bPressed) AddEvent("Mouse Button 2 Down"); + if (GetMouse(2).bReleased) AddEvent("Mouse Button 2 Up"); + + + // Draw Event Log + int nLog = 0; + for (auto &s : listEvents) + { + DrawString(200, nLog * 8 + 20, s, olc::Pixel(nLog * 16, nLog * 16, nLog * 16)); + nLog++; + } + + + // Test Text scaling and colours + DrawString(0, 360, "Text Scale = 1", olc::WHITE, 1); + DrawString(0, 368, "Text Scale = 2", olc::BLUE, 2); + DrawString(0, 384, "Text Scale = 3", olc::RED, 3); + DrawString(0, 408, "Text Scale = 4", olc::YELLOW, 4); + DrawString(0, 440, "Text Scale = 5", olc::GREEN, 5); + + fTotalTime += fElapsedTime; + + float fAngle = fTotalTime; + + // Draw Sprite using extension, first create a transformation stack + olc::GFX2D::Transform2D t1; + + // Traslate sprite so center of image is at 0,0 + t1.Translate(-250, -35); + // Scale the sprite + t1.Scale(1 * sinf(fAngle) + 1, 1 * sinf(fAngle) + 1); + // Rotate it + t1.Rotate(fAngle*2.0f); + // Translate to 0,100 + t1.Translate(0, 100); + // Rotate different speed + t1.Rotate(fAngle / 3); + // Translate to centre of screen + t1.Translate(320, 240); + + SetPixelMode(olc::Pixel::ALPHA); + + // Use extension to draw sprite with transform applied + olc::GFX2D::DrawSprite(spr, t1); + + return true; + } +}; + + +int main() +{ + TestExtension demo; + if (demo.Construct(640, 480, 2, 2)) + demo.Start(); + + return 0; +} \ No newline at end of file diff --git a/logo_long.png b/logo_long.png new file mode 100644 index 0000000..e4ca5b3 Binary files /dev/null and b/logo_long.png differ