Files
OpenBK7231T_App/src/sim/Controller_Pot.cpp

63 lines
1.7 KiB
C++

#ifdef WINDOWS
#include "Controller_Pot.h"
#include "Shape.h"
#include "Junction.h"
#include "Text.h"
CControllerPot::CControllerPot(class CJunction *_a, class CJunction *_b, class CJunction *_o) {
a = _a;
b = _b;
o = _o;
frac = 0.5f;
posA.set(-180, -60);
posB.set(160, -60);
}
class CControllerBase *CControllerPot::cloneController(class CShape *origOwner, class CShape *newOwner) {
CControllerPot *r = new CControllerPot();
r->posA = posA;
r->posB = posB;
r->frac = frac;
r->mover = newOwner->findShapeByName_r(this->mover->getName());
r->a = newOwner->findShapeByName_r(this->a->getName())->asJunction();
r->b = newOwner->findShapeByName_r(this->b->getName())->asJunction();
r->o = newOwner->findShapeByName_r(this->o->getName())->asJunction();
r->display = newOwner->findShapeByName_r(this->display->getName())->asText();
return r;
}
class CJunction *CControllerPot::findOtherJunctionIfPassable(class CJunction *ju) {
return 0;
}
void CControllerPot::rotateDegreesAround(float f, const Coord &p) {
posA = posA.rotateDegreesAround(f, p);
posB = posB.rotateDegreesAround(f, p);
}
void CControllerPot::sendEvent(int code, const class Coord &mouseOfs) {
// could be way better with some math
frac += mouseOfs.getX()*0.005f;
if (frac < 0)
frac = 0;
if (frac > 1)
frac = 1;
}
void CControllerPot::onDrawn() {
if (a->getVisitCount() > 0 && b->getVisitCount() > 0) {
float aVal = a->getVoltage();
float bVal = b->getVoltage();
float fin = aVal + (bVal - aVal) * frac;
o->setCurrentSource(true);
o->setVoltage(fin);
o->setVisitCount(1);
display->setTextf("%f", fin);
}
else {
o->setCurrentSource(false);
o->setVoltage(0);
display->setTextf("Not connected");
}
mover->setPosition(posA.lerp(posB, frac));
}
#endif