Individual point modification.

master
sigonasr2 1 year ago
parent 2a229aaa13
commit 67f2bf2318
  1. 2
      TiledCollisionEditor/TiledCollisionEditor.vcxproj
  2. 44
      TiledCollisionEditor/main.cpp

@ -104,7 +104,7 @@
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<LanguageStandard>stdcpp20</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>

@ -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<float>(point,view.ScreenToWorld(GetMousePos())).length()<4){
if(GetMouse(Mouse::LEFT).bPressed){
editingPoint=pointInd;
editingQuad=const_cast<Quadrilateral*>(&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<Quadrilateral*>(&obj.collisionTiles.back());
originalQuad=*editingQuad;
}
dragging=true;
editingQuad=const_cast<Quadrilateral*>(&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<float>(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);
}
}
}
}

Loading…
Cancel
Save