void MakeSpark(Projectile projectile, Character target, Int32 animationnumber, Vector2 sparklocation, Boolean playeranimation) { if (projectile == null) throw new ArgumentNullException("projectile"); if (target == null) throw new ArgumentNullException("target"); ExplodData data = new ExplodData(); data.IsHitSpark = true; data.CommonAnimation = playeranimation == false; data.PositionType = PositionType.P1; data.AnimationNumber = animationnumber; data.SpritePriority = projectile.DrawOrder + 1; data.RemoveTime = -2; data.OwnPalFx = false; data.Scale = Vector2.One; data.Location = sparklocation; data.Creator = projectile.Creator; data.Offseter = projectile; Explod explod = new Explod(projectile.Engine, data); if (explod.IsValid == true) explod.Engine.Entities.Add(explod); }
void ProjectileContact(Projectile lhs, Projectile rhs) { if (lhs == null) throw new ArgumentNullException("lhs"); if (rhs == null) throw new ArgumentNullException("rhs"); if (lhs.Priority == rhs.Priority) { lhs.StartCanceling(); rhs.StartCanceling(); } else if (lhs.Priority > rhs.Priority) { --lhs.Priority; rhs.StartCanceling(); } else if (lhs.Priority < rhs.Priority) { lhs.StartCanceling(); --rhs.Priority; } }
void OnAttack(Projectile projectile, Character target, HitDefinition hitdef, Boolean blocked) { if (projectile == null) throw new ArgumentNullException("projectile"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); Character attacker = projectile.Creator; target.DefensiveInfo.OnHit(hitdef, projectile.Creator, blocked); hitdef = target.DefensiveInfo.HitDef; projectile.TotalHits += 1; projectile.HitCountdown = projectile.Data.TimeBetweenHits; if (blocked == true) { attacker.BasePlayer.Power += hitdef.P1GuardPowerAdjustment; attacker.BasePlayer.OffensiveInfo.ProjectileInfo.Set(projectile.Data.ProjectileId, ProjectileDataType.Guarded); projectile.HitPauseCountdown = hitdef.GuardPauseTime; PlaySound(attacker, target, hitdef.GuardSoundId, hitdef.GuardPlayerSound); MakeSpark(projectile, target, hitdef.GuardSparkAnimation, hitdef.SparkStartPosition, hitdef.GuardPlayerSpark); } else { attacker.BasePlayer.Power += hitdef.P1HitPowerAdjustment; attacker.BasePlayer.OffensiveInfo.ProjectileInfo.Set(projectile.Data.ProjectileId, ProjectileDataType.Hit); projectile.HitPauseCountdown = hitdef.PauseTime; DoEnvShake(hitdef, attacker.Engine.EnvironmentShake); PlaySound(attacker, target, hitdef.HitSoundId, hitdef.PlayerSound); MakeSpark(projectile, target, hitdef.SparkAnimation, hitdef.SparkStartPosition, hitdef.PlayerSpark); } HitOverride hitoverride = target.DefensiveInfo.GetOverride(hitdef); if (hitoverride != null) { if (hitoverride.ForceAir == true) hitdef.Fall = true; target.StateManager.ForeignManager = null; target.StateManager.ChangeState(hitoverride.StateNumber); } else { if (blocked == false) { OnAttackHit(attacker, target, hitdef); } else { OnAttackBlock(attacker, target, hitdef); } } }
void ProjectileAttack(Projectile projectile, Character target) { if (projectile == null) throw new ArgumentNullException("projectile"); if (target == null) throw new ArgumentNullException("target"); if (CanBlock(projectile, target, projectile.Data.HitDef, true) == true) { OnAttack(projectile, target, projectile.Data.HitDef, true); } else if (CanHit(projectile, target, projectile.Data.HitDef) == true) { OnAttack(projectile, target, projectile.Data.HitDef, false); } else if (CanBlock(projectile, target, projectile.Data.HitDef, false) == true) { OutOfRangeBlock(target); } }