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;
}
}