Beispiel #1
0
    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);
    }
Beispiel #2
0
    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();
    }