Rework to weak_ptr from lots of shared_ptr.
This commit is contained in:
+5
-35
@@ -3,35 +3,19 @@
|
||||
#include "draggable.h"
|
||||
#include "vmath.h"
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace VISEQ::BASE {
|
||||
class Connectable : public Draggable, public std::enable_shared_from_this<Connectable> {
|
||||
class Connectable : public Draggable {
|
||||
public:
|
||||
Connectable() {}
|
||||
Connectable(Vec2Df position) : Draggable(position) {}
|
||||
virtual ~Connectable() {remove();}
|
||||
|
||||
inline static std::vector<std::shared_ptr<Connectable>> connectables;
|
||||
|
||||
std::shared_ptr<Connectable> partner;
|
||||
|
||||
std::weak_ptr<Connectable> partner;
|
||||
|
||||
bool new_partner = false;
|
||||
bool connecting = false;
|
||||
Vec2Df connecting_position;
|
||||
|
||||
std::shared_ptr<Connectable> getPtr(){
|
||||
return shared_from_this();
|
||||
}
|
||||
|
||||
virtual void init() {
|
||||
VISEQ::BASE::Connectable::connectables.emplace_back(this);
|
||||
}
|
||||
|
||||
virtual void remove() {
|
||||
std::cout << "delete Connectable: " << getPtr() << std::endl;
|
||||
// std::erase(VISEQ::BASE::Connectable::connectables, getPtr());
|
||||
}
|
||||
|
||||
|
||||
virtual void drag(Vec2Df new_position) override {
|
||||
connecting = true;
|
||||
connecting_position = new_position;
|
||||
@@ -44,22 +28,8 @@ namespace VISEQ::BASE {
|
||||
|
||||
virtual void connect() {
|
||||
if(picked_up){
|
||||
std::cout << getPtr() << std::endl;
|
||||
std::cout << "connect use count: " << getPtr().use_count() << std::endl;
|
||||
for(auto c : connectables){
|
||||
if(c != getPtr() && c->hovering()) {
|
||||
partner = c;
|
||||
c->partner = getPtr();
|
||||
new_partner = true;
|
||||
partner->new_partner = true;
|
||||
std::cout << "connect use count: " << getPtr().use_count() << std::endl;
|
||||
std::cout << connectables.size() << std::endl;
|
||||
break;
|
||||
}
|
||||
}
|
||||
connecting = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
virtual void draw(){
|
||||
|
||||
Reference in New Issue
Block a user