| 144 | : m_worldServer(w), m_materialDatabase(Root::singleton().materialDatabase()) {} |
| 145 | |
| 146 | FallingBlockType FallingBlocksWorld::blockType(Vec2I const& pos) { |
| 147 | auto const& tile = m_worldServer->getServerTile(pos, true); |
| 148 | if (tile.rootSource) { |
| 149 | return FallingBlockType::Immovable; |
| 150 | } if (tile.foreground == EmptyMaterialId) { |
| 151 | if (m_worldServer->tileIsOccupied(pos, TileLayer::Foreground)) |
| 152 | return FallingBlockType::Immovable; |
| 153 | else |
| 154 | return FallingBlockType::Open; |
| 155 | } else if (m_materialDatabase->isCascadingFallingMaterial(tile.foreground)) { |
| 156 | return FallingBlockType::Cascading; |
| 157 | } else if (m_materialDatabase->isFallingMaterial(tile.foreground)) { |
| 158 | return FallingBlockType::Falling; |
| 159 | } else { |
| 160 | return FallingBlockType::Immovable; |
| 161 | } |
| 162 | } |
| 163 | |
| 164 | void FallingBlocksWorld::moveBlock(Vec2I const& from, Vec2I const& to) { |
| 165 | auto fromTile = m_worldServer->modifyServerTile(from, true); |
no test coverage detected