Browse Source

refactor: 🎨 rebuild the CD system

tags/0.1.0
shangfengh 2 years ago
parent
commit
fb13679bc0
7 changed files with 60 additions and 31 deletions
  1. +22
    -2
      logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs
  2. +27
    -11
      logic/GameClass/GameObj/Bullet/Bullet.cs
  3. +1
    -1
      logic/GameClass/GameObj/Character/Character.Skill.cs
  4. +3
    -0
      logic/GameClass/GameObj/Character/Character.cs
  5. +4
    -4
      logic/Gaming/Game.cs
  6. +2
    -12
      logic/Preparation/Interface/IOccupation.cs
  7. +1
    -1
      logic/Preparation/Utility/GameData.cs

+ 22
- 2
logic/GameClass/GameObj/Bullet/Bullet.Ghost.cs View File

@@ -15,9 +15,13 @@ namespace GameClass.GameObj
public override int AP => GameData.basicApOfGhost;
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;
@@ -41,9 +45,13 @@ namespace GameClass.GameObj
public override int AP => GameData.basicApOfGhost / 5 * 4;
public override int Speed => GameData.basicBulletMoveSpeed * 2;
public override bool IsToBomb => false;

public override int CastTime => GameData.basicCastTime;
public override int Backswing => GameData.basicBackswing / 5 * 3;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit / 4 * 3;
public override int Backswing => GameData.basicBackswing / 5 * 2;
public override int RecoveryFromHit => GameData.basicBackswing / 4 * 3;
public const int cd = GameData.basicBackswing / 5 * 2 + 100;
public override int CD => cd;

public override bool CanAttack(GameObj target)
{
return false;
@@ -68,9 +76,13 @@ namespace GameClass.GameObj
public override double BulletAttackRange => GameData.basicAttackShortRange / 9 * 7;
public override int AP => GameData.basicApOfGhost / 3 * 7;
public override int Speed => GameData.basicBulletMoveSpeed / 3 * 2;

public override int CastTime => GameData.basicCastTime;
public override int Backswing => GameData.basicBackswing;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit;
public const int cd = GameData.basicCD;
public override int CD => cd;

public override bool IsToBomb => true;
public override bool CanAttack(GameObj target)
{
@@ -97,9 +109,13 @@ namespace GameClass.GameObj
public override double BulletAttackRange => GameData.basicAttackShortRange / 2;
public override int AP => GameData.basicApOfGhost / 6 * 5;
public override int Speed => GameData.basicBulletMoveSpeed / 6 * 5;

public override int CastTime => GameData.basicCastTime;
public override int Backswing => GameData.basicBackswing;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit;
public const int cd = GameData.basicCD;
public override int CD => cd;

public override bool IsToBomb => true;
public override bool CanAttack(GameObj target)
{
@@ -128,6 +144,8 @@ namespace GameClass.GameObj
public override int CastTime => GameData.basicCastTime;
public override int Backswing => GameData.basicBackswing;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit;
public const int cd = GameData.basicCD;
public override int CD => cd;
public override bool IsToBomb => true;

public override bool CanAttack(GameObj target)
@@ -157,6 +175,8 @@ namespace GameClass.GameObj
public override int CastTime => GameData.basicCastTime;
public override int Backswing => GameData.basicBackswing;
public override int RecoveryFromHit => GameData.basicRecoveryFromHit;
public const int cd = GameData.basicCD;
public override int CD => cd;
public override bool IsToBomb => true;

public override bool CanBeBombed(GameObjType gameObjType)


+ 27
- 11
logic/GameClass/GameObj/Bullet/Bullet.cs View File

@@ -17,6 +17,7 @@ namespace GameClass.GameObj
public abstract int CastTime { get; }
public abstract int Backswing { get; }
public abstract int RecoveryFromHit { get; }
public abstract int CD { get; }

private readonly bool hasSpear;
/// <summary>
@@ -56,25 +57,23 @@ namespace GameClass.GameObj
{
public static Bullet? GetBullet(Character character, PlaceType place, XY pos)
{
Bullet? newBullet = null;
switch (character.BulletOfPlayer)
{
case BulletType.FlyingKnife:
return new FlyingKnife(character, place, pos);
case BulletType.CommonAttackOfGhost:
return new CommonAttackOfGhost(character, place, pos);
case BulletType.AtomBomb:
newBullet = new AtomBomb(character, place, pos);
break;
return new AtomBomb(character, place, pos);
case BulletType.LineBullet:
newBullet = new LineBullet(character, place, pos);
break;
return new LineBullet(character, place, pos);
case BulletType.FastBullet:
newBullet = new FastBullet(character, place, pos);
break;
return new FastBullet(character, place, pos);
case BulletType.OrdinaryBullet:
newBullet = new OrdinaryBullet(character, place, pos);
break;
return new OrdinaryBullet(character, place, pos);
default:
break;
return null;
}
return newBullet;
}
public static int BulletRadius(BulletType bulletType)
{
@@ -84,9 +83,26 @@ namespace GameClass.GameObj
case BulletType.LineBullet:
case BulletType.FastBullet:
case BulletType.OrdinaryBullet:
case BulletType.FlyingKnife:
default:
return GameData.bulletRadius;
}
}
public static int BulletCD(BulletType bulletType)
{
switch (bulletType)
{
case BulletType.CommonAttackOfGhost:
return CommonAttackOfGhost.cd;
case BulletType.FlyingKnife:
return FlyingKnife.cd;
case BulletType.AtomBomb:
case BulletType.LineBullet:
case BulletType.FastBullet:
case BulletType.OrdinaryBullet:
default:
return GameData.basicCD;
}
}
}
}

+ 1
- 1
logic/GameClass/GameObj/Character/Character.Skill.cs View File

@@ -77,7 +77,7 @@ namespace GameClass.GameObj
this.hp = Occupation.MaxHp;
this.OrgMoveSpeed = Occupation.MoveSpeed;
this.moveSpeed = Occupation.MoveSpeed;
this.cd = Occupation.CD;
this.OrgCD = this.cd = BulletFactory.BulletCD(Occupation.InitBullet);
this.maxBulletNum = Occupation.MaxBulletNum;
this.bulletNum = maxBulletNum;
this.bulletOfPlayer = Occupation.InitBullet;


+ 3
- 0
logic/GameClass/GameObj/Character/Character.cs View File

@@ -45,7 +45,10 @@ namespace GameClass.GameObj
set
{
lock (gameObjLock)
{
bulletOfPlayer = value;
CD = BulletFactory.BulletCD(value);
}
}
}



