Beispiel #1
0
    private void AssignChasePosition()
    {
        Vehicle targetVehicle = null;

        if (target != null)
        {
            targetVehicle = target.GetComponent <Vehicle>();
        }
        if (targetVehicle != null)
        {
            var targetPosition = targetVehicle.transform.position;
            if ((targetPosition - lastTargetPosition).sqrMagnitude > 1f)
            {
                var toTarget    = targetPosition - vehicle.transform.position;
                var destination = targetPosition - (vehicle.GetPrimaryWeapon().SplashRadius() + 1f) * toTarget.normalized;

                var navPath = new UnityEngine.AI.NavMeshPath();
                if (UnityEngine.AI.NavMesh.CalculatePath(vehicle.transform.position, destination, UnityEngine.AI.NavMesh.AllAreas, navPath))
                {
                    path         = navPath.corners;
                    curPathIndex = 0;
                }
                else
                {
                    path         = new[] { vehicle.transform.position };
                    curPathIndex = 0;
                }
            }
            lastTargetPosition = targetPosition;
        }
    }
	public override void TakingDamage (int pointsDamage, Killable enemyHitBy)
	{
		base.TakingDamage (pointsDamage, enemyHitBy);

		if (Random.Range(0f, 1f) < ChanceToApply)
		{
			if (enemyHitBy.GetComponent<StatusEffectReceiver>() != null)
			{
				enemyHitBy.GetComponent<StatusEffectReceiver>().ApplyEffect(EffectToApply, NumberOfStacks);
			}
		}
	}
    private void AssignChasePosition()
    {
        Vehicle targetVehicle = null;

        if (target != null)
        {
            targetVehicle = target.GetComponent <Vehicle>();
        }
        if (targetVehicle != null)
        {
            var targetPosition = targetVehicle.transform.position;
            if ((targetPosition - lastTargetPosition).sqrMagnitude > 1f)
            {
                var toTarget    = targetPosition - vehicle.transform.position;
                var destination = targetPosition - 10f * toTarget.normalized;

                var detectedCover = GetDetectedCover();
                inCover = false;
                if (detectedCover.Any())
                {
                    var closestCover   = detectedCover.OrderBy(c => (c.transform.position - vehicle.transform.position).sqrMagnitude).First();
                    var toClosestCover = closestCover.transform.position - vehicle.transform.position;
                    if (toClosestCover.sqrMagnitude > closestCover.Radius * closestCover.Radius)
                    {
                        destination = closestCover.transform.position;
                    }
                    else
                    {
                        inCover     = true;
                        destination = closestCover.transform.position - closestCover.Radius * toTarget.normalized;
                    }
                }

                var navPath = new UnityEngine.AI.NavMeshPath();
                if (UnityEngine.AI.NavMesh.CalculatePath(vehicle.transform.position, destination, UnityEngine.AI.NavMesh.AllAreas, navPath))
                {
                    path         = navPath.corners;
                    curPathIndex = 0;
                }
                else
                {
                    path         = new[] { vehicle.transform.position };
                    curPathIndex = 0;
                }
            }
            lastTargetPosition = targetPosition;
        }
    }
Beispiel #4
0
    private void DealDamage(GameObject target, bool canPierce = true)
    {
        if (noDamage)
        {
            return;
        }
        if (target == null)
        {
            return;
        }

        Killable targetKillable = target.GetComponentInParent <Killable>();

        if (targetKillable != null)
        {
            int strength = GetComponent <CharacterStatistics>().ModifiedStatValue(CharacterStatType.Strength, gameObject);
            int defense  = targetKillable.GetComponent <CharacterStatistics>().ModifiedStatValue(CharacterStatType.Defense, targetKillable.gameObject);

            int damage = strength * 4 - defense * 2;

            if (InstaKill(targetKillable))
            {
                damage = 9999999;
            }

            targetKillable.TakeDamage(gameObject, damage, DamageReason.Melee);

            if (canPierce)
            {
                AttemptPierce(targetKillable);
            }
        }
    }
