From 67f2bf23184b104cc2e3ba133f16c25fb3994855 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Thu, 14 Mar 2024 17:46:36 -0500 Subject: [PATCH] Individual point modification. --- .../TiledCollisionEditor.vcxproj | 2 +- TiledCollisionEditor/main.cpp | 44 +++++++++++++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/TiledCollisionEditor/TiledCollisionEditor.vcxproj b/TiledCollisionEditor/TiledCollisionEditor.vcxproj index e7f2814..0e6c677 100644 --- a/TiledCollisionEditor/TiledCollisionEditor.vcxproj +++ b/TiledCollisionEditor/TiledCollisionEditor.vcxproj @@ -104,7 +104,7 @@ true _DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - stdcpp17 + stdcpp20 Console diff --git a/TiledCollisionEditor/main.cpp b/TiledCollisionEditor/main.cpp index f486ed1..9f85cd3 100644 --- a/TiledCollisionEditor/main.cpp +++ b/TiledCollisionEditor/main.cpp @@ -1,3 +1,4 @@ +#include "olcUTIL_Geometry2D.h" #include "TSXParser.h" #include "olcPGEX_TransformedView.h" #include "olcUTIL_Camera2D.h" @@ -19,6 +20,8 @@ class TiledCollisionEditor : public olc::PixelGameEngine int editingPoint=4; //0-3 for the index we are editing within editingQuad. bool dragging=false; + Renderable circle; + TransformedView view; public: @@ -34,6 +37,13 @@ public: { SetFontSprite("font3.png"); + circle.Create(5,5); + SetDrawTarget(circle.Sprite()); + Clear(BLANK); + FillCircle({2,2},2); + SetDrawTarget(nullptr); + circle.Decal()->Update(); + std::string tilesetFilename=TILESET_DIR+"Basic Tileset.tsx"; Tileset&tileset=tilesets[tilesetFilename]=TSXParser{tilesetFilename}.GetData(); @@ -122,6 +132,21 @@ public: } if(GetMouse(Mouse::LEFT).bPressed){ + #pragma region Select a point on a collision quad. + for(const Quadrilateral&quad:obj.collisionTiles){ + for(size_t pointInd=0;const vf2d&point:quad){ + if(geom2d::line(point,view.ScreenToWorld(GetMousePos())).length()<4){ + if(GetMouse(Mouse::LEFT).bPressed){ + editingPoint=pointInd; + editingQuad=const_cast(&quad); + } + goto exitCollisionCheck; + } + pointInd++; + } + } + exitCollisionCheck: + #pragma endregion if(EditingQuad&&!dragging){ (*editingQuad)[editingPoint]=GetSnapPoint(); editingPoint++; @@ -129,10 +154,10 @@ public: if(obj.collisionTiles.size()==0){ Quadrilateral newQuad{GetSnapPoint()}; tilesets[activeTileset].objects[selectedObj].collisionTiles.push_back(newQuad); + dragging=true; + editingQuad=const_cast(&obj.collisionTiles.back()); + originalQuad=*editingQuad; } - dragging=true; - editingQuad=const_cast(&obj.collisionTiles.back()); - originalQuad=*editingQuad; } } @@ -144,6 +169,10 @@ public: (*editingQuad)[2]=GetSnapPoint(); (*editingQuad)[3]=vf2d{initialPoint.x,cursorPos.y}; dragging=false; + }else + if(EditingQuad&&!dragging){ + (*editingQuad)[editingPoint]=GetSnapPoint(); + editingPoint=4; } } @@ -164,6 +193,15 @@ public: uvs.assign(4,{0.f,0.f}); cols.assign(4,{255,40,40,128}); view.DrawPolygonDecal(nullptr,points,uvs,cols); + + for(bool highlighted=false;const vf2d&point:quad){ + if(geom2d::line(point,view.ScreenToWorld(GetMousePos())).length()<4&&!highlighted){ + view.DrawRotatedDecal(point,circle.Decal(),0.f,circle.Sprite()->Size()/2,{1.f,1.f},YELLOW); + highlighted=true; + }else{ + view.DrawRotatedDecal(point,circle.Decal(),0.f,circle.Sprite()->Size()/2,{1.f,1.f},RED); + } + } } }