public override void Launch(RangeWeapon weapon)
        {
            if (_missileToLaunch != null)
            {
                Ray ray = new Ray(projectileSpawnTransform.position, projectileSpawnTransform.forward);
                if (Physics.Raycast(ray, out RaycastHit hit, maxDistanceToHit))
                {
                    hit.collider.gameObject.HandleComponent <ITarget>(target => currentTarget = hit.transform);
                    print(hit.collider.name);
                }

                MissileProps newMissileProps = new MissileProps
                {
                    acceleration  = missileProps.acceleration,
                    rotationSpeed = missileProps.rotationSpeed,
                    damage        = weapon.rangeWeaponProps.damage,
                    speed         = weapon.rangeWeaponProps.projectileSpeed,
                    startForce    = missileProps.startForce,
                    timeToDestroy = missileProps.timeToDestroy,
                    timeToFly     = missileProps.timeToFly,
                };

                _missileToLaunch.Launch(currentTarget, ray, newMissileProps);

                _missileToLaunch = null;

                StartCoroutine(LoadMissileWithDelay(timeToReload));
            }
        }
示例#2
0
        private void Die()
        {
            _timer          = 0;
            _directionToHit = Vector3.zero;
            _targetToHit    = null;
            _isAiming       = false;
            _missileProps   = null;

            _rb.isKinematic   = true;
            _collider.enabled = false;
            MissilePool.Instance.ReturnToPool(this);
        }
示例#3
0
        public void Launch(Transform target, Ray ray, MissileProps missileProps, Transform parent = null)
        {
            _missileProps = missileProps;
            speed         = _missileProps.speed;
            Damage        = _missileProps.damage;
            transform.SetParent(parent);
            _targetToHit = target;

            _timeToFly = _missileProps.timeToFly;

            if (_targetToHit == null)
            {
                print("target is null");
                _directionToHit = ray.direction;
            }

            _isAiming         = true;
            _rb.isKinematic   = false;
            _collider.enabled = true;
            _rb.AddForce(transform.forward * _missileProps.startForce, ForceMode.Impulse);

            // time to destroy
            StartCoroutine(DieWithDelay(_missileProps.timeToDestroy));
        }