MCPcopy Create free account
hub / github.com/OpenStarbound/OpenStarbound / validateTileModification

Function validateTileModification

source/game/StarWorldImpl.hpp:365–385  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

363
364 template <typename GetTileFunction>
365 pair<bool, bool> validateTileModification(EntityMapPtr const& entityMap, Vec2I const& pos, TileModification const& modification, bool allowEntityOverlap, GetTileFunction& getTile) {
366 bool good = false;
367 bool perhaps = false;
368
369 if (auto placeMaterial = modification.ptr<PlaceMaterial>()) {
370 bool allowTileOverlap = placeMaterial->collisionOverride != TileCollisionOverride::None && collisionKindFromOverride(placeMaterial->collisionOverride) < CollisionKind::Dynamic;
371 perhaps = WorldImpl::perhapsCanPlaceMaterial(entityMap, pos, placeMaterial->layer, placeMaterial->material, allowEntityOverlap, allowTileOverlap, getTile);
372 if (perhaps)
373 good = WorldImpl::canPlaceMaterial(entityMap, pos, placeMaterial->layer, placeMaterial->material, allowEntityOverlap, allowTileOverlap, getTile);
374 } else if (auto placeMod = modification.ptr<PlaceMod>()) {
375 good = WorldImpl::canPlaceMod(pos, placeMod->layer, placeMod->mod, getTile);
376 } else if (auto placeMaterialColor = modification.ptr<PlaceMaterialColor>()) {
377 good = WorldImpl::canPlaceMaterialColorVariant(pos, placeMaterialColor->layer, placeMaterialColor->color, getTile);
378 } else if (modification.is<PlaceLiquid>()) {
379 good = getTile(pos).collision == CollisionKind::None;
380 } else {
381 good = false;
382 }
383
384 return { good, perhaps };
385 }
386
387 inline bool validateTileReplacement(TileModification const& modification) {
388 if (auto placeMaterial = modification.ptr<PlaceMaterial>()) {

Callers 2

splitTileModificationsFunction · 0.85

Calls 5

perhapsCanPlaceMaterialFunction · 0.85
canPlaceMaterialFunction · 0.85
canPlaceModFunction · 0.85

Tested by

no test coverage detected