fix covered issues
This commit is contained in:
parent
7a12312220
commit
3e841cd7b6
|
@ -37,6 +37,10 @@ Item::Item() : Thing()
|
|||
|
||||
ItemPtr Item::create(int id)
|
||||
{
|
||||
if(id < g_thingsType.getFirstItemId() || id > g_thingsType.getMaxItemid()) {
|
||||
logTraceError("invalid item id ", id);
|
||||
return nullptr;
|
||||
}
|
||||
ItemPtr item = ItemPtr(new Item);
|
||||
item->setId(id);
|
||||
return item;
|
||||
|
|
|
@ -337,9 +337,6 @@ bool Map::isCovered(const Position& pos, int firstFloor)
|
|||
// the below tile is covered when the above tile has a full ground
|
||||
if(tile && tile->isFullGround())
|
||||
return true;
|
||||
|
||||
if(tilePos.z == 0)
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -352,7 +349,7 @@ bool Map::isCompletelyCovered(const Position& pos, int firstFloor)
|
|||
// check in 2x2 range tiles that has no transparent pixels
|
||||
for(int x=0;x<2;++x) {
|
||||
for(int y=0;y<2;++y) {
|
||||
TilePtr tile = m_tiles[tilePos + Position(-x, -y, 0)];
|
||||
const TilePtr& tile = getTile(tilePos.translated(-x, -y));
|
||||
if(!tile || !tile->isFullyOpaque()) {
|
||||
covered = false;
|
||||
break;
|
||||
|
|
|
@ -76,8 +76,6 @@ void MapView::draw(const Rect& rect)
|
|||
|
||||
if(m_mustDrawVisibleTilesCache || animate) {
|
||||
m_framebuffer->bind(m_mustCleanFramebuffer);
|
||||
if(m_mustCleanFramebuffer)
|
||||
m_mustCleanFramebuffer = false;
|
||||
|
||||
for(const TilePtr& tile : m_cachedVisibleTiles) {
|
||||
tile->draw(transformPositionTo2D(tile->getPosition()), scaleFactor, tileDrawFlags);
|
||||
|
@ -181,7 +179,8 @@ void MapView::updateVisibleTilesCache(int start)
|
|||
m_mustCleanFramebuffer = true;
|
||||
m_mustDrawVisibleTilesCache = true;
|
||||
m_mustUpdateVisibleTilesCache = false;
|
||||
}
|
||||
} else
|
||||
m_mustCleanFramebuffer = false;
|
||||
|
||||
// there is no tile to render on invalid positions
|
||||
Position cameraPosition = getCameraPosition();
|
||||
|
@ -227,7 +226,7 @@ void MapView::updateVisibleTilesCache(int start)
|
|||
if(tile->isEmpty())
|
||||
continue;
|
||||
// skip tiles that are completely behind another tile
|
||||
if(g_map.isCompletelyCovered(tilePos, m_cachedLastVisibleFloor))
|
||||
if(g_map.isCompletelyCovered(tilePos, m_cachedFirstVisibleFloor))
|
||||
continue;
|
||||
m_cachedVisibleTiles.push_back(tile);
|
||||
}
|
||||
|
@ -323,9 +322,6 @@ void MapView::updateVisibleTilesCache(int start)
|
|||
// skip tiles that have nothing
|
||||
if(tile->isEmpty())
|
||||
continue;
|
||||
// skip tiles that are completely behind another tile
|
||||
if(g_map.isCompletelyCovered(tilePos, m_cachedLastVisibleFloor))
|
||||
continue;
|
||||
m_cachedVisibleTiles.push_back(tile);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,6 +69,7 @@ public:
|
|||
// type related
|
||||
bool isGround() { return m_type->properties[ThingType::IsGround]; }
|
||||
bool isFullGround() { return m_type->properties[ThingType::IsFullGround]; }
|
||||
bool isTranslucent() { return m_type->properties[ThingType::IsTranslucent]; }
|
||||
bool isGroundBorder() { return m_type->properties[ThingType::IsGroundBorder]; }
|
||||
bool isOnBottom() { return m_type->properties[ThingType::IsOnBottom]; }
|
||||
bool isOnTop() { return m_type->properties[ThingType::IsOnTop]; }
|
||||
|
|
|
@ -49,6 +49,9 @@ public:
|
|||
uint32 getSignature() { return m_signature; }
|
||||
bool isLoaded() { return m_loaded; }
|
||||
|
||||
int getFirstItemId() { return 100; }
|
||||
int getMaxItemid() { return m_things[Item].size() + 100 - 1; }
|
||||
|
||||
private:
|
||||
uint32 m_signature;
|
||||
Boolean<false> m_loaded;
|
||||
|
|
|
@ -114,6 +114,8 @@ void OTClient::registerLuaFunctions()
|
|||
g_lua.bindClassMemberFunction<Thing>("isPickupable", &Thing::isPickupable);
|
||||
g_lua.bindClassMemberFunction<Thing>("isIgnoreLook", &Thing::isIgnoreLook);
|
||||
g_lua.bindClassMemberFunction<Thing>("isStackable", &Thing::isStackable);
|
||||
g_lua.bindClassMemberFunction<Thing>("isTranslucent", &Thing::isTranslucent);
|
||||
g_lua.bindClassMemberFunction<Thing>("isFullGround", &Thing::isFullGround);
|
||||
|
||||
g_lua.registerClass<Creature, Thing>();
|
||||
g_lua.bindClassMemberFunction<Creature>("getName", &Creature::getName);
|
||||
|
|
Loading…
Reference in New Issue