private void cleanupReaction(ReagentDisplay reagent1, ReagentDisplay reagent2)
    {
        _reagentsOnTable.Remove(reagent1);
        _reagentsOnTable.Remove(reagent2);

        Destroy(reagent1.gameObject);
        Destroy(reagent2.gameObject);
    }
    private ReagentDisplay makeReagentDisplay(ReagentLibItem libItem, Transform parent)
    {
        GameObject reagentView = Instantiate <GameObject>(_reagentPrefab);

        reagentView.transform.SetParent(parent);
        reagentView.name = "RD " + libItem.title;

        ReagentDisplay reagentDisplay = reagentView.GetComponent <ReagentDisplay>();

        reagentDisplay.SetData(libItem);
        reagentDisplay.SetController(this);
        return(reagentDisplay);
    }
    public void OnReagentDropToTable(ReagentDisplay reagent)
    {
        bool wasReaction = false;

        foreach (var tableReagent in _reagentsOnTable)
        {
            if (reagent.RectTransform.IsIntersecting(tableReagent.RectTransform))
            {
                tryCombineReagents(reagent, tableReagent);
                wasReaction = true;
                break;
            }
        }

        if (!wasReaction)
        {
            _reagentsOnTable.Add(reagent);
        }

        // TODO: SHOW PARTICLES
    }
    private ReagentDisplay tryCombineReagents(ReagentDisplay reagent1, ReagentDisplay reagent2)
    {
        int reactionResultId = Library.Instance.Reactions.GetReactionResultId(reagent1.Data.id, reagent2.Data.id);

        cleanupReaction(reagent1, reagent2);

        if (reactionResultId != -1)
        {
            var libItem        = Library.Instance.Reagents.GetItem(reactionResultId);
            var targetPosition = Vector3.Lerp(reagent1.LocalPosition, reagent2.LocalPosition, 0.5f);
            var reactionResult = makeReagentDisplay(libItem, _workTable.transform);
            reactionResult.LocalPosition = targetPosition;

            _reagentsOnTable.Add(reactionResult);

            _statsDisplay.TotalReactions++;

            // TODO: store player progress instead
            foreach (ReagentDisplay display in _reagentContainer.GetComponentsInChildren <ReagentDisplay>())
            {
                if (display.Data.id == reactionResultId)
                {
                    return(reactionResult);
                }
            }

            _reagentsOnPanel.Add(makeReagentDisplay(libItem, _reagentContainer.transform));
            _statsDisplay.ReagentCount++;

            return(reactionResult);
        }
        else
        {
            return(null);
        }
    }