Example #1
0
		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);
		}
Example #2
0
		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;
			}
		}
Example #3
0
		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);
                }
			}
		}
Example #4
0
		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);
			}
		}