public void OnHit(HitDefinition hitdef, Character target, bool blocked) { if (hitdef == null) { throw new ArgumentNullException(nameof(hitdef)); } if (target == null) { throw new ArgumentNullException(nameof(target)); } m_character.DrawOrder = hitdef.P1SpritePriority; AddToTargetList(target); if (blocked) { m_character.BasePlayer.Power += hitdef.P1GuardPowerAdjustment; HitPauseTime = hitdef.GuardPauseTime; MoveContact = 1; MoveGuarded = 1; MoveHit = 0; MoveReversed = 0; } else { m_character.BasePlayer.Power += hitdef.P1HitPowerAdjustment; HitPauseTime = hitdef.PauseTime; MoveContact = 1; MoveGuarded = 0; MoveHit = 1; MoveReversed = 0; } }
public DefensiveInfo(Character character) { if (character == null) { throw new ArgumentNullException("character"); } m_character = character; m_hitdef = new HitDefinition(); m_blocked = false; m_killed = false; m_hitstatetype = StateType.None; m_hitshaketime = 0; m_defensemultiplier = 1; m_attacker = null; m_hittime = 0; m_hitby1 = new HitBy(); m_hitby2 = new HitBy(); m_isfalling = false; m_hitoverrides = new List <HitOverride>(); for (Int32 i = 0; i != 8; ++i) { m_hitoverrides.Add(new HitOverride()); } m_hitcount = 0; }
public void OnHit(HitDefinition hitdef, Character target, Boolean blocked) { if (hitdef == null) throw new ArgumentNullException("hitdef"); if (target == null) throw new ArgumentNullException("target"); m_character.DrawOrder = hitdef.P1SpritePriority; AddToTargetList(target); if (blocked == true) { m_character.BasePlayer.Power += hitdef.P1GuardPowerAdjustment; HitPauseTime = hitdef.GuardPauseTime; MoveContact = 1; MoveGuarded = 1; MoveHit = 0; MoveReversed = 0; } else { m_character.BasePlayer.Power += hitdef.P1HitPowerAdjustment; HitPauseTime = hitdef.PauseTime; MoveContact = 1; MoveGuarded = 0; MoveHit = 1; MoveReversed = 0; } }
public HitOverride GetOverride(HitDefinition hitdef) { if (hitdef == null) { throw new ArgumentNullException("hitdef"); } foreach (HitOverride hitoverride in HitOverrides) { if (hitoverride.IsActive == false) { continue; } if (hitoverride.Attribute.HasHeight(hitdef.HitAttribute.AttackHeight) == false) { continue; } foreach (HitType hittype in hitdef.HitAttribute.AttackData) { if (hitoverride.Attribute.HasData(hittype) == false) { continue; } } return(hitoverride); } return(null); }
void OnAttack(Character attacker, Character target, HitDefinition hitdef, Boolean blocked) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } target.DefensiveInfo.OnHit(hitdef, attacker, blocked); HitDefinition myhitdef = target.DefensiveInfo.HitDef; attacker.OffensiveInfo.OnHit(myhitdef, target, blocked); SetFacing(attacker, target, myhitdef); if (blocked == false) { DoEnvShake(myhitdef, attacker.Engine.EnvironmentShake); PlaySound(attacker, target, myhitdef.HitSoundId, myhitdef.PlayerSound); MakeSpark(attacker, target, myhitdef.SparkAnimation, myhitdef.SparkStartPosition, myhitdef.PlayerSpark); } else { PlaySound(attacker, target, myhitdef.GuardSoundId, myhitdef.GuardPlayerSound); MakeSpark(attacker, target, myhitdef.GuardSparkAnimation, myhitdef.SparkStartPosition, myhitdef.GuardPlayerSpark); } HitOverride hitoverride = target.DefensiveInfo.GetOverride(myhitdef); if (hitoverride != null) { if (hitoverride.ForceAir == true) { myhitdef.Fall = true; } target.StateManager.ForeignManager = null; target.StateManager.ChangeState(hitoverride.StateNumber); } else { if (blocked == false) { OnAttackHit(attacker, target, myhitdef); } else { OnAttackBlock(attacker, target, myhitdef); } } }
public Contact(Character attacker, Character target, HitDefinition hitdef, ContactType type) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); if (type == ContactType.None) throw new ArgumentOutOfRangeException("type"); m_attacker = attacker; m_target = target; m_hitdef = hitdef; m_type = type; }
public void OnHit(HitDefinition hitdef, Character attacker, Boolean blocked) { if (hitdef == null) { throw new ArgumentNullException("hitdef"); } if (attacker == null) { throw new ArgumentNullException("attacker"); } Boolean alreadyfalling = IsFalling; HitDef.Set(hitdef); Attacker = attacker; Blocked = blocked; if (alreadyfalling == true) { HitDef.Fall = true; } else { m_character.JugglePoints = m_character.BasePlayer.Constants.AirJuggle; } HitCount = (m_character.MoveType == MoveType.BeingHit) ? HitCount + 1 : 1; HitStateType = m_character.StateType; m_character.DrawOrder = HitDef.P2SpritePriority; m_character.PlayerControl = PlayerControl.NoControl; m_character.MoveType = MoveType.BeingHit; if (blocked == true) { HitShakeTime = HitDef.GuardShakeTime; m_character.BasePlayer.Power += HitDef.P2GuardPowerAdjustment; } else { HitShakeTime = HitDef.ShakeTime; m_character.BasePlayer.Power += HitDef.P2HitPowerAdjustment; m_character.PaletteFx.Set(HitDef.PalFxTime, HitDef.PalFxAdd, HitDef.PalFxMul, HitDef.PalFxSinAdd, HitDef.PalFxInvert, HitDef.PalFxBaseColor); if (IsFalling == true) { Int32 neededjugglepoints = EvaluationHelper.AsInt32(Attacker, Attacker.StateManager.CurrentState.JugglePoints, 0); m_character.JugglePoints -= neededjugglepoints; } } }
public void OnHit(HitDefinition hitdef, Character attacker, Boolean blocked) { if (hitdef == null) throw new ArgumentNullException("hitdef"); if (attacker == null) throw new ArgumentNullException("attacker"); Boolean alreadyfalling = IsFalling; HitDef.Set(hitdef); Attacker = attacker; Blocked = blocked; if (alreadyfalling == true) { HitDef.Fall = true; } else { m_character.JugglePoints = m_character.BasePlayer.Constants.AirJuggle; } HitCount = (m_character.MoveType == MoveType.BeingHit) ? HitCount + 1 : 1; HitStateType = m_character.StateType; m_character.DrawOrder = HitDef.P2SpritePriority; m_character.PlayerControl = PlayerControl.NoControl; m_character.MoveType = MoveType.BeingHit; if (blocked == true) { HitShakeTime = HitDef.GuardShakeTime; m_character.BasePlayer.Power += HitDef.P2GuardPowerAdjustment; } else { HitShakeTime = HitDef.ShakeTime; m_character.BasePlayer.Power += HitDef.P2HitPowerAdjustment; m_character.PaletteFx.Set(HitDef.PalFxTime, HitDef.PalFxAdd, HitDef.PalFxMul, HitDef.PalFxSinAdd, HitDef.PalFxInvert, HitDef.PalFxBaseColor); if (IsFalling == true) { Int32 neededjugglepoints = EvaluationHelper.AsInt32(Attacker, Attacker.StateManager.CurrentState.JugglePoints, 0); m_character.JugglePoints -= neededjugglepoints; } } }
void DoEnvShake(HitDefinition hitdef, EnvironmentShake envshake) { if (hitdef == null) { throw new ArgumentNullException("hitdef"); } if (envshake == null) { throw new ArgumentNullException("envshake"); } if (hitdef.EnvShakeTime == 0) { return; } envshake.Set(hitdef.EnvShakeTime, hitdef.EnvShakeFrequency, hitdef.EnvShakeAmplitude, hitdef.EnvShakePhase); }
public OffensiveInfo(Character character) { if (character == null) throw new ArgumentNullException("character"); m_character = character; m_hitdef = new HitDefinition(); m_hitpausetime = 0; m_isactive = false; m_movecontact = 0; m_moveguarded = 0; m_movehit = 0; m_movereversed = 0; m_attackmultiplier = 1; m_hitcount = 0; m_uniquehitcount = 0; m_projectileinfo = new ProjectileInfo(); m_targetlist = new List<Character>(); }
private bool InGuardDistance(Entity attacker, Character target, HitDefinition hitdef) { if (attacker == null) { throw new ArgumentNullException(nameof(attacker)); } if (target == null) { throw new ArgumentNullException(nameof(target)); } if (hitdef == null) { throw new ArgumentNullException(nameof(hitdef)); } var distance = Math.Abs(attacker.CurrentLocation.X - target.CurrentLocation.X); return(distance <= hitdef.GuardDistance); }
Boolean InGuardDistance(Entity attacker, Character target, HitDefinition hitdef) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } Single distance = Math.Abs(attacker.CurrentLocation.X - target.CurrentLocation.X); return(distance <= hitdef.GuardDistance); }
public OffensiveInfo(Character character) { if (character == null) { throw new ArgumentNullException(nameof(character)); } m_character = character; m_hitdef = new HitDefinition(); m_hitpausetime = 0; m_isactive = false; m_movecontact = 0; m_moveguarded = 0; m_movehit = 0; m_movereversed = 0; m_attackmultiplier = 1; m_hitcount = 0; m_uniquehitcount = 0; m_projectileinfo = new ProjectileInfo(); m_targetlist = new List <Character>(); }
void SetFacing(Character attacker, Character target, HitDefinition hitdef) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } if (hitdef.P1Facing == -1) { attacker.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing); } if (hitdef.P1GetP2Facing == -1) { attacker.CurrentFacing = Misc.FlipFacing(target.CurrentFacing); } if (hitdef.P1GetP2Facing == 1) { attacker.CurrentFacing = target.CurrentFacing; } if (hitdef.P2Facing == 1) { target.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing); } if (hitdef.P2Facing == -1) { target.CurrentFacing = attacker.CurrentFacing; } }
public DefensiveInfo(Character character) { if (character == null) throw new ArgumentNullException("character"); m_character = character; m_hitdef = new HitDefinition(); m_blocked = false; m_killed = false; m_hitstatetype = StateType.None; m_hitshaketime = 0; m_defensemultiplier = 1; m_attacker = null; m_hittime = 0; m_hitby1 = new HitBy(); m_hitby2 = new HitBy(); m_isfalling = false; m_hitoverrides = new List<HitOverride>(); for (Int32 i = 0; i != 8; ++i) m_hitoverrides.Add(new HitOverride()); m_hitcount = 0; }
public Contact(Character attacker, Character target, HitDefinition hitdef, ContactType type) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } if (type == ContactType.None) { throw new ArgumentOutOfRangeException("type"); } m_attacker = attacker; m_target = target; m_hitdef = hitdef; m_type = type; }
void OnAttackBlock(Character attacker, Character target, HitDefinition hitdef) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } target.DefensiveInfo.HitTime = hitdef.GuardHitTime; ApplyDamage(attacker, target, hitdef.GuardDamage, hitdef.CanGuardKill); switch (target.DefensiveInfo.HitStateType) { case StateType.Standing: target.StateManager.ChangeState(StateMachine.StateNumber.StandingGuardHitShaking); break; case StateType.Airborne: target.StateManager.ChangeState(StateMachine.StateNumber.AirGuardHitShaking); break; case StateType.Crouching: target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingGuardHitShaking); break; default: throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType"); } }
void OnAttackBlock(Character attacker, Character target, HitDefinition hitdef) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); target.DefensiveInfo.HitTime = hitdef.GuardHitTime; ApplyDamage(attacker, target, hitdef.GuardDamage, hitdef.CanGuardKill); switch (target.DefensiveInfo.HitStateType) { case StateType.Standing: target.StateManager.ChangeState(StateMachine.StateNumber.StandingGuardHitShaking); break; case StateType.Airborne: target.StateManager.ChangeState(StateMachine.StateNumber.AirGuardHitShaking); break; case StateType.Crouching: target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingGuardHitShaking); break; default: throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType"); } }
Boolean CanBlock(Entity attacker, Character target, HitDefinition hitdef, Boolean rangecheck) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); if (rangecheck == true && Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false) return false; if (hitdef.Targeting == AffectTeam.None) return false; if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team)) return false; if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team)) return false; if (target.CommandManager.IsActive("holdback") == false) return false; if (InGuardDistance(attacker, target, hitdef) == false) return false; if (target.StateType == StateType.Airborne && (hitdef.GuardFlag.HitAir == false || target.Assertions.NoAirGuard == true)) return false; if (target.StateType == StateType.Standing && (hitdef.GuardFlag.HitHigh == false || target.Assertions.NoStandingGuard == true)) return false; if (target.StateType == StateType.Crouching && (hitdef.GuardFlag.HitLow == false || target.Assertions.NoCrouchingGuard == true)) return false; if (target.StateType == StateType.Prone) return false; if (target.Life <= hitdef.GuardDamage && hitdef.CanGuardKill == true) return false; return true; }
void OnAttackHit(Character attacker, Character target, HitDefinition hitdef) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); ApplyDamage(attacker, target, hitdef.HitDamage, hitdef.CanKill); if (target.Life == 0) { target.DefensiveInfo.Killed = true; hitdef.Fall = true; } switch (target.DefensiveInfo.HitStateType) { case StateType.Standing: case StateType.Crouching: case StateType.Prone: target.DefensiveInfo.HitTime = hitdef.GroundHitTime; break; case StateType.Airborne: target.DefensiveInfo.HitTime = hitdef.AirHitTime; break; default: throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType"); } if (hitdef.P1NewState != null) { attacker.StateManager.ChangeState(hitdef.P1NewState.Value); } if (hitdef.P2NewState != null) { if (hitdef.P2UseP1State == true) { target.StateManager.ForeignManager = attacker.StateManager; target.StateManager.ChangeState(hitdef.P2NewState.Value); } else { target.StateManager.ForeignManager = null; target.StateManager.ChangeState(hitdef.P2NewState.Value); } } else { target.StateManager.ForeignManager = null; if (hitdef.GroundAttackEffect == AttackEffect.Trip) { target.StateManager.ChangeState(StateMachine.StateNumber.HitTrip); } else { switch (target.DefensiveInfo.HitStateType) { case StateType.Standing: target.StateManager.ChangeState(StateMachine.StateNumber.StandingHitShaking); break; case StateType.Crouching: target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingHitShaking); break; case StateType.Airborne: target.StateManager.ChangeState(StateMachine.StateNumber.AirHitShaking); break; case StateType.Prone: target.StateManager.ChangeState(StateMachine.StateNumber.HitProneShaking); break; default: throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType"); } } } }
Boolean InGuardDistance(Entity attacker, Character target, HitDefinition hitdef) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); Single distance = Math.Abs(attacker.CurrentLocation.X - target.CurrentLocation.X); return distance <= hitdef.GuardDistance; }
void SetFacing(Character attacker, Character target, HitDefinition hitdef) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); if (hitdef.P1Facing == -1) attacker.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing); if (hitdef.P1GetP2Facing == -1) attacker.CurrentFacing = Misc.FlipFacing(target.CurrentFacing); if (hitdef.P1GetP2Facing == 1) attacker.CurrentFacing = target.CurrentFacing; if (hitdef.P2Facing == 1) target.CurrentFacing = Misc.FlipFacing(attacker.CurrentFacing); if (hitdef.P2Facing == -1) target.CurrentFacing = attacker.CurrentFacing; }
public void Set(HitDefinition other) { if (other == null) { throw new ArgumentNullException(nameof(other)); } HitAttribute = other.HitAttribute; HitFlag = other.HitFlag; GuardFlag = other.GuardFlag; Targeting = other.Targeting; GroundAnimationType = other.GroundAnimationType; AirAnimationType = other.AirAnimationType; FallAnimationType = other.FallAnimationType; HitPriority = other.HitPriority; HitDamage = other.HitDamage; GuardDamage = other.GuardDamage; PauseTime = other.PauseTime; ShakeTime = other.ShakeTime; GuardPauseTime = other.GuardPauseTime; GuardShakeTime = other.GuardShakeTime; PlayerSpark = other.PlayerSpark; SparkAnimation = other.SparkAnimation; GuardPlayerSpark = other.GuardPlayerSpark; GuardSparkAnimation = other.GuardSparkAnimation; SparkStartPosition = other.SparkStartPosition; PlayerSound = other.PlayerSound; HitSoundId = other.HitSoundId; GuardPlayerSound = other.GuardPlayerSound; GuardSoundId = other.GuardSoundId; GroundAttackEffect = other.GroundAttackEffect; AirAttackEffect = other.AirAttackEffect; GroundHitTime = other.GroundHitTime; DownHitTime = other.DownHitTime; AirHitTime = other.AirHitTime; GuardHitTime = other.GuardHitTime; GroundSlideTime = other.GroundSlideTime; GuardSlideTime = other.GuardSlideTime; GuardControlTime = other.GuardControlTime; AirGuardControlTime = other.AirGuardControlTime; GuardDistance = other.GuardDistance; YAcceleration = other.YAcceleration; GroundVelocity = other.GroundVelocity; AirVelocity = other.AirVelocity; DownVelocity = other.DownVelocity; GroundGuardVelocity = other.GroundGuardVelocity; AirGuardVelocity = other.AirGuardVelocity; GroundCornerPush = other.GroundCornerPush; AirCornerPush = other.AirCornerPush; DownCornerPush = other.DownCornerPush; GuardCornerPush = other.GuardCornerPush; AirGuardCornerPush = other.AirGuardCornerPush; JugglePointsNeeded = other.JugglePointsNeeded; MininumDistance = other.MininumDistance; MaximumDistance = other.MaximumDistance; SnapLocation = other.SnapLocation; P1SpritePriority = other.P1SpritePriority; P2SpritePriority = other.P2SpritePriority; P1Facing = other.P1Facing; P1GetP2Facing = other.P1GetP2Facing; P2Facing = other.P2Facing; P1NewState = other.P1NewState; P2UseP1State = other.P2UseP1State; P2NewState = other.P2NewState; ForceStand = other.ForceStand; Fall = other.Fall; AirFall = other.AirFall; FallVelocityX = other.FallVelocityX; FallVelocityY = other.FallVelocityY; FallCanRecover = other.FallCanRecover; FallRecoverTime = other.FallRecoverTime; FallDamage = other.FallDamage; DownBounce = other.DownBounce; TargetId = other.TargetId; ChainId = other.ChainId; NoChainId1 = other.NoChainId1; NoChainId2 = other.NoChainId2; HitOnce = other.HitOnce; CanKill = other.CanKill; CanGuardKill = other.CanGuardKill; CanFallKill = other.CanFallKill; NumberOfHits = other.NumberOfHits; P1HitPowerAdjustment = other.P1HitPowerAdjustment; P1GuardPowerAdjustment = other.P1GuardPowerAdjustment; P2HitPowerAdjustment = other.P2HitPowerAdjustment; P2GuardPowerAdjustment = other.P2GuardPowerAdjustment; PalFxTime = other.PalFxTime; PalFxAdd = other.PalFxAdd; PalFxMul = other.PalFxMul; PalFxSinAdd = other.PalFxSinAdd; PalFxInvert = other.PalFxInvert; PalFxBaseColor = other.PalFxBaseColor; EnvShakeTime = other.EnvShakeTime; EnvShakeFrequency = other.EnvShakeFrequency; EnvShakeAmplitude = other.EnvShakeAmplitude; EnvShakePhase = other.EnvShakePhase; EnvShakeFallTime = other.EnvShakeFallTime; EnvShakeFallFrequency = other.EnvShakeFallFrequency; EnvShakeFallAmplitude = other.EnvShakeFallAmplitude; EnvShakeFallPhase = other.EnvShakeFallPhase; }
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); } } }
Boolean CanHit(Entity attacker, Character target, HitDefinition hitdef) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } if (Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false) { return(false); } if (hitdef.Targeting == AffectTeam.None) { return(false); } if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team)) { return(false); } if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team)) { return(false); } if (target.StateType == StateType.Standing && hitdef.HitFlag.HitHigh == false) { return(false); } if (target.StateType == StateType.Crouching && hitdef.HitFlag.HitLow == false) { return(false); } if (target.StateType == StateType.Airborne && hitdef.HitFlag.HitAir == false) { return(false); } if (target.StateType == StateType.Prone && hitdef.HitFlag.HitDown == false) { return(false); } if (target.MoveType == MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.No) { return(false); } if (target.MoveType != MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.Yes) { return(false); } if (target.DefensiveInfo.HitBy1.CanHit(hitdef.HitAttribute) == false) { return(false); } if (target.DefensiveInfo.HitBy2.CanHit(hitdef.HitAttribute) == false) { return(false); } if (target.DefensiveInfo.IsFalling == true) { if (attacker is Player) { Player player = attacker as Player; #warning Juggling system is weird Int32 neededjugglepoints = EvaluationHelper.AsInt32(player, player.StateManager.CurrentState.JugglePoints, 0); //if (neededjugglepoints > target.JugglePoints) return false; } } return(true); }
Boolean CanBlock(Entity attacker, Character target, HitDefinition hitdef, Boolean rangecheck) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } if (rangecheck == true && Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false) { return(false); } if (hitdef.Targeting == AffectTeam.None) { return(false); } if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team)) { return(false); } if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team)) { return(false); } if (target.CommandManager.IsActive("holdback") == false) { return(false); } if (InGuardDistance(attacker, target, hitdef) == false) { return(false); } if (target.StateType == StateType.Airborne && (hitdef.GuardFlag.HitAir == false || target.Assertions.NoAirGuard == true)) { return(false); } if (target.StateType == StateType.Standing && (hitdef.GuardFlag.HitHigh == false || target.Assertions.NoStandingGuard == true)) { return(false); } if (target.StateType == StateType.Crouching && (hitdef.GuardFlag.HitLow == false || target.Assertions.NoCrouchingGuard == true)) { return(false); } if (target.StateType == StateType.Prone) { return(false); } if (target.Life <= hitdef.GuardDamage && hitdef.CanGuardKill == true) { return(false); } return(true); }
public void Set(HitDefinition other) { if (other == null) throw new ArgumentNullException("other"); HitAttribute = other.HitAttribute; HitFlag = other.HitFlag; GuardFlag = other.GuardFlag; Targeting = other.Targeting; GroundAnimationType = other.GroundAnimationType; AirAnimationType = other.AirAnimationType; FallAnimationType = other.FallAnimationType; HitPriority = other.HitPriority; HitDamage = other.HitDamage; GuardDamage = other.GuardDamage; PauseTime = other.PauseTime; ShakeTime = other.ShakeTime; GuardPauseTime = other.GuardPauseTime; GuardShakeTime = other.GuardShakeTime; PlayerSpark = other.PlayerSpark; SparkAnimation = other.SparkAnimation; GuardPlayerSpark = other.GuardPlayerSpark; GuardSparkAnimation = other.GuardSparkAnimation; SparkStartPosition = other.SparkStartPosition; PlayerSound = other.PlayerSound; HitSoundId = other.HitSoundId; GuardPlayerSound = other.GuardPlayerSound; GuardSoundId = other.GuardSoundId; GroundAttackEffect = other.GroundAttackEffect; AirAttackEffect = other.AirAttackEffect; GroundHitTime = other.GroundHitTime; DownHitTime = other.DownHitTime; AirHitTime = other.AirHitTime; GuardHitTime = other.GuardHitTime; GroundSlideTime = other.GroundSlideTime; GuardSlideTime = other.GuardSlideTime; GuardControlTime = other.GuardControlTime; AirGuardControlTime = other.AirGuardControlTime; GuardDistance = other.GuardDistance; YAcceleration = other.YAcceleration; GroundVelocity = other.GroundVelocity; AirVelocity = other.AirVelocity; DownVelocity = other.DownVelocity; GroundGuardVelocity = other.GroundGuardVelocity; AirGuardVelocity = other.AirGuardVelocity; GroundCornerPush = other.GroundCornerPush; AirCornerPush = other.AirCornerPush; DownCornerPush = other.DownCornerPush; GuardCornerPush = other.GuardCornerPush; AirGuardCornerPush = other.AirGuardCornerPush; JugglePointsNeeded = other.JugglePointsNeeded; MininumDistance = other.MininumDistance; MaximumDistance = other.MaximumDistance; SnapLocation = other.SnapLocation; P1SpritePriority = other.P1SpritePriority; P2SpritePriority = other.P2SpritePriority; P1Facing = other.P1Facing; P1GetP2Facing = other.P1GetP2Facing; P2Facing = other.P2Facing; P1NewState = other.P1NewState; P2UseP1State = other.P2UseP1State; P2NewState = other.P2NewState; ForceStand = other.ForceStand; Fall = other.Fall; AirFall = other.AirFall; FallVelocityX = other.FallVelocityX; FallVelocityY = other.FallVelocityY; FallCanRecover = other.FallCanRecover; FallRecoverTime = other.FallRecoverTime; FallDamage = other.FallDamage; DownBounce = other.DownBounce; TargetId = other.TargetId; ChainId = other.ChainId; NoChainId1 = other.NoChainId1; NoChainId2 = other.NoChainId2; HitOnce = other.HitOnce; CanKill = other.CanKill; CanGuardKill = other.CanGuardKill; CanFallKill = other.CanFallKill; NumberOfHits = other.NumberOfHits; P1HitPowerAdjustment = other.P1HitPowerAdjustment; P1GuardPowerAdjustment = other.P1GuardPowerAdjustment; P2HitPowerAdjustment = other.P2HitPowerAdjustment; P2GuardPowerAdjustment = other.P2GuardPowerAdjustment; PalFxTime = other.PalFxTime; PalFxAdd = other.PalFxAdd; PalFxMul = other.PalFxMul; PalFxSinAdd = other.PalFxSinAdd; PalFxInvert = other.PalFxInvert; PalFxBaseColor = other.PalFxBaseColor; EnvShakeTime = other.EnvShakeTime; EnvShakeFrequency = other.EnvShakeFrequency; EnvShakeAmplitude = other.EnvShakeAmplitude; EnvShakePhase = other.EnvShakePhase; EnvShakeFallTime = other.EnvShakeFallTime; EnvShakeFallFrequency = other.EnvShakeFallFrequency; EnvShakeFallAmplitude = other.EnvShakeFallAmplitude; EnvShakeFallPhase = other.EnvShakeFallPhase; }
Boolean CanHit(Entity attacker, Character target, HitDefinition hitdef) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); if (Collision.HasCollision(attacker, ClsnType.Type1Attack, target, ClsnType.Type2Normal) == false) return false; if (hitdef.Targeting == AffectTeam.None) return false; if (((hitdef.Targeting & AffectTeam.Enemy) != AffectTeam.Enemy) && (attacker.Team != target.Team)) return false; if (((hitdef.Targeting & AffectTeam.Friendly) != AffectTeam.Friendly) && (attacker.Team == target.Team)) return false; if (target.StateType == StateType.Standing && hitdef.HitFlag.HitHigh == false) return false; if (target.StateType == StateType.Crouching && hitdef.HitFlag.HitLow == false) return false; if (target.StateType == StateType.Airborne && hitdef.HitFlag.HitAir == false) return false; if (target.StateType == StateType.Prone && hitdef.HitFlag.HitDown == false) return false; if (target.MoveType == MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.No) return false; if (target.MoveType != MoveType.BeingHit && hitdef.HitFlag.ComboFlag == HitFlagCombo.Yes) return false; if (target.DefensiveInfo.HitBy1.CanHit(hitdef.HitAttribute) == false) return false; if (target.DefensiveInfo.HitBy2.CanHit(hitdef.HitAttribute) == false) return false; if (target.DefensiveInfo.IsFalling == true) { if (attacker is Player) { Player player = attacker as Player; #warning Juggling system is weird Int32 neededjugglepoints = EvaluationHelper.AsInt32(player, player.StateManager.CurrentState.JugglePoints, 0); //if (neededjugglepoints > target.JugglePoints) return false; } } return true; }
void OnAttackHit(Character attacker, Character target, HitDefinition hitdef) { if (attacker == null) { throw new ArgumentNullException("attacker"); } if (target == null) { throw new ArgumentNullException("target"); } if (hitdef == null) { throw new ArgumentNullException("hitdef"); } ApplyDamage(attacker, target, hitdef.HitDamage, hitdef.CanKill); if (target.Life == 0) { target.DefensiveInfo.Killed = true; hitdef.Fall = true; } switch (target.DefensiveInfo.HitStateType) { case StateType.Standing: case StateType.Crouching: case StateType.Prone: target.DefensiveInfo.HitTime = hitdef.GroundHitTime; break; case StateType.Airborne: target.DefensiveInfo.HitTime = hitdef.AirHitTime; break; default: throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType"); } if (hitdef.P1NewState != null) { attacker.StateManager.ChangeState(hitdef.P1NewState.Value); } if (hitdef.P2NewState != null) { if (hitdef.P2UseP1State == true) { target.StateManager.ForeignManager = attacker.StateManager; target.StateManager.ChangeState(hitdef.P2NewState.Value); } else { target.StateManager.ForeignManager = null; target.StateManager.ChangeState(hitdef.P2NewState.Value); } } else { target.StateManager.ForeignManager = null; if (hitdef.GroundAttackEffect == AttackEffect.Trip) { target.StateManager.ChangeState(StateMachine.StateNumber.HitTrip); } else { switch (target.DefensiveInfo.HitStateType) { case StateType.Standing: target.StateManager.ChangeState(StateMachine.StateNumber.StandingHitShaking); break; case StateType.Crouching: target.StateManager.ChangeState(StateMachine.StateNumber.CrouchingHitShaking); break; case StateType.Airborne: target.StateManager.ChangeState(StateMachine.StateNumber.AirHitShaking); break; case StateType.Prone: target.StateManager.ChangeState(StateMachine.StateNumber.HitProneShaking); break; default: throw new ArgumentOutOfRangeException("target.DefensiveInfo.HitStateType"); } } } }
void OnAttack(Character attacker, Character target, HitDefinition hitdef, Boolean blocked) { if (attacker == null) throw new ArgumentNullException("attacker"); if (target == null) throw new ArgumentNullException("target"); if (hitdef == null) throw new ArgumentNullException("hitdef"); target.DefensiveInfo.OnHit(hitdef, attacker, blocked); HitDefinition myhitdef = target.DefensiveInfo.HitDef; attacker.OffensiveInfo.OnHit(myhitdef, target, blocked); SetFacing(attacker, target, myhitdef); if (blocked == false) { DoEnvShake(myhitdef, attacker.Engine.EnvironmentShake); PlaySound(attacker, target, myhitdef.HitSoundId, myhitdef.PlayerSound); MakeSpark(attacker, target, myhitdef.SparkAnimation, myhitdef.SparkStartPosition, myhitdef.PlayerSpark); } else { PlaySound(attacker, target, myhitdef.GuardSoundId, myhitdef.GuardPlayerSound); MakeSpark(attacker, target, myhitdef.GuardSparkAnimation, myhitdef.SparkStartPosition, myhitdef.GuardPlayerSpark); } HitOverride hitoverride = target.DefensiveInfo.GetOverride(myhitdef); if (hitoverride != null) { if (hitoverride.ForceAir == true) myhitdef.Fall = true; target.StateManager.ForeignManager = null; target.StateManager.ChangeState(hitoverride.StateNumber); } else { if (blocked == false) { OnAttackHit(attacker, target, myhitdef); } else { OnAttackBlock(attacker, target, myhitdef); } } }
public HitOverride GetOverride(HitDefinition hitdef) { if (hitdef == null) throw new ArgumentNullException("hitdef"); foreach (HitOverride hitoverride in HitOverrides) { if (hitoverride.IsActive == false) continue; if (hitoverride.Attribute.HasHeight(hitdef.HitAttribute.AttackHeight) == false) continue; foreach (HitType hittype in hitdef.HitAttribute.AttackData) if (hitoverride.Attribute.HasData(hittype) == false) continue; return hitoverride; } return null; }
void DoEnvShake(HitDefinition hitdef, EnvironmentShake envshake) { if (hitdef == null) throw new ArgumentNullException("hitdef"); if (envshake == null) throw new ArgumentNullException("envshake"); if (hitdef.EnvShakeTime == 0) return; envshake.Set(hitdef.EnvShakeTime, hitdef.EnvShakeFrequency, hitdef.EnvShakeAmplitude, hitdef.EnvShakePhase); }
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); } } }