using Preparation.Interface; using Preparation.Utility; using System; namespace GameClass.GameObj { internal sealed class CommonAttackOfGhost : Bullet { public CommonAttackOfGhost(Character player, PlaceType placeType, XY pos, int radius = GameData.bulletRadius) : base(player, radius, placeType, pos) { } public override double BulletBombRange => 0; public override double BulletAttackRange => GameData.basicAttackShortRange; public int ap = GameData.basicApOfGhost; public override int AP { get => ap; set { lock (gameObjLock) ap = value; } } public override int Speed => GameData.basicBulletMoveSpeed; public override bool IsToBomb => false; public override int CastTime => GameData.basicCastTime; public override int Backswing => GameData.basicBackswing; public override int RecoveryFromHit => GameData.basicRecoveryFromHit; public const int cd = GameData.basicBackswing; public override int CD => cd; public override bool CanAttack(GameObj target) { return false; } public override bool CanBeBombed(GameObjType gameObjType) { if (gameObjType == GameObjType.Character) return true; return false; } public override BulletType TypeOfBullet => BulletType.CommonAttackOfGhost; } internal sealed class FlyingKnife : Bullet { public FlyingKnife(Character player, PlaceType placeType, XY pos, int radius = GameData.bulletRadius) : base(player, radius, placeType, pos) { } public override double BulletBombRange => 0; public override double BulletAttackRange => GameData.basicRemoteAttackRange * 13; public int ap = GameData.basicApOfGhost * 4 / 5; public override int AP { get => ap; set { lock (gameObjLock) ap = value; } } public override int Speed => GameData.basicBulletMoveSpeed * 2; public override bool IsToBomb => false; public override int CastTime => GameData.basicCastTime; public override int Backswing => GameData.basicBackswing * 2 / 5; public override int RecoveryFromHit => GameData.basicBackswing * 3 / 4; public const int cd = GameData.basicBackswing * 2 / 5 + 100; public override int CD => cd; public override bool CanAttack(GameObj target) { return false; } public override bool CanBeBombed(GameObjType gameObjType) { if (gameObjType == GameObjType.Character) return true; return false; } public override BulletType TypeOfBullet => BulletType.FlyingKnife; } }