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);
+ }
+ }
}
}