Exemplo n.º 1
0
    public bool HandleItemMove(MapItem item, int x, int y)
    {
        var cell    = item.Cell;
        var purpose = item.GetComponentInChildren <ItemPurpose>();
        var items   = new List <MapItem>();

        items.Add(item);
        bool canPush = false;

        while (true)
        {
            cell.x += x;
            cell.y += y;

            if (!_tilemap.HasTile(cell))
            {
                break;
            }

            var door = GetDoor(cell);
            if (door != null && !door.IsOpen)
            {
                break;
            }

            if (HasMapItem(cell))
            {
                var i = GetMapItem(cell);
                if (i.CanPush)
                {
                    items.Add(i);
                }
                else
                {
                    break;
                }
            }
            else
            {
                canPush = true;
                break;
            }
        }

        if (!canPush)
        {
            if (purpose != null)
            {
                purpose.ShowCantMovePurpose(x, y);
            }
            return(false);
        }

        foreach (var i in items)
        {
            i.Move(x, y);
        }
        if (purpose != null)
        {
            purpose.ShowMovePurpose(x, y);
        }
        return(true);
    }