+ 4
- 4
logic/Gaming/Game.cs View File

@@ -54,7 +54,7 @@ namespace Gaming
() =>
{
while (!gameMap.Timer.IsGaming)
Thread.Sleep(newPlayer.CD);
Thread.Sleep(Math.Max(newPlayer.CD, GameData.checkInterval));
long lastTime = Environment.TickCount64;
new FrameRateTaskExecutor<int>(
loopCondition: () => gameMap.Timer.IsGaming && !newPlayer.IsResetting,
@@ -63,7 +63,7 @@ namespace Gaming
long nowTime = Environment.TickCount64;
if (newPlayer.BulletNum == newPlayer.MaxBulletNum)
lastTime = nowTime;
if (nowTime - lastTime >= newPlayer.CD)
else if (nowTime - lastTime >= newPlayer.CD)
{
_ = newPlayer.TryAddBulletNum();
lastTime = nowTime;
@@ -91,7 +91,7 @@ namespace Gaming
() =>
{
while (!gameMap.Timer.IsGaming)
Thread.Sleep((int)GameData.checkInterval);
Thread.Sleep(GameData.checkInterval);
int TimePinningDown = 0, ScoreAdded = 0;
new FrameRateTaskExecutor<int>(
loopCondition: () => gameMap.Timer.IsGaming && !newPlayer.IsResetting,
@@ -124,7 +124,7 @@ namespace Gaming
newPlayer.AddBgm(BgmType.GhostIsComing, (double)newPlayer.AlertnessRadius / XY.Distance(newPlayer.Position, person.Position));
if (XY.Distance(newPlayer.Position, person.Position) <= GameData.basicViewRange)
{
TimePinningDown += (int)GameData.checkInterval;
TimePinningDown += GameData.checkInterval;
newPlayer.AddScore(GameData.StudentScorePinDown(TimePinningDown) - ScoreAdded);
ScoreAdded = GameData.StudentScorePinDown(TimePinningDown);
}


+ 2
- 12
logic/Preparation/Interface/IOccupation.cs View File

@@ -8,7 +8,6 @@ namespace Preparation.Interface
public int MoveSpeed { get; }
public int MaxHp { get; }
public BulletType InitBullet { get; }
public int CD { get; }
public int MaxBulletNum { get; }
public List<ActiveSkillType> ListOfIActiveSkill { get; }
public List<PassiveSkillType> ListOfIPassiveSkill { get; }
@@ -38,9 +37,6 @@ namespace Preparation.Interface
private const int maxHp = GameData.basicHp;
public int MaxHp => maxHp;

public const int cd = 0;
public int CD => cd;

public const int maxBulletNum = 1;
public int MaxBulletNum => maxBulletNum;

@@ -69,15 +65,12 @@ namespace Preparation.Interface
}
public class Teacher : IStudent
{
private const int moveSpeed = GameData.basicMoveSpeed / 38 * 40;
private const int moveSpeed = GameData.basicMoveSpeed / 42 * 36;
public int MoveSpeed => moveSpeed;

private const int maxHp = GameData.basicHp / 30 * 32;
private const int maxHp = GameData.basicHp * 10;
public int MaxHp => maxHp;

public const int cd = 0;
public int CD => cd;

public const int maxBulletNum = 0;
public int MaxBulletNum => maxBulletNum;

@@ -118,9 +111,6 @@ namespace Preparation.Interface
private const int maxHp = GameData.basicHp / 30 * 32;
public int MaxHp => maxHp;

public const int cd = 0;
public int CD => cd;

public const int maxBulletNum = 0;
public int MaxBulletNum => maxBulletNum;



+ 1
- 1
logic/Preparation/Utility/GameData.cs View File

@@ -8,7 +8,7 @@ namespace Preparation.Utility
#region 基本常数
public const int numOfStepPerSecond = 20; // 每秒行走的步数
public const int frameDuration = 50; // 每帧时长
public const long checkInterval = 50; // 检查位置标志、补充子弹的帧时长
public const int checkInterval = 50; // 检查位置标志、补充子弹的帧时长

public const long gameDuration = 600000; // 游戏时长600000ms = 10min



Loading…
Cancel
Save