void Pulley::Grab(SGD::Point _p) { if (GameplayState::GetInstance()->GetMovementOff()) { r->GetParticleAt(0)->SetCurrPosition({ _p.x, _p.y - 16.0f }); r->GetParticleAt(0)->SetFixed(true); } else { r->GetParticleAt(index)->SetFixed(false); for (int i = r->GetNumberOfParticles() - 1; i >= 0; i--) { if (r->GetParticleAt(i)->GetFixed() && i > 11) { r->GetParticleAt(0)->SetFixed(false); if (i == r->GetNumberOfParticles() - 1) { r->GetParticleAt(0)->SetCurrPosition({ _p.x, _p.y - 16.0f }); break; } r->GetParticleAt(0)->SetCurrPosition({ _p.x, _p.y - 16.0f }); r->GetParticleAt(i - 3)->SetCurrPosition({ r->GetParticleAt(i - 2)->GetCurrPosition().x, r->GetParticleAt(i - 2)->GetCurrPosition().y }); r->GetParticleAt(i - 2)->SetCurrPosition({ r->GetParticleAt(i - 1)->GetCurrPosition().x, r->GetParticleAt(i - 1)->GetCurrPosition().y }); r->GetParticleAt(i - 1)->SetCurrPosition({ r->GetParticleAt(i)->GetCurrPosition().x, r->GetParticleAt(i)->GetCurrPosition().y }); r->GetParticleAt(i - 3)->SetFixed(true); r->GetParticleAt(i)->SetFixed(false); if (i == 12) {r->GetParticleAt(19)->SetCurrPosition({ GetPoint3().x, GetPoint3().y + 150.0f }); r->GetParticleAt(19)->SetFixed(true); } } } index = 0; } }
void BezierSegment::Append (moon_path *path) { Point *p1 = GetPoint1 (); Point *p2 = GetPoint2 (); Point *p3 = GetPoint3 (); double x1 = p1 ? p1->x : 0.0; double y1 = p1 ? p1->y : 0.0; double x2 = p2 ? p2->x : 0.0; double y2 = p2 ? p2->y : 0.0; double x3 = p3 ? p3->x : 0.0; double y3 = p3 ? p3->y : 0.0; moon_curve_to (path, x1, y1, x2, y2, x3, y3); }
Pulley::Pulley(int length, int numberOfPartciles, SGD::Vector location) { index = 0; r = new Rope(length, numberOfPartciles, location); SetPoint1({ r->GetParticleAt(10)->GetCurrPosition().x-100.0f, r->GetParticleAt(10)->GetCurrPosition().y -100.0f }); SetPoint2({ r->GetParticleAt(10)->GetCurrPosition().x, r->GetParticleAt(10)->GetCurrPosition().y - 200.0f }); SetPoint3({ r->GetParticleAt(10)->GetCurrPosition().x+50.0f, r->GetParticleAt(10)->GetCurrPosition().y - 180.0f }); r->GetParticleAt(9)->SetFixed(true); r->GetParticleAt(10)->SetFixed(true); r->GetParticleAt(11)->SetFixed(true); r->GetParticleAt(9)->SetCurrPosition(GetPoint1()); r->GetParticleAt(10)->SetCurrPosition(GetPoint2()); r->GetParticleAt(11)->SetCurrPosition(GetPoint3()); r->GetParticleAt(19)->SetMass(800.0f); r->GetParticleAt(0)->SetCurrPosition({ r->GetParticleAt(9)->GetCurrPosition().x-100.0f, r->GetParticleAt(9)->GetCurrPosition().y + 150.0f }); r->GetParticleAt(19)->SetCurrPosition({ r->GetParticleAt(11)->GetCurrPosition().x +150.0f, r->GetParticleAt(11)->GetCurrPosition().y + 150.0f }); }