GameObject CreateChessPieceRepresentationObject(ChessPiece piece)
    {
        GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);

        obj.name = piece.agent.name + " " + piece.Type.ToString();
        obj.transform.position   = RepresentationMapping.MapBoardPos2D(piece.pos);
        obj.transform.localScale = Vector3.one * 0.7f;
        obj.GetComponent <MeshRenderer>().material.color = piece.agent.color;

        GameObject head = GameObject.CreatePrimitive(PrimitiveType.Sphere);

        head.transform.position   = RepresentationMapping.MapBoardPos2D(piece.pos) + Vector3.up * 0.3f;
        head.transform.localScale = Vector3.one * 0.5f;
        head.GetComponent <MeshRenderer>().material.color = ColorFromPieceType(piece.Type);
        head.transform.SetParent(obj.transform);
        Destroy(head.GetComponent <SphereCollider>());


        ChessPieceRepresentation cpr = obj.AddComponent <ChessPieceRepresentation>();

        cpr.chessPiece = piece;
        representationObjects.Add(cpr);

        return(obj);
    }
    void Update()
    {
        var        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit))
        {
            var obj = hit.transform.gameObject;
            ChessPieceRepresentation cpr = obj.GetComponent <ChessPieceRepresentation>();
            if (cpr != null)
            {
                cpr.OnHover();
                if (Input.GetMouseButtonDown(0) && !mouseDown)
                {
                    mouseDown = true;
                    cpr.OnClicked();
                }
            }
        }
        if (Input.GetMouseButtonUp(0))
        {
            mouseDown = false;
        }
    }