1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-09-18 16:32:32 +02:00
openrw/tests/test_pickup.cpp

96 lines
2.7 KiB
C++
Raw Normal View History

#include <boost/test/unit_test.hpp>
#include <data/WeaponData.hpp>
#include <objects/CharacterObject.hpp>
2016-09-09 22:13:22 +02:00
#include <objects/ItemPickup.hpp>
#include <objects/PickupObject.hpp>
#include "test_globals.hpp"
2016-09-09 22:13:22 +02:00
class TestPickup : public PickupObject {
public:
2016-09-09 22:13:22 +02:00
bool picked_up = false;
2016-09-09 22:13:22 +02:00
TestPickup(GameWorld* engine, const glm::vec3& position)
: PickupObject(engine, position, 0, OnStreet) {
}
2016-09-09 22:13:22 +02:00
bool onCharacterTouch(CharacterObject* character) {
picked_up = true;
return true;
}
};
BOOST_AUTO_TEST_SUITE(PickupTests)
#if RW_TEST_WITH_DATA
2016-09-09 22:13:22 +02:00
BOOST_AUTO_TEST_CASE(test_pickup_interaction) {
{
auto character =
Global::get().e->createPedestrian(1, {30.1f, 0.f, 0.f});
BOOST_REQUIRE(character != nullptr);
2016-09-09 22:13:22 +02:00
TestPickup* p = new TestPickup(Global::get().e, {30.f, 0.f, 0.f});
2016-09-09 22:13:22 +02:00
// Global::get().e->insertObject(p);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(!p->picked_up);
2016-09-09 22:13:22 +02:00
Global::get().e->dynamicsWorld->stepSimulation(0.016f);
p->tick(0.f);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(p->picked_up);
2016-09-09 22:13:22 +02:00
p->picked_up = false;
2016-09-09 22:13:22 +02:00
BOOST_CHECK(!p->picked_up);
2016-09-09 22:13:22 +02:00
Global::get().e->dynamicsWorld->stepSimulation(0.016f);
p->tick(0.f);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(!p->picked_up);
2016-09-09 22:13:22 +02:00
Global::get().e->dynamicsWorld->stepSimulation(0.016f);
p->tick(60.5f);
2016-09-09 22:13:22 +02:00
BOOST_CHECK(p->picked_up);
2016-09-09 22:13:22 +02:00
Global::get().e->destroyObject(p);
Global::get().e->destroyObject(character);
}
}
2016-09-09 22:13:22 +02:00
BOOST_AUTO_TEST_CASE(test_item_pickup) {
{
auto character =
Global::get().e->createPedestrian(1, {30.1f, 0.f, 0.f});
BOOST_REQUIRE(character != nullptr);
auto pistol = Global::get().d->weaponData[1].get();
auto model = Global::get().d->modelinfo[pistol->modelID].get();
ItemPickup* p = new ItemPickup(Global::get().e, {30.f, 0.f, 0.f}, model,
PickupObject::OnStreet, pistol);
2016-09-09 22:13:22 +02:00
Global::get().e->allObjects.push_back(p);
2016-09-09 22:13:22 +02:00
// Check the characters inventory is empty.
for (int i = 0; i < kMaxInventorySlots; ++i) {
2016-09-09 22:13:22 +02:00
BOOST_CHECK(character->getCurrentState().weapons[i].weaponId == 0);
}
2016-09-09 22:13:22 +02:00
Global::get().e->dynamicsWorld->stepSimulation(0.016f);
p->tick(0.f);
2016-09-09 22:13:22 +02:00
auto& inventory = character->getCurrentState().weapons;
BOOST_CHECK(std::any_of(std::begin(inventory), std::end(inventory),
[&](const CharacterWeaponSlot& i) {
return i.weaponId == pistol->inventorySlot;
2016-09-09 22:13:22 +02:00
}));
2016-09-09 22:13:22 +02:00
Global::get().e->destroyObject(p);
Global::get().e->destroyObject(character);
}
}
#endif
BOOST_AUTO_TEST_SUITE_END()