protected override void OnUpdate(float dt) { if (IsFinish()) { return; } elapsed += dt; timeUntilNextDamage -= dt; if (timeUntilNextDamage < 0) { timeUntilNextDamage = this.info.DotModifierConfig.interval; SourceHistory sourceHistory = new SourceHistory(Source.FromSkill(parentSkill, skillId)) .Add(Source.FromModifier(this)); DamageFromAttack damage = new DamageFromAttack( sourceHistory, this.info.DotModifierConfig.damageScale, false, 1f, 1, casterEntity.Id, targetMovementComponent.Position, targetMovementComponent.Position, characterStats, false, info.DotModifierConfig.ShowDeathBehavior(), false ); damage.CauseTargetToDie(false); targetHealthComponent.ReceiveDamage(damage); } if (targetHealthComponent.Health <= 1) { _1HpLifetime.End(); } }
private void OnWallCollision(object sender, WallCollisionEventArgs e) { if (!info.RagdollModifierConfig.enableWallHit) { return; } if (elapsed < timeUntilGround && !isWallHit) { isWallHit = true; lifetime.End(); bool found; Stats casterAtkStats = casterEntity.GetComponent <StatsComponent>().CharacterStats.FindStats(StatsType.RawAtk, out found); DamageFromAttack dfa = new DamageFromAttack( new SourceHistory(Source.FromSkill(info.ShowParentSkill(), skillId)), whc.damageScale * damageScale, false, 1, 1, casterEntity.Id, targetCharacter.Position(), targetCharacter.Position(), characterStats ); for (int kIndex = 0; kIndex < whc.modifiers.Count; kIndex++) { dfa.AddModifierInfo( CastProjectileAction.OnHitPhase.Damaged, ((DefaultSkillCharacter)targetCharacter).CreateModifierInfo( info.ShowParentSkill(), whc.modifiers[kIndex] ) ); } targetEntity.GetComponent <HealthComponent>().ReceiveDamage(dfa); } }
protected override void OnUpdate(float dt) { if (target == null) { return; } Vector2 delta = (Vector2)target.Position() - lastPos; accumulatedDistance += Mathf.Abs(delta.x); if (accumulatedDistance >= info.Bmc.maxDistance) { accumulatedTriggerDistance += Mathf.Abs(delta.x); if (accumulatedTriggerDistance >= info.Bmc.triggerDistance) { accumulatedTriggerDistance -= info.Bmc.triggerDistance; float percent = info.Bmc.percent / info.Bmc.distance * info.Bmc.triggerDistance; DamageFromAttack damage = new DamageFromAttack( new SourceHistory(Source.FromModifier(this)), percent, true, 1, 1, casterEntity.Id, target.Position(), target.Position(), characterStats, false, CastProjectileAction.DeathBehavior.Neutral, true, true ).CauseTargetToDie(false); targetHealthComponent.ReceiveDamage(damage); GameObject vfxPrefab = info.Bmc.ShowStoredPrefab(); if (vfxPrefab != null) { GameObject vfx = environment.InstantiateGameObject(vfxPrefab); vfx.transform.position = target.Position(); vfxTransforms.Add(vfx.transform); ParticleSystem[] ps = vfx.GetComponentsInChildren <ParticleSystem>(); if (ps != null && ps.Length > 0) { Timing.RunCoroutine( _WaitForParticleSystemFinish(ps, () => GameObject.Destroy(vfx)) ); } else { float waitTime = 1; Timing.RunCoroutine(_WaitThenInvoke(waitTime, () => { GameObject.Destroy(vfx); })); } } } } lastPos = target.Position(); foreach (Transform vfxTransform in vfxTransforms) { if (vfxTransform != null) { vfxTransform.position = target.Position(); } } }
private void DealDamageToSelf() { Entity casterEntity = caster.GameObject().GetComponent <EntityReference>().Entity; HealthComponent hc = casterEntity.GetComponent <HealthComponent>(); StatsComponent sc = casterEntity.GetComponent <StatsComponent>(); DamageFromAttack damage = new DamageFromAttack( new SourceHistory(Source.FromSkill(skill, skillId)), config.damageScale, config.isHpPercent, 1, 1, caster.Id(), caster.Position(), caster.Position(), sc.CharacterStats, false, config.ShowDeathBehavior() ); damage.SetTriggerHud(config.hud); hc.ReceiveDamage(damage); }