void TradingSignalMomentum::addMomentum() { QTableWidgetItem* instrument = new QTableWidgetItem(ui->instrument_text->text()); QTableWidgetItem* volume = new QTableWidgetItem(ui->volume_text->text()); QTableWidgetItem* change = new QTableWidgetItem(ui->change_text->text()); ui->tableWidget->insertRow(ui->tableWidget->rowCount()); ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 0, instrument); ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 1, volume); ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 2, change); emit newMomentum(ui->instrument_text->text(), ui->volume_text->text(), ui->change_text->text()); ui->instrument_text->clear(); ui->volume_text->clear(); ui->change_text->clear(); }
void Physics::update() { for (TilePhysics* tile : tiles) { Vector2 tilePos = Vector2(tile->getTransform().getWorldPosition()); tile->setMomentum(tile->getMomentum() + (ftime->getDeltaTime() * tile->getAcceleration())); Vector2 tileNewPos = tilePos + (ftime->getDeltaTime() * tile->getMomentum()); for (TilePhysics* testingTile : tiles) { if (testingTile == tile) continue; Vector2 testingTilePos = Vector2(testingTile->getTransform().getWorldPosition()); Vector2 testingMin = testingTilePos - Vector2(testingTile->getSize() / 2.f); Vector2 testingMax = testingTilePos + Vector2(testingTile->getSize() / 2.f); if (tileNewPos.x > testingMin.x && tileNewPos.x < testingMax.x && tileNewPos.y > testingMin.y && tileNewPos.y < testingMax.y) { if (tile->getMass() != 0) { Vector2 separation = tileNewPos - testingTilePos; Vector2 normal; if (abs(separation.x) > abs(separation.y)) { if (separation.x < 0) normal = Vector2(-1, 0); else normal = Vector2(1, 0); } else { if (separation.y < 0) normal = Vector2(0, -1); else normal = Vector2(0, 1); } Vector2 newMomentum(tile->getMomentum() - (2 * tile->getMomentum().dot(normal) * normal)); if (normal.x == 0) { newMomentum.y *= tile->getBounciness() + testingTile->getBounciness(); } else { newMomentum.x *= tile->getBounciness() + testingTile->getBounciness(); } tile->setMomentum(newMomentum); tile->setAcceleration(newMomentum.normalized() * tile->getAcceleration().lenght()); } tile->setMomentum(Vector2(0)); tile->setAcceleration(Vector2(0)); } } tile->getTransform().setPosition(Vector3(tileNewPos.x, tileNewPos.y, 0.f)); } }