Exemple #1
0
    IEnumerator FireNullifyEffect(float duration, bool shouldFollow = false, bool isActiveHardware = true)
    {
        GameObject spawnedNullification = Instantiate(NullifyEmanateEffect, entityCollider.bounds.center, Quaternion.identity);

        spawnedNullification.GetComponent <Nullify>().TimeToComplete = TotalTimeToComplete;
        if (isActiveHardware)
        {
            gear.ApplyPassiveHardware(typeof(NullifyHardware), spawnedNullification);
        }

        float   timeElapsed  = 0.0f;
        Vector3 originalSize = spawnedNullification.transform.localScale;
        Vector3 targetSize   = new Vector3(NullifyRadius, 5f, NullifyRadius);

        while (timeElapsed < TimeToExpandActiveEffect)
        {
            timeElapsed += Time.deltaTime;

            float percentageComplete = timeElapsed / TimeToExpandActiveEffect;
            float curveEval          = GameManager.NullifyEffectCurve.Evaluate(percentageComplete);

            spawnedNullification.transform.localScale = Vector3.Lerp(originalSize, targetSize, curveEval);
            yield return(null);
        }

        yield return(new WaitForSeconds(TimeToLinger));

        if (isActiveHardware)
        {
            StartCoroutine(GoOnCooldown());
        }
        DestroyObject(spawnedNullification);
        yield break;
    }
Exemple #2
0
    public void FractureBullet(Vector3 impactPoint, Vector3 impactNormal, bool isActiveHardware = true)
    {
        int   numberOfProjectiles = isActiveHardware ? ActiveNumberOfProjectiles : PassiveNumberOfProjectiles;
        float arcOfFire           = isActiveHardware ? ActiveArcOfFire : PassiveArcOfFire;
        float projectileDamage    = isActiveHardware ? ActiveProjectileDamage : PassiveProjectileDamage;
        float projectileSpeed     = isActiveHardware ? ActiveProjectileSpeed : PassiveProjectileSpeed;

        int projectilesSpawned = 0;

        while (projectilesSpawned < numberOfProjectiles)
        {
            GameObject newBullet = Instantiate(GameManager.BulletPrefab, impactPoint, Quaternion.identity, GameManager.BulletsParent.transform);

            float   angleAdjustment  = Random.Range(-arcOfFire, arcOfFire);
            Vector3 updatedDirection = VectorUtilities.RotatePointAroundPivot(impactNormal + impactPoint, impactPoint, angleAdjustment);

            BulletController bulletController = newBullet.GetComponent <BulletController>();
            bulletController.InitializeValues(projectileDamage, updatedDirection, transform, null, projectileSpeed);
            bulletController.SetFriendly();

            if (isActiveHardware)
            {
                gear.ApplyPassiveHardware(typeof(FractureHardware), newBullet);
            }

            projectilesSpawned++;
        }
    }
Exemple #3
0
    IEnumerator FireYankProjectile()
    {
        yield return(new WaitForSeconds(0.1f));

        StartCoroutine(GoOnCooldown());
        Vector3    centerPoint           = manticoreCollider.bounds.center;
        Vector3    instantiationPosition = centerPoint + transform.forward + (transform.up * 2f);
        GameObject newYankProjectile     = Instantiate(YankProjectile, instantiationPosition, transform.rotation);

        gear.ApplyPassiveHardware(typeof(YankHardware), newYankProjectile);

        Yank yankController = newYankProjectile.GetComponent <Yank>();

        yankController.PassReferenceToHardware(this);

        GameManager.JoltScreen(-transform.forward, 0.4f);
    }
Exemple #4
0
    private void OnTriggerEnter(Collider other)
    {
        GameObject       bulletObject = other.gameObject;
        BulletController bullet       = other.GetComponent <BulletController>();

        if (bullet == null)
        {
            return;
        }
        float parryDamage = parryHardware.ParryDamage;

        Vector3 aimPosition = GameManager.GetMousePositionOnPlayerPlane();

        bullet.Parry(transform, aimPosition, parryDamage);
        gear.ApplyPassiveHardware(typeof(ParryHardware), bullet.gameObject);

        entityEmitter.EmitEvent(EntityEvents.Parry);
    }
Exemple #5
0
    IEnumerator FireBlink()
    {
        if (!isInReturnState)
        {
            gear.ApplyPassiveHardware(typeof(BlinkHardware), gameObject);
        }
        StartCoroutine(GoOnCooldown());
        // Entering blink state
        inputComponent.LockActions(true);
        inputComponent.LockMovement(true);

        Material originalSkin = entityMeshRenderer.material;

        entityMeshRenderer.material = blinkMaterial;
        trailRenderer.enabled       = true;

        // Brief pause before blink proper begins
        yield return(new WaitForSeconds(HangTimeBeforeBlinkStarts));

        // Get blink destination based on current movement.
        Vector3 currentDirection = (Vector3)entityInformation.GetAttribute(EntityAttributes.CurrentDirection);

        currentDirection.Normalize();
        Vector3 origin = transform.position;

        if (currentDirection == Vector3.zero)
        {
            currentDirection = transform.forward;
        }

        Vector3 destination;

        if (isInReturnState)
        {
            destination     = returnPoint;
            isInReturnState = false;
            Destroy(instantiatedBlinkReturnIndicator);
        }
        else
        {
            destination = GetBlinkDestination(origin, currentDirection);
        }

        float step = 0f;
        float rate = 1 / TimeToCompleteBlink;

        while (step < 1f)
        {
            step += Time.deltaTime * rate;
            float curvedStep = GameManager.BlinkCompletionCurve.Evaluate(step);

            transform.position = Vector3.Lerp(origin, destination, curvedStep);
            yield return(new WaitForEndOfFrame());
        }

        // Exiting blink state
        entityMeshRenderer.material = originalSkin;
        trailRenderer.enabled       = false;

        inputComponent.LockActions(false);
        inputComponent.LockMovement(false);

        if (DoesBlinkStun)
        {
            DoesBlinkStun = false;

            ApplyBlinkStun(origin, destination);
        }

        if (isReturnStateQueued)
        {
            isInReturnState     = true;
            isReturnStateQueued = false;
        }
        yield break;
    }