using UnityEngine; using System.Collections.Generic; public class MoveCommand : ICommand { GameObject _movingObject; string _initialAttachedTo; string _newAttachedTo; Vector3 _initialPosition; Quaternion _initialRotation; Vector3 _newPosition; Quaternion _newRotation; string _objectName; int _objectNumber; Transform _groupParent; List _group; bool firstExecution = true; public MoveCommand(GameObject movingObject, Vector3 initialPosition, Quaternion initialRotation, string initialAttachedTo, Vector3 finalPosition, Quaternion finalRotation, string currentAttachedTo) { //Debug.Log("New Move Command"); _movingObject = movingObject; _objectNumber = Get.GetObjectIndex(_movingObject.name); _objectName = _movingObject.name; _initialPosition = initialPosition; _newPosition = finalPosition; _initialAttachedTo = initialAttachedTo; _newAttachedTo = currentAttachedTo; _initialRotation = initialRotation; _newRotation = finalRotation; _groupParent = movingObject.transform.Find("Group"); _group = new List(); if (_groupParent != null) { foreach (Transform obj in _groupParent) { _group.Add(obj.name); } } } public void Execute() { if (_movingObject == null) return; if (firstExecution) { firstExecution = false; } else { Group(); } _movingObject.transform.SetPositionAndRotation(_newPosition, _newRotation); MoveObject moveObject = _movingObject.GetComponent(); moveObject.AttachedTo = SceneModeManager.GetObjectInRoom(_newAttachedTo); OnMoveFinished(); } public void Undo() { if (_movingObject == null) return; Group(); _movingObject.transform.SetPositionAndRotation(_initialPosition, _initialRotation); MoveObject moveObject = _movingObject.GetComponent(); moveObject.AttachedTo = SceneModeManager.GetObjectInRoom(_initialAttachedTo); OnMoveFinished(); } public void UpdateCommand() { if (_movingObject != null) return; _movingObject = GameObject.Find(_objectName); } void OnMoveFinished() { Ungroup(); DOIT.ResetRoomSelect(); DOIT.SaveObjectPositionInData(_movingObject); foreach (string objectName in _group) { DOIT.SaveObjectPositionInData(Get.o1(objectName)); } TopControl.ShowMesure(); string cO = _G.OBJs[_objectNumber][0][..4]; if (!firstExecution && (cO == "wind" || cO == "door" || cO == "pati" || cO == "open")) { //HOLE.wall(_G.OBJs[_objectNumber][22]); } Mesure.OnUpdate(true); DASH.RefreshLite(); // Need to Make this gameobject or group of gameObject the selected GameObject and display the right } public string GetAction() { return "Move"; } void Group() { if (_movingObject == null) return; foreach (string obj in _group) { GameObject child = GameObject.Find(obj); if (child == null) continue; grouping.Group(_movingObject, child); } } void Ungroup() { if (_movingObject == null) return; grouping.Ungroup(_movingObject); } }