public void InitializeBoxFromFile(Container_Box_Json[] boxFile = null) { //If there is a file that can initialize boxFromFile then use it, otherwise set the default properties. if (boxFile != null) { boxFromFile = boxFile; } else { if (BoxFromFileExists()) { return; } int len = InputSequence.Instance.getSeqLength(); Container_Box_Json[] tmpBoxFromFile = new Container_Box_Json[len]; GameObject[] tmpBox; CockpitFeedback[] oi; bool[] in_box; string sequence_id; for (int i = 0; i < len; i++) { sequence_id = InputSequence.Instance.getSeq(i); oi = InputSequence.Instance.GetSequence(sequence_id).objectIndicated.ToArray(); in_box = new bool[oi.Length]; for (int j = 0; j < oi.Length; j++) { in_box[j] = oi[j].insideBox; } tmpBox = GetFromObjects(InputSequence.Instance.getObjectsFromSequence(sequence_id), in_box); if (tmpBox != null) { tmpBoxFromFile[i] = new Container_Box_Json(sequence_id, tmpBox[0].transform.position, tmpBox[0].transform.rotation.eulerAngles, tmpBox[0].transform.localScale, tmpBox[1].transform.position, tmpBox[1].transform.rotation.eulerAngles, tmpBox[1].transform.localScale, tmpBox[2].transform.position, tmpBox[2].transform.rotation.eulerAngles, tmpBox[2].transform.localScale, tmpBox[3].transform.position, tmpBox[3].transform.rotation.eulerAngles, tmpBox[3].transform.localScale); Destroy(tmpBox[0]); Destroy(tmpBox[1]); Destroy(tmpBox[2]); Destroy(tmpBox[3]); } else { tmpBoxFromFile[i] = null; } } boxFromFile = tmpBoxFromFile; } }
public void Update_BFF_From_Modify(GameObject obj) { GameObject[] objects; GameObject[] fileBox = null; Container_Box_Json boxData; CockpitFeedback[] oi; bool[] in_box; string sequence_id; if (!BoxFromFileExists()) { InitializeBoxFromFile(); } for (int i = 0; i < InputSequence.Instance.getSeqLength(); i++) { sequence_id = InputSequence.Instance.getSeq(i); objects = InputSequence.Instance.getObjectsFromSequence(sequence_id); if (objects != null && objects.Contains(obj)) { oi = InputSequence.Instance.GetSequence(sequence_id).objectIndicated.ToArray(); in_box = new bool[oi.Length]; for (int j = 0; j < oi.Length; j++) { in_box[j] = oi[j].insideBox; } fileBox = GetFromObjects(objects, in_box); if (fileBox == null) { continue; } boxData = new Container_Box_Json(sequence_id, fileBox[0].transform.position, fileBox[0].transform.rotation.eulerAngles, fileBox[0].transform.localScale, fileBox[1].transform.position, fileBox[1].transform.rotation.eulerAngles, fileBox[1].transform.localScale, fileBox[2].transform.position, fileBox[2].transform.rotation.eulerAngles, fileBox[2].transform.localScale, fileBox[3].transform.position, fileBox[3].transform.rotation.eulerAngles, fileBox[3].transform.localScale); boxFromFile[i] = boxData; for (int j = 0; j < fileBox.Length; j++) { Destroy(fileBox[j]); } } } }
public void UpdateBoxFromFile(GameObject[] obj, string seq) { GameObject[] fileBox; Container_Box_Json boxData; if (!BoxFromFileExists()) { InitializeBoxFromFile(); } fileBox = obj; boxData = new Container_Box_Json(seq, fileBox[0].transform.position, fileBox[0].transform.rotation.eulerAngles, fileBox[0].transform.localScale, fileBox[1].transform.position, fileBox[1].transform.rotation.eulerAngles, fileBox[1].transform.localScale, fileBox[2].transform.position, fileBox[2].transform.rotation.eulerAngles, fileBox[2].transform.localScale, fileBox[3].transform.position, fileBox[3].transform.rotation.eulerAngles, fileBox[3].transform.localScale); for (int i = 0; i < boxFromFile.Length; i++) { if (boxFromFile[i].sequence.Equals(seq)) { boxFromFile[i] = boxData; break; } } }
//Loading the position, rotation and scale of all cockpit's components. public void LoadObjectsProperties() { Material material; NewParameterManager newParameterManager; Dictionary <GameObject, NewParameterManager> map = new Dictionary <GameObject, NewParameterManager>(); component = GameObject.CreatePrimitive(PrimitiveType.Cube); component.AddComponent <Interactible>(); component.AddComponent <TapToPlace>().enabled = false; component.AddComponent <HoldToRotate>().enabled = false; component.AddComponent <TapToRemove>().enabled = false; component.AddComponent <NewParameterManager>(); component.GetComponent <MeshRenderer>().enabled = false; material = Resources.Load("Cockpit_Buttons", typeof(Material)) as Material; component.GetComponent <MeshRenderer>().material = material; material = Resources.Load("PlaceableShadow", typeof(Material)) as Material; component.GetComponent <TapToPlace>().PlacementMaterial = material; component.GetComponent <HoldToRotate>().PlacementMaterial = material; GameObject component_instantiated; int i = 0; int value; file = new JsonSaveObject(); #if !UNITY_EDITOR Load(); #else LoadUnity(); #endif try { foreach (Cockpit_Component_Json cockpit_component in file.components) { component_instantiated = Instantiate(component); component_instantiated.name = cockpit_component.nameObject; component_instantiated.transform.position = cockpit_component.position; component_instantiated.transform.rotation = Quaternion.Euler(cockpit_component.rotation); component_instantiated.transform.localScale = cockpit_component.scale; newParameterManager = component_instantiated.GetComponent <NewParameterManager>(); newParameterManager.initID(cockpit_component.parameter); newParameterManager.setDataType(cockpit_component.dataType); newParameterManager.setPath(cockpit_component.param_path); newParameterManager.setInteraction(cockpit_component.interaction); newParameterManager.setPossibleValues(cockpit_component.possible_values); newParameterManager.setIOData(cockpit_component.IO_Data); component_instantiated.transform.SetParent(cockpit.transform); FileDataWriter.Instance.AddIntoList(component_instantiated.name); value = Convert.ToInt32(component_instantiated.name.Substring(4)); if (value > max) { max = value; } for (i = 0; i < cockpit_component.parameter.Length; i++) { Parameters.Instance.AddValue(cockpit_component.param_path[i], 0, cockpit_component.dataType[i], cockpit_component.IO_Data[i]); } map.Add(component_instantiated, newParameterManager); } InputSequence.Instance.InitMap(map); Destroy(component); i = 0; int len = InputSequence.Instance.getSeqLength(); List <FeedbackGroup> sequenceFromFile = file.feedback_group; InputSequence.Instance.InitSequenceObjects(sequenceFromFile); Container_Box_Json[] boxFromFile = new Container_Box_Json[len]; foreach (Container_Box_Json container_box in file.boxes) { while (sequenceFromFile[i].sequence != container_box.sequence) { if (sequenceFromFile[i].sequence != "End") { boxFromFile[i] = null; ++i; } else { break; } } boxFromFile[i] = container_box; ++i; } while (i < len) { boxFromFile[i] = null; ++i; } GameObject.FindWithTag("ContainerBox").GetComponent <ContainerBox>().InitializeBoxFromFile(boxFromFile); } catch (Exception e) { Debug.Log(e.Message); } }
public void SetObjectsIndicated(GameObject[] objects, bool[] in_box, bool showBox) { if (objects != null) { int i; bool inside_box = false; float minX_scale = 0; float maxX_scale = 0; float minY_scale = 0; float maxY_scale = 0; float minZ_scale = 0; float maxZ_scale = 0; minX = Mathf.Infinity; minY = Mathf.Infinity; minZ = Mathf.Infinity; maxX = Mathf.NegativeInfinity; maxY = Mathf.NegativeInfinity; maxZ = Mathf.NegativeInfinity; objectIndicated = new GameObject[objects.Length]; insideBox = in_box; for (i = 0; i < objects.Length; i++) { objectIndicated[i] = objects[i]; if (insideBox[i]) { if (objectIndicated[i].transform.position.x < minX) { minX = objectIndicated[i].transform.position.x; minX_scale = objectIndicated[i].transform.localScale.x / 2; } if (objectIndicated[i].transform.position.x > maxX) { maxX = objectIndicated[i].transform.position.x; maxX_scale = objectIndicated[i].transform.localScale.x / 2; } if (objectIndicated[i].transform.position.y < minY) { minY = objectIndicated[i].transform.position.y; minY_scale = objectIndicated[i].transform.localScale.y / 2; } if (objectIndicated[i].transform.position.y > maxY) { maxY = objectIndicated[i].transform.position.y; maxY_scale = objectIndicated[i].transform.localScale.y / 2; } if (objectIndicated[i].transform.position.z < minZ) { minZ = objectIndicated[i].transform.position.z; minZ_scale = objectIndicated[i].transform.localScale.z / 2; } if (objectIndicated[i].transform.position.z > maxZ) { maxZ = objectIndicated[i].transform.position.z; maxZ_scale = objectIndicated[i].transform.localScale.z / 2; } inside_box = true; } } if (!inside_box) { objectIndicated = null; return; } if (boxFromFile != null) { box = CreateBox(); Container_Box_Json properties = GetBoxFromId(InputSequence.Instance.getSeq()); box[0].transform.position = properties.positionLeft; box[0].transform.rotation = Quaternion.Euler(properties.rotationLeft); box[0].transform.localScale = properties.scaleLeft; box[1].transform.position = properties.positionTop; box[1].transform.rotation = Quaternion.Euler(properties.rotationTop); box[1].transform.localScale = properties.scaleTop; box[2].transform.position = properties.positionRight; box[2].transform.rotation = Quaternion.Euler(properties.rotationRight); box[2].transform.localScale = properties.scaleRight; box[3].transform.position = properties.positionBottom; box[3].transform.rotation = Quaternion.Euler(properties.rotationBottom); box[3].transform.localScale = properties.scaleBottom; minX = minX - minX_scale; maxX = maxX + maxX_scale; minY = minY - minY_scale; maxY = maxY + maxY_scale; minZ -= minZ_scale; maxZ += maxZ_scale; boxRenderer = new MeshRenderer[4]; for (i = 0; i < box.Length; i++) { boxRenderer[i] = box[i].GetComponent <MeshRenderer>(); boxRenderer[i].enabled = showBox; } } else { //Put some default offset, so that the box is not too attached to the objects. minX = minX - minX_scale - 0.03f; maxX = maxX + maxX_scale + 0.03f; minY = minY - minY_scale - 0.075f; maxY = maxY + maxY_scale + 0.075f; minZ -= minZ_scale; maxZ += maxZ_scale; box = CreateBox(); SetBoxPosition(); SetBoxRotation(); boxRenderer = new MeshRenderer[4]; for (i = 0; i < box.Length; i++) { box[i].transform.localScale = new Vector3(box[i].transform.localScale.x, box[i].transform.localScale.y, BoxObject.transform.localScale.z); boxRenderer[i] = box[i].GetComponent <MeshRenderer>(); boxRenderer[i].enabled = showBox; } } setContainerBoxColor(BoxColor); } else { objectIndicated = null; } }
public GameObject[] GetFromObjects(GameObject[] objects, bool[] in_box, string seq = "") { if (objects == null) { return(objects); } int i; float minX_scale = 0; float maxX_scale = 0; float minY_scale = 0; float maxY_scale = 0; float minZ_scale = 0; float maxZ_scale = 0; minX = Mathf.Infinity; minY = Mathf.Infinity; minZ = Mathf.Infinity; maxX = Mathf.NegativeInfinity; maxY = Mathf.NegativeInfinity; maxZ = Mathf.NegativeInfinity; bool inside_box = false; for (i = 0; i < objects.Length; i++) { if (in_box[i]) { if (objects[i].transform.position.x < minX) { minX = objects[i].transform.position.x; minX_scale = objects[i].transform.localScale.x / 2; } if (objects[i].transform.position.x > maxX) { maxX = objects[i].transform.position.x; maxX_scale = objects[i].transform.localScale.x / 2; } if (objects[i].transform.position.y < minY) { minY = objects[i].transform.position.y; minY_scale = objects[i].transform.localScale.y / 2; } if (objects[i].transform.position.y > maxY) { maxY = objects[i].transform.position.y; maxY_scale = objects[i].transform.localScale.y / 2; } if (objects[i].transform.position.z < minZ) { minZ = objects[i].transform.position.z; minZ_scale = objects[i].transform.localScale.z / 2; } if (objects[i].transform.position.z > maxZ) { maxZ = objects[i].transform.position.z; maxZ_scale = objects[i].transform.localScale.z / 2; } inside_box = true; } } if (!inside_box) { return(null); } GameObject[] tmpBox; if (boxFromFile != null && seq != "") { tmpBox = CreateBox(); Container_Box_Json properties = GetBoxFromId(seq); tmpBox[0].transform.position = properties.positionLeft; tmpBox[0].transform.rotation = Quaternion.Euler(properties.rotationLeft); tmpBox[0].transform.localScale = properties.scaleLeft; tmpBox[1].transform.position = properties.positionTop; tmpBox[1].transform.rotation = Quaternion.Euler(properties.rotationTop); tmpBox[1].transform.localScale = properties.scaleTop; tmpBox[2].transform.position = properties.positionRight; tmpBox[2].transform.rotation = Quaternion.Euler(properties.rotationRight); tmpBox[2].transform.localScale = properties.scaleRight; tmpBox[3].transform.position = properties.positionBottom; tmpBox[3].transform.rotation = Quaternion.Euler(properties.rotationBottom); tmpBox[3].transform.localScale = properties.scaleBottom; minX = minX - minX_scale; maxX = maxX + maxX_scale; minY = minY - minY_scale; maxY = maxY + maxY_scale; minZ -= minZ_scale; maxZ += maxZ_scale; for (i = 0; i < tmpBox.Length; i++) { tmpBox[i].GetComponent <MeshRenderer>().enabled = true; } } else { //Put some default offset, so that the box is not too attached to the objects. minX = minX - minX_scale - 0.03f; maxX = maxX + maxX_scale + 0.03f; minY = minY - minY_scale - 0.075f; maxY = maxY + maxY_scale + 0.075f; minZ -= minZ_scale; maxZ += maxZ_scale; tmpBox = CreateBox(); SetBoxPosition(tmpBox); SetBoxRotation(tmpBox, objects, in_box); for (i = 0; i < tmpBox.Length; i++) { tmpBox[i].transform.localScale = new Vector3(tmpBox[i].transform.localScale.x, tmpBox[i].transform.localScale.y, BoxObject.transform.localScale.z); tmpBox[i].GetComponent <MeshRenderer>().enabled = true; } } return(tmpBox); }