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); } }
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); }
public static void OnNextAttack(AttackFlowEntity attackFlowEntity) { _attackSubject.OnNext(attackFlowEntity); }