public bool CanBeWalked(byte avoidDamageType = 0) { return(!CreatureIds.Any() && Ground != null && !Ground.IsPathBlocking(avoidDamageType) && !TopItems1.Any(i => i.IsPathBlocking(avoidDamageType)) && !TopItems2.Any(i => i.IsPathBlocking(avoidDamageType)) && !DownItems.Any(i => i.IsPathBlocking(avoidDamageType))); }
public IThing GetThingAtStackPosition(byte stackPosition) { if (stackPosition == 0 && Ground != null) { return(Ground); } var currentPos = Ground == null ? -1 : 0; if (stackPosition > currentPos + _topItems1OnTile.Count) { currentPos += _topItems1OnTile.Count; } else { foreach (var item in TopItems1) { if (++currentPos == stackPosition) { return(item); } } } if (stackPosition > currentPos + _topItems2OnTile.Count) { currentPos += _topItems2OnTile.Count; } else { foreach (var item in TopItems2) { if (++currentPos == stackPosition) { return(item); } } } if (stackPosition > currentPos + _creatureIdsOnTile.Count) { currentPos += _creatureIdsOnTile.Count; } else { foreach (var creatureId in CreatureIds) { if (++currentPos == stackPosition) { return(Game.Instance.GetCreatureWithId(creatureId)); } } } return(stackPosition <= currentPos + _downItemsOnTile.Count ? DownItems.FirstOrDefault(item => ++ currentPos == stackPosition) : null); }