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; } }
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); } } }
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); }
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); }
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(); } } }
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; }
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(); }