private async void RobotModelLoaded() { Debug.Log("URDF: robot is fully loaded"); RobotModel.RobotModelGameObject.transform.parent = transform; RobotModel.RobotModelGameObject.transform.localPosition = Vector3.zero; RobotModel.RobotModelGameObject.transform.localEulerAngles = Vector3.zero; // retarget OnClickCollider target to receive OnClick events foreach (OnClickCollider onCLick in RobotModel.RobotModelGameObject.GetComponentsInChildren <OnClickCollider>(true)) { onCLick.Target = gameObject; } RobotModel.SetActiveAllVisuals(true); outlineOnClick.ClearRenderers(); RobotPlaceholder.SetActive(false); Destroy(RobotPlaceholder); robotColliders.Clear(); robotRenderers.Clear(); robotRenderers.AddRange(RobotModel.RobotModelGameObject.GetComponentsInChildren <Renderer>()); robotColliders.AddRange(RobotModel.RobotModelGameObject.GetComponentsInChildren <Collider>()); outlineOnClick.InitRenderers(robotRenderers); outlineOnClick.OutlineShaderType = OutlineOnClick.OutlineType.TwoPassShader; outlineOnClick.InitGizmoMaterials(); await WebsocketManager.Instance.RegisterForRobotEvent(GetId(), true, RegisterForRobotEventRequestArgs.WhatEnum.Joints); }
/// <summary> /// Puts specified RobotModel back to the RobotModels dictionary "pool" for further use by another RobotActionObject. /// </summary> /// <param name="robotModel">RobotModel to be put back to the RobotModels dictionary.</param> public void ReturnRobotModelInstace(RobotModel robotModel) { robotModel.RobotModelGameObject.transform.parent = transform; robotModel.RobotModelGameObject.transform.localPosition = Vector3.zero; robotModel.RobotModelGameObject.transform.localEulerAngles = Vector3.zero; robotModel.IsBeingUsed = false; robotModel.SetActiveAllVisuals(false); // retarget OnClickCollider target to receive OnClick events foreach (OnClickCollider onCLick in robotModel.RobotModelGameObject.GetComponentsInChildren <OnClickCollider>(true)) { onCLick.Target = null; } }
private async void RobotModelLoaded() { RobotModel.RobotModelGameObject.transform.parent = transform; RobotModel.RobotModelGameObject.transform.localPosition = Vector3.zero; RobotModel.RobotModelGameObject.transform.localRotation = Quaternion.identity; // retarget OnClickCollider target to receive OnClick events foreach (OnClickCollider onCLick in RobotModel.RobotModelGameObject.GetComponentsInChildren <OnClickCollider>(true)) { onCLick.Target = gameObject; } RobotModel.SetActiveAllVisuals(true); bool outlineWasHighlighted = outlineOnClick.Highlighted; outlineOnClick.UnHighlight(); outlineOnClick.ClearRenderers(); RobotPlaceholder.SetActive(false); Destroy(RobotPlaceholder); robotColliders.Clear(); robotRenderers.Clear(); robotRenderers.AddRange(RobotModel.RobotModelGameObject.GetComponentsInChildren <Renderer>(true)); robotColliders.AddRange(RobotModel.RobotModelGameObject.GetComponentsInChildren <Collider>(true)); outlineOnClick.InitRenderers(robotRenderers); outlineOnClick.OutlineShaderType = OutlineOnClick.OutlineType.TwoPassShader; outlineOnClick.InitMaterials(); SetOutlineSizeBasedOnScale(); SetVisibility(visibility, forceShaderChange: true); UpdateColor(); SetDefaultJoints(); Target target = GetComponent <Target>(); if (target != null) { target.ChangeTarget(RobotModel.RobotModelGameObject); } if (outlineWasHighlighted) { outlineOnClick.Highlight(); if (SelectorMenu.Instance.ManuallySelected) { DisplayOffscreenIndicator(true); } } // Show or hide the robot based on global settings of displaying ActionObjects. // Needs to be called additionally, because when global setting is called, robot model is not loaded and only its placeholder is active. /*if (robotVisible) { * Show(); * } else { * Hide(); * } */ if (GameManager.Instance.GetGameState() != GameManager.GameStateEnum.PackageRunning || GameManager.Instance.GetGameState() != GameManager.GameStateEnum.LoadingPackage) { await WebsocketManager.Instance.RegisterForRobotEvent(GetId(), true, RegisterForRobotEventRequestArgs.WhatEnum.Joints); } }