Beispiel #1
0
        private void OnAttacked(AttackFlowEntity entity)
        {
            bool isAlreadyDead = entity.Target.Hp.Cur.Value == entity.Target.Hp.Min.Value;

            if (isAlreadyDead)
            {
                return;
            }

            int damage = entity.Target.DamageReactor.ReactTo(entity.Damage);

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

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

            if (entity.Target is Enemy)
            {
                ((Enemy)entity.Target).TargetChaseSystem.SetChaseTarget(entity.Attacker.transform);
            }
        }
Beispiel #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 flowEntity = new AttackFlowEntity(attacker, target, damage, isCritical, hitEffectType);

            SkillStream.OnNextAttack(flowEntity);
        }
Beispiel #3
0
 public static void OnNextAttack(AttackFlowEntity attackFlowEntity)
 {
     _attackSubject.OnNext(attackFlowEntity);
 }