public GameObject Launch(GameObject missile, GameObject mount, Transform source, Transform target, MissileCameraUI missileCameraUI) { var missileGO = Instantiate(missile); missileGO.transform.position = mount.transform.position; missileGO.transform.rotation = mount.transform.rotation; var missileController = missileGO.GetComponent <HellfireMissileController>(); missileController.Source = source; missileController.Target = target; missileController.HasMissileCamera = true; RawImage missileCameraRI = Instantiate(_missileCameraRI); missileCameraRI.transform.SetParent(missileCameraUI.MissileCameraRIs, false); missileCameraRI.enabled = true; missileCameraRI.gameObject.SetActive(true); CameraInfoUI cameraInfoUI = missileCameraRI.GetComponentInChildren <CameraInfoUI>(); cameraInfoUI.MissileCompassController.gameObject.SetActive(true); cameraInfoUI.MissileCompassController.Source = source.gameObject; cameraInfoUI.MissileCompassController.Target = target.gameObject; //cameraInfoUI.TargetLock.gameObject.SetActive(true); //ameraInfoUI.TargetName.gameObject.SetActive(true); //cameraInfoUI.RangeToTarget.gameObject.SetActive(true); missileController.MissileCameraRI = missileCameraRI; missileController.MissileCameraUI = missileCameraUI; //missileController.MissileCameraUI.MissileCompassController.gameObject.SetActive(true); //missileController.MissileCameraUI.MissileCompassController.Target = target.gameObject; //missileController.MissileCameraUI.TargetLock.gameObject.SetActive(true); //missileController.MissileCameraUI.TargetName.gameObject.SetActive(true); //missileController.MissileCameraUI.RangeToTarget.gameObject.SetActive(true); missileController.IsLaunched = true; return(missileGO); }
protected override void HandleLaunch() { if (base.IsLaunched) { gameObject.transform.SetParent(null); if (!gameObject.GetComponent <Rigidbody>()) { gameObject.AddComponent <Rigidbody>(); base.Rb = gameObject.GetComponent <Rigidbody>(); base.Rb.useGravity = false; } if (base.Fuel > 0) { float distanceAtGround = Utils.GetDistanceToTargetAtGround(gameObject.transform, base.Target); if (base.Target) { if (base.HasMissileCamera) { if (_missileCameraRI && _controller.Target) { CameraInfoUI cameraInfoUI = _missileCameraRI.GetComponentInChildren <CameraInfoUI>(); cameraInfoUI.TargetName.text = _controller.Target.name; cameraInfoUI.Altitude.text = Utils.GetDistanceToGround(gameObject.transform).ToString(); cameraInfoUI.Distance.text = Utils.GetDistanceToTarget(gameObject.transform, _controller.Target).ToString(); cameraInfoUI.Fuel.text = Mathf.Round((base.Fuel / base.MaxFuel) * 100).ToString() + "%"; //cameraInfoUI.RangeToTarget.text = Utils.GetDistanceToTarget(gameObject.transform, _controller.Target).ToString() + " ft / " + Utils.GetDistanceToGround(gameObject.transform) + " ft"; } else { Debug.Log("NO _missileCameraRI"); } if (_missileCamera) { Quaternion targetRotation = Quaternion.LookRotation(base.Target.position - _missileCamera.transform.position); Quaternion cameraRotation = Quaternion.RotateTowards(_missileCamera.transform.rotation, targetRotation, _missileCameraSpeed * Time.deltaTime); _missileCamera.transform.rotation = cameraRotation; } } // Is Laser Guided if (base.IsLaserGuided) { if (base.PeakHeight > 0f && base.PeakHeightDistance > 0f && distanceAtGround > base.PeakHeightDistance) { Vector3 aboveTarget = base.Target.position + new Vector3(0f, base.PeakHeight, 0f); base.MissileRotation = Quaternion.LookRotation(aboveTarget - transform.position); } else { base.MissileRotation = Quaternion.LookRotation(base.Target.position - gameObject.transform.position); } base.Rb.MoveRotation(Quaternion.RotateTowards(gameObject.transform.rotation, base.MissileRotation, base.TurnSpeed)); } } else { base.Rb.useGravity = true; } } } base.HandleLaunch(); }