diff --git a/source/ps/GameSetup/GameSetup.cpp b/source/ps/GameSetup/GameSetup.cpp index 3a9b1c3cf6..4d1e241032 100644 --- a/source/ps/GameSetup/GameSetup.cpp +++ b/source/ps/GameSetup/GameSetup.cpp @@ -26,6 +26,7 @@ #include "lib/file/common/file_stats.h" #include "lib/res/h_mgr.h" +#include "graphics/Canvas2D.h" #include "graphics/CinemaManager.h" #include "graphics/Color.h" #include "graphics/GameView.h" @@ -265,7 +266,8 @@ void Render() // If we're in Atlas game view, render special overlays (e.g. editor bandbox). if (g_AtlasGameLoop && g_AtlasGameLoop->view) { - g_AtlasGameLoop->view->DrawOverlays(); + CCanvas2D canvas; + g_AtlasGameLoop->view->DrawOverlays(canvas); ogl_WarnIfError(); } diff --git a/source/tools/atlas/GameInterface/View.cpp b/source/tools/atlas/GameInterface/View.cpp index 298d481980..8d2c71f14e 100644 --- a/source/tools/atlas/GameInterface/View.cpp +++ b/source/tools/atlas/GameInterface/View.cpp @@ -24,10 +24,10 @@ #include "Messages.h" #include "SimState.h" +#include "graphics/Canvas2D.h" #include "graphics/CinemaManager.h" #include "graphics/GameView.h" #include "graphics/ParticleManager.h" -#include "graphics/SColor.h" #include "graphics/UnitManager.h" #include "lib/timer.h" #include "lib/utf8.h" @@ -37,10 +37,10 @@ #include "ps/World.h" #include "renderer/DebugRenderer.h" #include "renderer/Renderer.h" -#include "simulation2/Simulation2.h" #include "simulation2/components/ICmpObstructionManager.h" #include "simulation2/components/ICmpParticleManager.h" #include "simulation2/components/ICmpPathfinder.h" +#include "simulation2/Simulation2.h" #include "soundmanager/ISoundManager.h" extern void (*Atlas_GLSwapBuffers)(void* context); @@ -253,47 +253,28 @@ void AtlasViewGame::DrawCinemaPathTool() glEnable(GL_DEPTH_TEST); } -void AtlasViewGame::DrawOverlays() +void AtlasViewGame::DrawOverlays(CCanvas2D& canvas) { -#if CONFIG2_GLES -#warning TODO: implement Atlas game overlays for GLES -#else - if (m_BandboxArray.empty()) + if (m_Bandbox.left >= m_Bandbox.right || m_Bandbox.top >= m_Bandbox.bottom) return; - // Set up transform for overlays - glMatrixMode(GL_PROJECTION); - glPushMatrix(); - glLoadIdentity(); - glMatrixMode(GL_MODELVIEW); - glPushMatrix(); - glLoadIdentity(); - CMatrix3D transform; - transform.SetIdentity(); - transform.Scale(1.0f, -1.f, 1.0f); - transform.Translate(0.0f, (float)g_yres, -1000.0f); - CMatrix3D proj; - proj.SetOrtho(0.f, (float)g_xres, 0.f, (float)g_yres, -1.f, 1000.f); - transform = proj * transform; - glLoadMatrixf(&transform._11); + const std::vector outerPoints = { + m_Bandbox.TopLeft() + CVector2D(-1.0f, -1.0f), + m_Bandbox.TopRight() + CVector2D(1.0f, -1.0f), + m_Bandbox.BottomRight() + CVector2D(1.0f, 1.0f), + m_Bandbox.BottomLeft() + CVector2D(-1.0f, 1.0f), + m_Bandbox.TopLeft() + CVector2D(-1.0f, -1.0f) + }; + canvas.DrawLine(outerPoints, 1.5f, CColor(0.0f, 0.0f, 0.0f, 1.0f)); - glEnableClientState(GL_COLOR_ARRAY); - glEnableClientState(GL_VERTEX_ARRAY); - - // Render bandbox as array of lines - glVertexPointer(2, GL_FLOAT, sizeof(SBandboxVertex), &m_BandboxArray[0].x); - glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(SBandboxVertex), &m_BandboxArray[0].r); - - glDrawArrays(GL_LINES, 0, m_BandboxArray.size()); - - glDisableClientState(GL_VERTEX_ARRAY); - glDisableClientState(GL_COLOR_ARRAY); - - glMatrixMode(GL_PROJECTION); - glPopMatrix(); - glMatrixMode(GL_MODELVIEW); - glPopMatrix(); -#endif + const std::vector innerPoints = { + m_Bandbox.TopLeft(), + m_Bandbox.TopRight(), + m_Bandbox.BottomRight(), + m_Bandbox.BottomLeft(), + m_Bandbox.TopLeft() + }; + canvas.DrawLine(innerPoints, 1.5f, CColor(1.0f, 1.0f, 1.0f, 1.0f)); } void AtlasViewGame::SetParam(const std::wstring& name, bool value) @@ -413,8 +394,6 @@ std::wstring AtlasViewGame::DumpState(bool binary) void AtlasViewGame::SetBandbox(bool visible, float x0, float y0, float x1, float y1) { - m_BandboxArray.clear(); - if (visible) { // Make sure corners are arranged in correct order @@ -423,24 +402,11 @@ void AtlasViewGame::SetBandbox(bool visible, float x0, float y0, float x1, float if (y0 > y1) std::swap(y0, y1); - // Bandbox is draw as lines comprising two rectangles - SBandboxVertex vert[] = { - // Black - outer rectangle - SBandboxVertex(x0, y0, 0, 0, 0, 255), SBandboxVertex(x1, y0, 0, 0, 0, 255), SBandboxVertex(x1, y1, 0, 0, 0, 255), SBandboxVertex(x0, y1, 0, 0, 0, 255), - // White - inner rectangle - SBandboxVertex(x0+1.0f, y0+1.0f, 255, 255, 255, 255), SBandboxVertex(x1-1.0f, y0+1.0f, 255, 255, 255, 255), SBandboxVertex(x1-1.0f, y1-1.0f, 255, 255, 255, 255), SBandboxVertex(x0+1.0f, y1-1.0f, 255, 255, 255, 255) - }; - - for (size_t i = 0; i < 4; ++i) - { - m_BandboxArray.push_back(vert[i]); - m_BandboxArray.push_back(vert[(i+1)%4]); - } - for (size_t i = 0; i < 4; ++i) - { - m_BandboxArray.push_back(vert[i+4]); - m_BandboxArray.push_back(vert[(i+1)%4+4]); - } + m_Bandbox = CRect(x0, y0, x1, y1); + } + else + { + m_Bandbox = CRect{}; } } diff --git a/source/tools/atlas/GameInterface/View.h b/source/tools/atlas/GameInterface/View.h index 8c6db2f5a3..455da88fb3 100644 --- a/source/tools/atlas/GameInterface/View.h +++ b/source/tools/atlas/GameInterface/View.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2017 Wildfire Games. +/* Copyright (C) 2021 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -21,10 +21,12 @@ #include #include "graphics/Camera.h" +#include "maths/Rect.h" #include "Messages.h" #include "simulation2/system/Entity.h" +class CCanvas2D; class CUnit; class CSimulation2; @@ -41,7 +43,7 @@ public: virtual void Update(float UNUSED(realFrameLength)) { }; virtual void Render() { }; virtual void DrawCinemaPathTool() { }; - virtual void DrawOverlays() { }; + virtual void DrawOverlays(CCanvas2D& UNUSED(canvas)) { }; virtual CCamera& GetCamera() = 0; virtual CSimulation2* GetSimulation2() { return NULL; } virtual entity_id_t GetEntityId(AtlasMessage::ObjectID obj) { return (entity_id_t)obj; } @@ -89,7 +91,7 @@ public: virtual void Update(float realFrameLength); virtual void Render(); virtual void DrawCinemaPathTool(); - virtual void DrawOverlays(); + virtual void DrawOverlays(CCanvas2D& canvas); virtual CCamera& GetCamera(); virtual CSimulation2* GetSimulation2(); virtual bool WantsHighFramerate(); @@ -111,14 +113,7 @@ private: std::map m_SavedStates; std::string m_DisplayPassability; - typedef struct SBandboxVertex - { - SBandboxVertex(float x, float y, u8 r, u8 g, u8 b, u8 a) : x(x), y(y), r(r), g(g), b(b), a(a) {} - u8 r, g, b, a; - float x, y; - } SBandboxVertex; - - std::vector m_BandboxArray; + CRect m_Bandbox; bool m_DrawMoveTool; CVector3D m_MoveTool; };