summaryrefslogtreecommitdiff
path: root/src/interface/Sandbox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interface/Sandbox.cpp')
-rw-r--r--src/interface/Sandbox.cpp58
1 files changed, 42 insertions, 16 deletions
diff --git a/src/interface/Sandbox.cpp b/src/interface/Sandbox.cpp
index 5e29bae..a9f1d9c 100644
--- a/src/interface/Sandbox.cpp
+++ b/src/interface/Sandbox.cpp
@@ -6,9 +6,11 @@
*/
#include <iostream>
+#include <queue>
#include "Config.h"
+#include "interface/Point.h"
#include "interface/Sandbox.h"
#include "interface/Component.h"
#include "Renderer.h"
@@ -17,7 +19,8 @@
namespace ui {
Sandbox::Sandbox():
- Component(0, 0, XRES, YRES),
+ Component(Point(0, 0), Point(XRES, YRES)),
+ pointQueue(std::queue<Point*>()),
ren(NULL),
isMouseDown(false),
activeElement(1)
@@ -30,35 +33,33 @@ Simulation * Sandbox::GetSimulation()
return sim;
}
-void Sandbox::OnMouseMovedInside(int localx, int localy, int dx, int dy)
+void Sandbox::OnMouseMoved(int localx, int localy, int dx, int dy)
{
if(isMouseDown)
{
- sim->create_line(lastCoordX, lastCoordY, localx, localy, 2, 2, activeElement, 0);
- lastCoordX = localx;
- lastCoordY = localy;
+ pointQueue.push(new Point(localx-dx, localy-dy));
+ pointQueue.push(new Point(localx, localy));
}
}
-void Sandbox::OnMouseDown(int localx, int localy, unsigned int button)
+void Sandbox::OnMouseClick(int localx, int localy, unsigned int button)
{
- sim->create_line(localx, localy, localx, localy, 2, 2, activeElement, 0);
- lastCoordX = localx;
- lastCoordY = localy;
isMouseDown = true;
+ pointQueue.push(new Point(localx, localy));
}
-void Sandbox::OnMouseUp(int localx, int localy, unsigned int button)
+void Sandbox::OnMouseUnclick(int localx, int localy, unsigned int button)
{
- sim->create_line(lastCoordX, lastCoordY, localx, localy, 2, 2, activeElement, 0);
- lastCoordX = localx;
- lastCoordY = localy;
- isMouseDown = false;
+ if(isMouseDown)
+ {
+ isMouseDown = false;
+ pointQueue.push(new Point(localx, localy));
+ }
}
-void Sandbox::Draw(void* userdata)
+void Sandbox::Draw(const Point& screenPos)
{
- Graphics * g = reinterpret_cast<Graphics*>(userdata);
+ Graphics * g = ui::Engine::Ref().g;
if(!ren)
ren = new Renderer(g, sim);
ren->render_parts();
@@ -66,7 +67,32 @@ void Sandbox::Draw(void* userdata)
void Sandbox::Tick(float delta)
{
+ if(!pointQueue.empty())
+ {
+ Point * sPoint = NULL;
+ while(!pointQueue.empty())
+ {
+ Point * fPoint = pointQueue.front();
+ pointQueue.pop();
+ if(sPoint)
+ {
+ sim->create_line(fPoint->X, fPoint->Y, sPoint->X, sPoint->Y, 2, 2, activeElement, 0);
+ delete sPoint;
+ sPoint = fPoint;
+ }
+ else
+ {
+ sim->create_parts(fPoint->X, fPoint->Y, 2, 2, activeElement, 0);
+ }
+ if(sPoint)
+ delete sPoint;
+ sPoint = fPoint;
+ }
+ if(sPoint)
+ delete sPoint;
+ }
sim->update_particles();
+ sim->sys_pause = 1;
}
Sandbox::~Sandbox() {