public void loadGame(string filename)
    {
        var xmlStr = File.ReadAllText(filename.Trim() + ".xml");

        var str = XElement.Parse(xmlStr);

        var result = str.Elements("dominoPos").ToList();

        //need to clear the board of all dominos before loading the dominos from file
        foreach (GameObject domino in currentOnBoard)
        {
            Destroy(domino);
        }

        currentOnBoard = new List <GameObject> ();

        foreach (var dominoPos in result)
        {
            //place each domino on the board depending on posx, posy, posz, rotw, rotx, rotz
            float posx = float.Parse(dominoPos.Element("posx").Value);
            float posy = float.Parse(dominoPos.Element("posy").Value);
            float posz = float.Parse(dominoPos.Element("posz").Value);
            float rotx = float.Parse(dominoPos.Element("rotx").Value);
            float roty = float.Parse(dominoPos.Element("roty").Value);
            float rotz = float.Parse(dominoPos.Element("rotz").Value);

            Vector3    positionVetex = new Vector3(posx, posy, posz);
            Vector3    rotationQuat  = new Vector3(rotx, roty, rotz);
            GameObject toAdd         = (GameObject)Instantiate(dominos[Random.Range(0, 5)], positionVetex, Quaternion.identity);
            if (rotationQuat.x != 0 || rotationQuat.y != 0 || rotationQuat.z != 0)
            {
                Quaternion newRotation = Quaternion.LookRotation(rotationQuat) * Quaternion.Euler(0, -90, 0);
                toAdd.rigidbody.MoveRotation(newRotation);
            }
            currentOnBoard.Add(toAdd);
            dominoPos domPos = new dominoPos(
                posx,
                posy,
                posz,
                rotx,
                roty,
                rotz
                );
            toSave.Add(domPos);
        }
    }
    void Update()
    {
        if (mainCamera.isOrthographic)
        {
            if (!(Input.mousePosition.x > Screen.width - 300 && Input.mousePosition.y > Screen.height - 50))
            {
                if (Input.GetButtonDown("Fire1"))
                {
                    Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hitPoint;

                    if (Physics.Raycast(ray, out hitPoint, 200f, floorMask))
                    {
                        Vector3    newHit = new Vector3(hitPoint.point.x, hitPoint.point.y + .5f, hitPoint.point.z);
                        Quaternion rotate = Quaternion.identity;
                        if (!Physics.CheckSphere(newHit, .27f))
                        {
                            GameObject toAdd = (GameObject)Instantiate(dominos[Random.Range(0, 5)], newHit, rotate);
                            dominoToEdit = toAdd;
                            currentOnBoard.Add(toAdd);
                        }
                    }
                }
                if (Input.GetButtonUp("Fire1"))
                {
                    Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hitPoint;

                    if (Physics.Raycast(ray, out hitPoint, 200f, floorMask))
                    {
                        Vector3 newHit = new Vector3(hitPoint.point.x, hitPoint.point.y + .5f, hitPoint.point.z);

                        Vector3 playerToMouse = newHit - dominoToEdit.transform.position;
                        if (playerToMouse.magnitude > 0.05)
                        {
                            Quaternion newRotation = Quaternion.LookRotation(playerToMouse) * Quaternion.Euler(0, -90, 0);
                            dominoToEdit.rigidbody.MoveRotation(newRotation);
                        }
                        else
                        {
                            playerToMouse = new Vector3(0f, 0f, 0f);
                        }
                        dominoPos domPos = new dominoPos(
                            dominoToEdit.transform.position.x,
                            dominoToEdit.transform.position.y,
                            dominoToEdit.transform.position.z,
                            playerToMouse.x,
                            playerToMouse.y,
                            playerToMouse.z
                            );
                        toSave.Add(domPos);
                    }
                }

                if (Input.GetButtonDown("Fire2"))
                {
                    Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    RaycastHit hitPoint;

                    if (Physics.Raycast(ray, out hitPoint))
                    {
                        if (hitPoint.rigidbody.tag == "Domino")
                        {
                            Destroy(hitPoint.collider.gameObject);
                        }
                    }
                }
            }
        }
        if (Input.GetKeyDown(KeyCode.P) && !mainCamera.isOrthographic)
        {
            RaycastHit hit;
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.rigidbody != null)
                {
                    hit.rigidbody.AddForceAtPosition(ray.direction * pushForce, hit.point);
                }
            }
        }
        if (Input.GetKeyDown(KeyCode.O) && !mainCamera.isOrthographic)
        {
            RaycastHit hit;
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.rigidbody != null)
                {
                    hit.rigidbody.AddExplosionForce(300.0f, hit.point, 25.0f);
                }
            }
        }
        if (Input.GetKeyDown(KeyCode.M))
        {
            saveGame("test", toSave.ToArray());
        }
        if (Input.GetKeyDown(KeyCode.L))
        {
            loadGame("test");
        }
    }