Exemplo n.º 1
0
        private void OnAttacked(AttackFlow flow)
        {
            bool isAlreadyDead = flow.Target.Hp.Cur.Value == flow.Target.Hp.Min.Value;

            if (isAlreadyDead)
            {
                return;
            }

            int damage = flow.Target.DamageReactor.ReactTo(flow.Attacker, flow.Damage, flow.IsCritical);

            if (flow.Target is IPhotonBehaviour photonTarget)
            {
                HitEffectPopupEnvironment.Instance.PopupHitEffect(flow.HitEffectType, photonTarget);
                PopupNumber(flow.Attacker, photonTarget, damage, flow.IsCritical);

                // NOTE: Only died player client sends kill/death sync.
                SyncKillAndDeath(flow.Attacker, flow.Target);
            }

            if (flow.Target is Enemy enemy)
            {
                enemy.TargetChaseSystem.SetChaseTarget(flow.Attacker.transform);
            }
        }
Exemplo n.º 2
0
        private void SyncAttackRPC(int attackerViewID, int targetViewID, int damage, bool isCritical, HitEffectType hitEffectType)
        {
            var attacker = PhotonView.Find(attackerViewID).gameObject.GetComponent <IAttacker>();
            var target   = PhotonView.Find(targetViewID).gameObject.GetComponent <IOnAttacked>();

            Assert.IsNotNull(attacker);
            Assert.IsNotNull(target);

            var flow = new AttackFlow(attacker, target, damage, isCritical, hitEffectType);

            SkillStream.OnNextAttack(flow);
        }
Exemplo n.º 3
0
 public static void OnNextAttack(AttackFlow AttackFlow)
 {
     _attackSubject.OnNext(AttackFlow);
 }