1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-11-23 02:42:39 +01:00

Move blip object lookup and make arrows work again.

This commit is contained in:
Daniel Evans 2016-05-26 21:49:26 +01:00
parent 50cf4293e4
commit 6422c8ae97
4 changed files with 26 additions and 17 deletions

View File

@ -24,6 +24,7 @@ class VehicleObject;
#include <render/VisualFX.hpp>
#include <data/ObjectData.hpp>
struct BlipData;
class InventoryItem;
struct WeaponScan;
@ -215,6 +216,13 @@ public:
std::vector<PlayerController*> players;
/**
* @brief getBlipTarget
* @param blip
* @return The targetted object of the given blip
*/
GameObject *getBlipTarget(const BlipData &blip) const;
/**
* Stores objects within a grid cell, and their maximum
* bounding radius

View File

@ -513,6 +513,21 @@ GameWorld::ObjectPool& GameWorld::getTypeObjectPool(GameObject* object)
}
}
GameObject*GameWorld::getBlipTarget(const BlipData& blip) const
{
switch( blip.type )
{
case BlipData::Vehicle:
return vehiclePool.find(blip.target);
case BlipData::Character:
return pedestrianPool.find(blip.target);
case BlipData::Pickup:
return pickupPool.find(blip.target);
default:
return nullptr;
}
}
void GameWorld::destroyObject(GameObject* object)
{
auto coord = worldToGrid(glm::vec2(object->getPosition()));

View File

@ -381,13 +381,11 @@ void GameRenderer::renderWorld(GameWorld* world, const ViewCamera &camera, float
if( blip.second.target > 0 )
{
// TODO restore arrows
/*auto& pool = world->getTypeObjectPool(blip.second.target);
auto object = pool.find(blip.second.target);
auto object = world->getBlipTarget(blip.second);
if( object )
{
model = object->getTimeAdjustedTransform( _renderAlpha );
}*/
}
}
else
{

View File

@ -169,19 +169,7 @@ void MapRenderer::draw(GameWorld* world, const MapInfo& mi)
glm::vec2 blippos( blip.second.coord );
if( blip.second.target > 0 )
{
GameObject* object = nullptr;
switch( blip.second.type ) {
case BlipData::Vehicle:
object = world->vehiclePool.find(blip.second.target);
break;
case BlipData::Character:
object = world->pedestrianPool.find(blip.second.target);
break;
case BlipData::Pickup:
object = world->pickupPool.find(blip.second.target);
break;
default: break;
}
GameObject* object = world->getBlipTarget(blip.second);
if( object )
{
blippos = glm::vec2( object->getPosition() );