From 610b90440f3f88622f8fd5224152b1a96d25a86a Mon Sep 17 00:00:00 2001 From: Javidx9 <25419386+OneLoneCoder@users.noreply.github.com> Date: Mon, 24 Sep 2018 22:25:21 +0100 Subject: [PATCH] Added Example file for Advanced 2D GFX Extension --- OneLoneCoder_PGE_ExtensionTestGFX2D.cpp | 183 ++++++++++++++++++++++++ logo_long.png | Bin 0 -> 3664 bytes 2 files changed, 183 insertions(+) create mode 100644 OneLoneCoder_PGE_ExtensionTestGFX2D.cpp create mode 100644 logo_long.png 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 0000000000000000000000000000000000000000..e4ca5b3ba2f68c69c56d7b3fc2dc069f30be2dad GIT binary patch literal 3664 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 literal 0 HcmV?d00001