From 6699852ef7f477b9d8171b2f0d5a3e80df170e8d Mon Sep 17 00:00:00 2001 From: 964293341 Date: Wed, 1 Nov 2023 12:52:36 +0800 Subject: [PATCH 1/5] refactor(Map): use AreaFactory in Map --- logic/GameClass/GameObj/Map/Map.cs | 27 ++------------------------- logic/Gaming/ShipManager.cs | 2 +- 2 files changed, 3 insertions(+), 26 deletions(-) diff --git a/logic/GameClass/GameObj/Map/Map.cs b/logic/GameClass/GameObj/Map/Map.cs index 2f4c4595..5a09727d 100644 --- a/logic/GameClass/GameObj/Map/Map.cs +++ b/logic/GameClass/GameObj/Map/Map.cs @@ -260,7 +260,7 @@ public bool RemoveJustFromMap(GameObj gameObj) GameObjLockDict[gameObj.Type].ExitWriteLock(); } } - public void Add(GameObj gameObj) + public void Add(IGameObj gameObj) { GameObjLockDict[gameObj.Type].EnterWriteLock(); try @@ -290,30 +290,7 @@ public Map(uint[,] mapResource) { for (int j = 0; j < GameData.MapCols; ++j) { - switch (mapResource[i, j]) - { - case (uint)PlaceType.Asteroid: - Add(new Areas.Asteroid(GameData.GetCellCenterPos(i, j))); - break; - case (uint)PlaceType.Construction: - Add(new Areas.Construction(GameData.GetCellCenterPos(i, j))); - break; - case (uint)PlaceType.Home: - Add(new Areas.Home(GameData.GetCellCenterPos(i, j))); - break; - case (uint)PlaceType.Resource: - Add(new Areas.Resource(GameData.GetCellCenterPos(i, j))); - break; - case (uint)PlaceType.Ruin: - Add(new Areas.Ruin(GameData.GetCellCenterPos(i, j))); - break; - case (uint)PlaceType.Shadow: - Add(new Areas.Shadow(GameData.GetCellCenterPos(i, j))); - break; - case (uint)PlaceType.Wormhole: - Add(new Areas.Wormhole(GameData.GetCellCenterPos(i, j))); - break; - } + Add(Areas.AreaFactory.GetArea(GameData.GetCellCenterPos(i, j), (PlaceType)mapResource[i, j])); } } } diff --git a/logic/Gaming/ShipManager.cs b/logic/Gaming/ShipManager.cs index 77f98b13..ed55ef27 100644 --- a/logic/Gaming/ShipManager.cs +++ b/logic/Gaming/ShipManager.cs @@ -13,7 +13,7 @@ private partial class ShipManager readonly Map gameMap; public Ship? AddShip(XY pos, long teamID, long shipID, ShipType shipType) { - Ship newShip = new Ship(pos, GameData.ShipRadius, shipType); + Ship newShip = new(pos, GameData.ShipRadius, shipType); gameMap.Add(newShip); newShip.TeamID.SetReturnOri(teamID); newShip.ShipID.SetReturnOri(shipID); From 80d8112c845c8534216e2f98103a9a50c1d0bb99 Mon Sep 17 00:00:00 2001 From: 964293341 Date: Wed, 1 Nov 2023 12:53:47 +0800 Subject: [PATCH 2/5] feat(Map): :sparkles: add NullArea --- logic/GameClass/GameObj/Areas/AreaFactory.cs | 2 +- logic/GameClass/GameObj/Areas/NullArea.cs | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 logic/GameClass/GameObj/Areas/NullArea.cs diff --git a/logic/GameClass/GameObj/Areas/AreaFactory.cs b/logic/GameClass/GameObj/Areas/AreaFactory.cs index c2259b65..3e6fc797 100644 --- a/logic/GameClass/GameObj/Areas/AreaFactory.cs +++ b/logic/GameClass/GameObj/Areas/AreaFactory.cs @@ -13,7 +13,7 @@ public static class AreaFactory PlaceType.Resource => new Resource(pos), PlaceType.Construction => new Construction(pos), PlaceType.Wormhole => new Wormhole(pos), - _ => throw new System.NotImplementedException() + _ => new NullArea(pos) }; public static OutOfBoundBlock GetOutOfBoundBlock(XY pos) => new(pos); } diff --git a/logic/GameClass/GameObj/Areas/NullArea.cs b/logic/GameClass/GameObj/Areas/NullArea.cs new file mode 100644 index 00000000..342e6056 --- /dev/null +++ b/logic/GameClass/GameObj/Areas/NullArea.cs @@ -0,0 +1,13 @@ +using Preparation.Utility; + +namespace GameClass.GameObj.Areas; + +public class NullArea : Immovable +{ + public override bool IsRigid => false; + public override ShapeType Shape => ShapeType.Null; + public NullArea(XY initPos) + : base(initPos, int.MaxValue, GameObjType.Null) + { + } +} From c279906b00d72c1bf330263afdeaf3eb08f0a51e Mon Sep 17 00:00:00 2001 From: 964293341 Date: Wed, 1 Nov 2023 13:04:34 +0800 Subject: [PATCH 3/5] feat(Bullets): :sparkles: add NullBullet --- logic/GameClass/GameObj/Bullets/Arc.cs | 2 +- .../GameObj/Bullets/BulletFactory.cs | 2 +- logic/GameClass/GameObj/Bullets/NullBullet.cs | 21 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 logic/GameClass/GameObj/Bullets/NullBullet.cs diff --git a/logic/GameClass/GameObj/Bullets/Arc.cs b/logic/GameClass/GameObj/Bullets/Arc.cs index a45d8b47..b3a915bb 100644 --- a/logic/GameClass/GameObj/Bullets/Arc.cs +++ b/logic/GameClass/GameObj/Bullets/Arc.cs @@ -8,7 +8,7 @@ internal sealed class Arc : Bullet public Arc(Ship ship, XY pos, int radius = GameData.BulletRadius) : base(ship, radius, pos) { - Random random = new Random(); + Random random = new(); this.AP.SetReturnOri(random.Next(GameData.ArcDamageMin, GameData.ArcDamageMax)); } public override double BulletBombRange => 0; diff --git a/logic/GameClass/GameObj/Bullets/BulletFactory.cs b/logic/GameClass/GameObj/Bullets/BulletFactory.cs index 6dae1c49..2c11df48 100644 --- a/logic/GameClass/GameObj/Bullets/BulletFactory.cs +++ b/logic/GameClass/GameObj/Bullets/BulletFactory.cs @@ -11,6 +11,6 @@ public static class BulletFactory BulletType.Shell => new Shell(ship, pos), BulletType.Missile => new Missile(ship, pos), BulletType.Arc => new Arc(ship, pos), - _ => throw new System.NotImplementedException() + _ => new NullBullet(ship, pos) }; } \ No newline at end of file diff --git a/logic/GameClass/GameObj/Bullets/NullBullet.cs b/logic/GameClass/GameObj/Bullets/NullBullet.cs new file mode 100644 index 00000000..42d301f3 --- /dev/null +++ b/logic/GameClass/GameObj/Bullets/NullBullet.cs @@ -0,0 +1,21 @@ +using Preparation.Utility; + +namespace GameClass.GameObj.Bullets; + +internal sealed class NullBullet : Bullet +{ + public override double BulletBombRange => 0; + public override double AttackDistance => 0; + public override int Speed => 0; + public override int CastTime => 0; + public override int SwingTime => 0; + public override int CD => 0; + public override int MaxBulletNum => 0; + public override BulletType TypeOfBullet => BulletType.Null; + public override bool CanAttack(GameObj target) => false; + public override bool CanBeBombed(GameObjType gameObjType) => false; + public NullBullet(Ship ship, XY Position, int radius = GameData.BulletRadius) + : base(ship, radius, Position) + { + } +} From b4cc25838807a7a5bc94df0f78cb09d5b63001b9 Mon Sep 17 00:00:00 2001 From: 964293341 Date: Wed, 1 Nov 2023 15:10:44 +0800 Subject: [PATCH 4/5] feat(Occupations): :sparkles: add NullOccupation --- logic/GameClass/GameObj/Occupations/NullOccupation.cs | 10 ++++++++++ .../GameClass/GameObj/Occupations/OccupationFactory.cs | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 logic/GameClass/GameObj/Occupations/NullOccupation.cs diff --git a/logic/GameClass/GameObj/Occupations/NullOccupation.cs b/logic/GameClass/GameObj/Occupations/NullOccupation.cs new file mode 100644 index 00000000..8e42ab7d --- /dev/null +++ b/logic/GameClass/GameObj/Occupations/NullOccupation.cs @@ -0,0 +1,10 @@ +using Preparation.Interface; + +namespace GameClass.GameObj.Occupations; + +public class NullOccupation : IOccupation +{ + public int MoveSpeed => 0; + public int MaxHp => 0; + public int ViewRange => 0; +} diff --git a/logic/GameClass/GameObj/Occupations/OccupationFactory.cs b/logic/GameClass/GameObj/Occupations/OccupationFactory.cs index 8ee514a1..78737e04 100644 --- a/logic/GameClass/GameObj/Occupations/OccupationFactory.cs +++ b/logic/GameClass/GameObj/Occupations/OccupationFactory.cs @@ -10,6 +10,6 @@ public static class OccupationFactory ShipType.CivilShip => new CivilShip(), ShipType.WarShip => new WarShip(), ShipType.FlagShip => new FlagShip(), - _ => throw new System.NotImplementedException(), + _ => new NullOccupation() }; } \ No newline at end of file From b181e0fc2c26440af6ba90cd3a6ac8c8a47606c5 Mon Sep 17 00:00:00 2001 From: 964293341 Date: Wed, 1 Nov 2023 15:27:38 +0800 Subject: [PATCH 5/5] feat(Modules): :sparkles: add NullModules --- .../GameObj/Modules/ModuleFactory.cs | 36 +++++++++---------- .../GameObj/Modules/NullModules/NullArmor.cs | 9 +++++ .../Modules/NullModules/NullConstructor.cs | 9 +++++ .../Modules/NullModules/NullProducer.cs | 9 +++++ .../GameObj/Modules/NullModules/NullShield.cs | 9 +++++ .../GameObj/Modules/NullModules/NullWeapon.cs | 10 ++++++ 6 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 logic/GameClass/GameObj/Modules/NullModules/NullArmor.cs create mode 100644 logic/GameClass/GameObj/Modules/NullModules/NullConstructor.cs create mode 100644 logic/GameClass/GameObj/Modules/NullModules/NullProducer.cs create mode 100644 logic/GameClass/GameObj/Modules/NullModules/NullShield.cs create mode 100644 logic/GameClass/GameObj/Modules/NullModules/NullWeapon.cs diff --git a/logic/GameClass/GameObj/Modules/ModuleFactory.cs b/logic/GameClass/GameObj/Modules/ModuleFactory.cs index aef2dd48..61e8d9b8 100644 --- a/logic/GameClass/GameObj/Modules/ModuleFactory.cs +++ b/logic/GameClass/GameObj/Modules/ModuleFactory.cs @@ -12,14 +12,14 @@ public static class ModuleFactory ProducerType.Producer1 => new CivilProducer1(), ProducerType.Producer2 => new CivilProducer2(), ProducerType.Producer3 => new CivilProducer3(), - _ => throw new System.NotImplementedException() + _ => new NullProducer() }, ShipType.FlagShip => producerType switch { ProducerType.Producer1 => new FlagProducer1(), - _ => throw new System.NotImplementedException() + _ => new NullProducer() }, - _ => throw new System.NotImplementedException() + _ => new NullProducer() }; public static IConstructor FindIConstructor(ShipType shipType, ConstructorType constructorType) => shipType switch { @@ -28,67 +28,67 @@ public static class ModuleFactory ConstructorType.Constructor1 => new CivilConstructor1(), ConstructorType.Constructor2 => new CivilConstructor2(), ConstructorType.Constructor3 => new CivilConstructor3(), - _ => throw new System.NotImplementedException() + _ => new NullConstructor() }, ShipType.FlagShip => constructorType switch { ConstructorType.Constructor1 => new FlagConstructor1(), - _ => throw new System.NotImplementedException() + _ => new NullConstructor() }, - _ => throw new System.NotImplementedException() + _ => new NullConstructor() }; public static IArmor FindIArmor(ShipType shipType, ArmorType armorType) => shipType switch { ShipType.CivilShip => armorType switch { ArmorType.Armor1 => new CivilArmor1(), - _ => throw new System.NotImplementedException() + _ => new NullArmor() }, ShipType.WarShip => armorType switch { ArmorType.Armor1 => new WarArmor1(), ArmorType.Armor2 => new WarArmor2(), ArmorType.Armor3 => new WarArmor3(), - _ => throw new System.NotImplementedException() + _ => new NullArmor() }, ShipType.FlagShip => armorType switch { ArmorType.Armor1 => new FlagArmor1(), ArmorType.Armor2 => new FlagArmor2(), ArmorType.Armor3 => new FlagArmor3(), - _ => throw new System.NotImplementedException() + _ => new NullArmor() }, - _ => throw new System.NotImplementedException() + _ => new NullArmor() }; public static IShield FindIShield(ShipType shipType, ShieldType shieldType) => shipType switch { ShipType.CivilShip => shieldType switch { ShieldType.Shield1 => new CivilShield1(), - _ => throw new System.NotImplementedException() + _ => new NullShield() }, ShipType.WarShip => shieldType switch { ShieldType.Shield1 => new WarShield1(), ShieldType.Shield2 => new WarShield2(), ShieldType.Shield3 => new WarShield3(), - _ => throw new System.NotImplementedException() + _ => new NullShield() }, ShipType.FlagShip => shieldType switch { ShieldType.Shield1 => new FlagShield1(), ShieldType.Shield2 => new FlagShield2(), ShieldType.Shield3 => new FlagShield3(), - _ => throw new System.NotImplementedException() + _ => new NullShield() }, - _ => throw new System.NotImplementedException() + _ => new NullShield() }; public static IWeapon FindIWeapon(ShipType shipType, WeaponType weaponType) => shipType switch { ShipType.CivilShip => weaponType switch { WeaponType.LaserGun => new CivilLaserGun(), - _ => throw new System.NotImplementedException() + _ => new NullWeapon() }, ShipType.WarShip => weaponType switch { @@ -97,7 +97,7 @@ public static class ModuleFactory WeaponType.ShellGun => new WarShellGun(), WeaponType.MissileGun => new WarMissileGun(), WeaponType.ArcGun => new WarArcGun(), - _ => throw new System.NotImplementedException() + _ => new NullWeapon() }, ShipType.FlagShip => weaponType switch { @@ -106,8 +106,8 @@ public static class ModuleFactory WeaponType.ShellGun => new FlagShellGun(), WeaponType.MissileGun => new FlagMissileGun(), WeaponType.ArcGun => new FlagArcGun(), - _ => throw new System.NotImplementedException() + _ => new NullWeapon() }, - _ => throw new System.NotImplementedException() + _ => new NullWeapon() }; } \ No newline at end of file diff --git a/logic/GameClass/GameObj/Modules/NullModules/NullArmor.cs b/logic/GameClass/GameObj/Modules/NullModules/NullArmor.cs new file mode 100644 index 00000000..1014e6ed --- /dev/null +++ b/logic/GameClass/GameObj/Modules/NullModules/NullArmor.cs @@ -0,0 +1,9 @@ +using Preparation.Interface; + +namespace GameClass.GameObj.Modules; + +public class NullArmor : IArmor +{ + public int ArmorHP => 0; + public int Cost => 0; +} diff --git a/logic/GameClass/GameObj/Modules/NullModules/NullConstructor.cs b/logic/GameClass/GameObj/Modules/NullModules/NullConstructor.cs new file mode 100644 index 00000000..dd88f76b --- /dev/null +++ b/logic/GameClass/GameObj/Modules/NullModules/NullConstructor.cs @@ -0,0 +1,9 @@ +using Preparation.Interface; + +namespace GameClass.GameObj.Modules; + +public class NullConstructor : IConstructor +{ + public int ConstructSpeed => 0; + public int Cost => 0; +} diff --git a/logic/GameClass/GameObj/Modules/NullModules/NullProducer.cs b/logic/GameClass/GameObj/Modules/NullModules/NullProducer.cs new file mode 100644 index 00000000..8e392b45 --- /dev/null +++ b/logic/GameClass/GameObj/Modules/NullModules/NullProducer.cs @@ -0,0 +1,9 @@ +using Preparation.Interface; + +namespace GameClass.GameObj.Modules; + +public class NullProducer : IProducer +{ + public int ProduceSpeed => 0; + public int Cost => 0; +} diff --git a/logic/GameClass/GameObj/Modules/NullModules/NullShield.cs b/logic/GameClass/GameObj/Modules/NullModules/NullShield.cs new file mode 100644 index 00000000..fada0b68 --- /dev/null +++ b/logic/GameClass/GameObj/Modules/NullModules/NullShield.cs @@ -0,0 +1,9 @@ +using Preparation.Interface; + +namespace GameClass.GameObj.Modules; + +public class NullShield : IShield +{ + public int ShieldHP => 0; + public int Cost => 0; +} diff --git a/logic/GameClass/GameObj/Modules/NullModules/NullWeapon.cs b/logic/GameClass/GameObj/Modules/NullModules/NullWeapon.cs new file mode 100644 index 00000000..451e3760 --- /dev/null +++ b/logic/GameClass/GameObj/Modules/NullModules/NullWeapon.cs @@ -0,0 +1,10 @@ +using Preparation.Interface; +using Preparation.Utility; + +namespace GameClass.GameObj.Modules; + +public class NullWeapon : IWeapon +{ + public BulletType BulletType => BulletType.Null; + public int Cost => 0; +}