Park/Buildings/Building.Errors.cs
using System;

namespace HC3;

public record BuildingError( string Message );

public partial class Building : IGridObjectEvent, ITintMaskEvents
{
	public List<BuildingError> Errors = new List<BuildingError>();

	public bool HasErrors => Errors.Count() > 0;

	private GameObject ErrorIcon;

	private void SetupErrors()
	{
		ErrorIcon = GameObject.Clone( "prefabs/effects/error.prefab", new Transform( new Vector3( 0, 0, Size.y ) * GridManager.GridSize ), GameObject, false );
		ErrorIcon.Flags = GameObjectFlags.Hidden | GameObjectFlags.NotSaved;
	}

	void IGridObjectEvent.NeighborsChanged( GridCell cell )
	{
		DirtyErrors();
	}

	protected void DirtyErrors()
	{
		Errors.Clear();

		RefreshErrors();

		ErrorIcon.Enabled = HasErrors;
	}

	protected virtual void RefreshErrors()
	{
		if ( BuildingType is BuildingType.Shop )
		{
			if ( !IsConnectedToPath() )
			{
				Errors.Add( new BuildingError( "Not Accessible!" ) );
			}
		}
	}

	private bool IsConnectedToPath()
	{
		var entrancePos = GetEntrance();
		var gridPos = GridManager.WorldToGridPosition( entrancePos );

		var cell = GridManager.Instance.GetCell( gridPos );
		int level = GridManager.FloorWorldHeightToGrid( entrancePos.z );

		return cell?.IsWalkable( level ) ?? false;
	}
}