void Update() { if (GameManager.Instance.IsGameOver || GameManager.Instance.GetLeaderActor().State == ActorState.Dead) { return; } RPGActor enemyActor = GetComponent <RPGActor>(); if (enemyActor.State == ActorState.Idle) { float distance = Vector3.Distance(this.transform.position, GameManager.Instance.GetPartyLeader().transform.position); if (Mathf.Abs(distance) < Range) { enemyActor.SetTarget(GameManager.Instance.GetPartyLeader()); enemyActor.EngageTarget(); //notify the enemy too. } } }
public void DoDamageAttack(int damage, MagicElemancy element, GameObject target, float fontIncrement = 0, bool isSpecialDamage = false) { if (isPlayer) { ChainBarDisplayController.Instance.AddToChainBar(1.5f); } RPGActor targetActor = target.GetComponent <RPGActor>(); //If target is not engaged, engage it with this actor if (targetActor.State == ActorState.Idle) { if (target.tag == "Player" /* && GameManager.Instance.CurrentState == GameManager.Instance.StateIdle */) { targetActor.SetSoftTarget(this.gameObject); GameManager.Instance.Log("Attacked target is a player who was idle, now entering battle state and showing UI"); } this.TargetObject = target; //Set current target to this enemy targetActor.SetTarget(this.gameObject); targetActor.EngageTarget(); //notify the enemy. } else if (targetActor.State == ActorState.Engaged) { AddToEngaged(target); //When target is already in battle, add to engaged but don't set the current target } // var playerShoot = GetComponent <PlayerShoot>(); if (playerShoot != null && target != null) { //playerShoot.TargetObject = target; playerShoot.ShootBullet(target); } DamageInfo damageInfo = ResolveDamageUnitAGivesUnitB(this.Properties, targetActor.Properties, damage); int dmg = (int)damageInfo.TotalDamage; targetActor.Properties.ChangeHealth(-dmg); targetActor.SpawnDamageParticles(element); if (fontIncrement == 0) { fontIncrement = damageInfo.CritMultiplier * 1.3f; //for auto attack size variation if (damage == 1) { fontIncrement *= 0.6f; } if (damage == 2) { fontIncrement *= 0.9f; } if (damage == 3) { fontIncrement *= 1.1f; } if (damage > 5) { fontIncrement *= 1.6f; } } Color playerDMG = CoreUIManager.Instance.PlayerTakeDamageColor; Color enemyDMG = CoreUIManager.Instance.EnemyTakeDamageColor; Color specialDMG = CoreUIManager.Instance.SpecialDamageColor; if (isSpecialDamage) { CoreUIManager.Instance.SpawnText(dmg.ToString(), target, specialDMG, 2.6f); } else if (this.tag == "Enemy") { CoreUIManager.Instance.SpawnText(dmg.ToString(), target, playerDMG, fontIncrement); } else { CoreUIManager.Instance.SpawnText(dmg.ToString(), target, enemyDMG, fontIncrement); } }