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