Beispiel #5
0
    private bool DealDamage(bool canHitPlayer)
    {
        // See if a targetable entity is in the same space as us
        // Targetable in this case = someone not currently on the same layer as us
        Killable targetKillable = KillableMap.instance.KillableAtWorldPosition(transform.position);

        if (targetKillable != null && targetKillable.gameObject.layer != gameObject.layer)
        {
            if (!canHitPlayer && targetKillable.gameObject.layer == LayerMask.NameToLayer("Player"))
            {
                return(false);
            }

            int defense = targetKillable.GetComponent <CharacterStatistics>().ModifiedStatValue(CharacterStatType.Defense, targetKillable.gameObject);
            int damage  = strength * 4 - defense * 2;

            targetKillable.TakeDamage(null, damage, DamageReason.Spell);

            if (hideEffectIfNoHit)
            {
                PlayEffect();
            }

            return(true);
        }

        return(false);
    }
    public override void DestroyingKillable(Killable deadKillable)
    {
        //check bullet color vs enemy color
        if (deadKillable.KilledBy != null)
        {
            BulletMovement bullet = deadKillable.KilledBy.GetComponent<BulletMovement>();
            if (bullet != null)
            {
                PatternColor bulletColor = deadKillable.KilledBy.GetComponent<ColorComponent>().MyColor;
                PatternColor enemyColor = deadKillable.GetComponent<ColorComponent>().MyColor;               

                bullet.PlayerRef.EnemyKilled(bulletColor, enemyColor, PatternShape.none);
            }
        }
        myController.CoreDestroyed(deadKillable.GetComponent<ColorComponent>());


    }
    public override void TakingDamage(int pointsDamage, Killable enemyHitBy)
    {
        if (enemyHitBy != null && enemyHitBy != lastHit)
        {
            if (enemyHitBy.GetComponent<BulletMovement>() != null)
            {
                PatternColor m_color = GetComponent<ColorComponent>().MyColor;
                PatternColor bulletColor = enemyHitBy.GetComponent<ColorComponent>().MyColor;
                if (m_color == bulletColor)
                {
                    //Double Damage;
                    lastHit = enemyHitBy;
                    m_killable.TakeDamage(pointsDamage, enemyHitBy);
                }
            }
        }

        base.TakingDamage(pointsDamage, enemyHitBy);
    }
Beispiel #8
0
    private bool InstaKill(Killable target)
    {
        // If this is the player attacking and the player has the Saw, it may insta-kill
        if (gameObject.layer == mPlayerLayer && Game.instance.playerStats.IsItemEquipped <Saw>())
        {
            Enemy targetEnemy = target.GetComponent <Enemy>();
            if (targetEnemy != null && !targetEnemy.isBoss)
            {
                int val = Random.Range(0, 100);

                if (val < 5) // Don't apply luck - it's supposed to be very rare
                {
                    return(true);
                }
            }
        }

        return(false);
    }
Beispiel #9
0
    void ApplyHit(GameObject collider)
    {
        Killable targetKillable = collider.GetComponentInParent <Killable>();

        if (targetKillable != null && targetKillable.gameObject.layer != gameObject.layer && !mEnemiesHit.Contains(targetKillable))
        {
            // If the victim was the player & the player has a mirror shield, reflect!
            if (targetKillable.gameObject.layer == LayerMask.NameToLayer("Player"))
            {
                if (Game.instance.playerStats.IsItemEquipped <MirrorShield>())
                {
                    MirrorShield shield = Game.instance.playerStats.GetComponentInChildren <MirrorShield>();
                    shield.Reflect(this);
                    return;
                }
            }

            CharacterStatistics stats = targetKillable.GetComponent <CharacterStatistics>();
            int defense = stats == null ? 0 : stats.ModifiedStatValue(CharacterStatType.Defense, targetKillable.gameObject);
            int damage  = strength * 4 - defense * 2;
            mEnemiesHit.Add(targetKillable);

            targetKillable.TakeDamage(null, damage, DamageReason.Projectile);

            if (destroyOnEnemyHit)
            {
                Destroy(gameObject);

                PlayHitVFX();
            }
        }
        else
        {
            if (destroyOnEnvironmentHit)
            {
                Destroy(gameObject);

                PlayHitVFX();
            }
        }
    }
Beispiel #10
0
 private void SquadronMember_OnDie(Killable sender)
 {
     PlayerController.Current.ResetThreatCooldown();
     // This should on refresh the current squadron member's icon.
     HeadsUpDisplay.Current.RefreshSquadronIcons();
     sender.OnDamage -= SquadronMember_OnDamage;
     sender.OnDie -= SquadronMember_OnDie;
     var shieldRegenerator = sender.GetComponent<ShieldRegenerator>();
     if (shieldRegenerator != null)
         shieldRegenerator.OnRegenerate -= SquadronMember_OnRegenerate;
 }
Beispiel #11
0
 private void SquadronMember_OnDamage(Killable sender, Vector3 position, Vector3 normal, GameObject attacker)
 {
     if (PlayerController.Current.VehicleInstance != null)
     {
         if (attacker == PlayerController.Current.VehicleInstance.gameObject)
         {
             var member = sender.GetComponent<Vehicle>().Controller.GetComponent<Fighter>();
             var profile = member.GetComponent<ShipProfile>();
             CommMessaging.Current.ShowMessage(attacker, profile.CallSign, GetFriendlyFireMessage(PlayerController.Current.GetCallSign(), profile.CallSign));
         }
     }
     // This should on refresh the current squadron member's icon.
     HeadsUpDisplay.Current.RefreshSquadronIcons();
 }