1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-12 22:02:49 +01:00
openrw/tests/test_weapon.cpp

119 lines
3.8 KiB
C++
Raw Normal View History

#include <boost/test/unit_test.hpp>
#include <data/WeaponData.hpp>
2016-09-09 22:13:22 +02:00
#include <objects/CharacterObject.hpp>
#include <objects/ProjectileObject.hpp>
2016-09-09 22:13:22 +02:00
#include "test_globals.hpp"
BOOST_AUTO_TEST_SUITE(WeaponTests)
#if RW_TEST_WITH_DATA
2016-09-09 22:13:22 +02:00
BOOST_AUTO_TEST_CASE(TestWeaponScan) {
{
// Test RADIUS scan
auto character = Global::get().e->createPedestrian(1, {0.f, 0.f, 0.f});
BOOST_REQUIRE(character != nullptr);
BOOST_REQUIRE(character->model != nullptr);
BOOST_REQUIRE(character->physObject != nullptr);
2016-09-09 22:13:22 +02:00
WeaponScan scan(10.f, {0.f, 0.f, 10.f}, {0.f, 0.f, -10.f});
2016-09-09 22:13:22 +02:00
Global::get().e->doWeaponScan(scan);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().health < 100.f);
2014-06-28 18:20:49 +02:00
2016-09-09 22:13:22 +02:00
Global::get().e->destroyObject(character);
}
}
2016-09-09 22:13:22 +02:00
BOOST_AUTO_TEST_CASE(TestProjectile) {
{
auto character = Global::get().e->createPedestrian(1, {25.f, 0.f, 0.f});
BOOST_REQUIRE(character != nullptr);
2016-09-09 22:13:22 +02:00
auto wepdata = Global::get().e->data->weaponData[5];
2016-09-09 22:13:22 +02:00
auto projectile = new ProjectileObject(
Global::get().e, {26.f, 1.f, 10.f},
{ProjectileObject::Grenade, {0.f, 0.f, -1.f}, 2.0f, 5.0f, wepdata});
2016-09-09 22:13:22 +02:00
Global::get().e->allObjects.push_back(projectile);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().health == 100.f);
2016-09-09 22:13:22 +02:00
for (float t = 0.f; t <= 5.f; t += 0.016f) {
Global::get().e->dynamicsWorld->stepSimulation(0.016f, 0, 0);
projectile->tick(0.016f);
}
2016-09-09 22:13:22 +02:00
BOOST_CHECK_LT(
glm::distance(character->getPosition(), projectile->getPosition()),
10.f);
BOOST_CHECK_LT(
glm::distance(character->getPosition(), projectile->getPosition()),
5.f);
2016-09-09 22:13:22 +02:00
// Grenade should have dentonated by this point
BOOST_CHECK(character->getCurrentState().health < 100.f);
2016-09-09 22:13:22 +02:00
Global::get().e->destroyObjectQueued(character);
Global::get().e->destroyQueuedObjects();
}
2016-09-09 22:13:22 +02:00
{
auto character = Global::get().e->createPedestrian(1, {25.f, 0.f, 0.f});
BOOST_REQUIRE(character != nullptr);
2016-09-09 22:13:22 +02:00
auto wepdata = Global::get().e->data->weaponData[6];
2016-09-09 22:13:22 +02:00
auto projectile = new ProjectileObject(
Global::get().e, {26.f, 1.f, 10.f},
{ProjectileObject::Molotov, {0.f, 0.f, -1.f}, 2.0f, 10.f, wepdata});
2016-09-09 22:13:22 +02:00
Global::get().e->allObjects.push_back(projectile);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().health == 100.f);
2016-09-09 22:13:22 +02:00
for (float t = 0.f; t <= 9.0f; t += 0.016f) {
Global::get().e->dynamicsWorld->stepSimulation(0.016f, 0, 0);
projectile->tick(0.016f);
}
2016-09-09 22:13:22 +02:00
BOOST_CHECK(projectile->getPosition().z < 10.f);
BOOST_CHECK(projectile->getPosition().z > 0.f);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().health < 100.f);
2016-09-09 22:13:22 +02:00
Global::get().e->destroyObjectQueued(character);
Global::get().e->destroyQueuedObjects();
}
{
auto character = Global::get().e->createPedestrian(1, {25.f, 0.f, 0.f});
BOOST_REQUIRE(character != nullptr);
2016-09-09 22:13:22 +02:00
auto wepdata = Global::get().e->data->weaponData[7];
2016-09-09 22:13:22 +02:00
auto projectile = new ProjectileObject(
Global::get().e, {26.f, 1.f, 10.f},
{ProjectileObject::RPG, {0.f, 0.f, -1.f}, 2.0f, 10.f, wepdata});
2016-09-09 22:13:22 +02:00
Global::get().e->allObjects.push_back(projectile);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().health == 100.f);
2016-09-09 22:13:22 +02:00
for (float t = 0.f; t <= 9.f; t += 0.016f) {
Global::get().e->dynamicsWorld->stepSimulation(0.016f, 0, 0);
projectile->tick(0.016f);
}
2016-09-09 22:13:22 +02:00
BOOST_CHECK(projectile->getPosition().z < 10.f);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().health < 100.f);
2016-09-09 22:13:22 +02:00
Global::get().e->destroyObjectQueued(character);
Global::get().e->destroyQueuedObjects();
}
}
#endif
BOOST_AUTO_TEST_SUITE_END()