启用单元测试和空类型静态分析

master
lightyears 2 years ago
parent b9c1dbb5b0
commit 1ef96e7ff4
Signed by: lightyears
GPG Key ID: 98D80DDF26D4F2F9

@ -4,9 +4,9 @@ namespace CMSGame
{ {
public partial class GameSettings : Node public partial class GameSettings : Node
{ {
public BattleSettings OriginalBattleSettings; public BattleSettings? OriginalBattleSettings;
public BattleSettings BattleSettings; public BattleSettings? BattleSettings;
protected string BattleSettingsSavePath = new GodotPath("user://Settings/BattleSettings.json"); protected string BattleSettingsSavePath = new GodotPath("user://Settings/BattleSettings.json");

@ -2,11 +2,18 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net6.0</TargetFramework> <TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading> <EnableDynamicLoading>true</EnableDynamicLoading>
<Nullable>enable</Nullable>
<DefaultItemExcludes>$(DefaultItemExcludes);ScriptTemplates\**\*.cs</DefaultItemExcludes> <DefaultItemExcludes>$(DefaultItemExcludes);ScriptTemplates\**\*.cs</DefaultItemExcludes>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CommunityToolkit.Diagnostics" Version="8.1.0" /> <PackageReference Include="CommunityToolkit.Diagnostics" Version="8.1.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="sqlite-net-pcl" Version="1.8.116" /> <PackageReference Include="sqlite-net-pcl" Version="1.8.116" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -2,13 +2,13 @@ namespace CMSGame
{ {
public partial class BattleActionMenu : VBoxContainer public partial class BattleActionMenu : VBoxContainer
{ {
public VBoxContainer DynamicActions; public VBoxContainer? DynamicActions;
public Button ItemActionButton; public Button? ItemActionButton;
public Button SkillActionButton; public Button? SkillActionButton;
public Button CommandActionButton; public Button? CommandActionButton;
public override void _Ready() public override void _Ready()
{ {

@ -4,13 +4,13 @@ namespace CMSGame
{ {
public Vector2 LastMousePressedPosition; public Vector2 LastMousePressedPosition;
public Label BattleTimeLabel; public Label? BattleTimeLabel;
public Popup PauseMenuPopup; public Popup? PauseMenuPopup;
public Popup SettingsMenuPopup; public Popup? SettingsMenuPopup;
public BattleActionMenu BattleActionMenu; public BattleActionMenu? BattleActionMenu;
public override void _Ready() public override void _Ready()
{ {
@ -27,7 +27,7 @@ namespace CMSGame
if (mouseButtonEvent.Pressed) if (mouseButtonEvent.Pressed)
{ {
LastMousePressedPosition = mouseButtonEvent.Position; LastMousePressedPosition = mouseButtonEvent.Position;
var battleActionMenuRect = new Rect2(BattleActionMenu.Position, BattleActionMenu.Size); var battleActionMenuRect = new Rect2(BattleActionMenu!.Position, BattleActionMenu.Size);
if (!battleActionMenuRect.HasPoint(LastMousePressedPosition)) if (!battleActionMenuRect.HasPoint(LastMousePressedPosition))
{ {
BattleActionMenu.Visible = false; BattleActionMenu.Visible = false;
@ -39,7 +39,7 @@ namespace CMSGame
public void ShowActionMenu(Vector2 position) public void ShowActionMenu(Vector2 position)
{ {
if (!BattleActionMenu.Visible) if (!BattleActionMenu!.Visible)
{ {
BattleActionMenu.Position = position; BattleActionMenu.Position = position;
BattleActionMenu.Visible = true; BattleActionMenu.Visible = true;

@ -2,21 +2,21 @@ namespace CMSGame
{ {
public partial class SettingsMenu : VBoxContainer public partial class SettingsMenu : VBoxContainer
{ {
public GameSettings Settings; public GameSettings? Settings;
public CheckBox PauseBattleWhenCharacterIsSelectedCheckBox; public CheckBox? PauseBattleWhenCharacterIsSelectedCheckBox;
public override void _Ready() public override void _Ready()
{ {
this.GetAutoloadNode(ref Settings, nameof(GameSettings)); this.GetAutoloadNode(ref Settings, nameof(GameSettings));
this.GetUniqueNode(ref PauseBattleWhenCharacterIsSelectedCheckBox, nameof(PauseBattleWhenCharacterIsSelectedCheckBox)); this.GetUniqueNode(ref PauseBattleWhenCharacterIsSelectedCheckBox, nameof(PauseBattleWhenCharacterIsSelectedCheckBox));
PauseBattleWhenCharacterIsSelectedCheckBox.ButtonPressed = Settings.BattleSettings.PauseBattleWhenCharacterIsSelected; PauseBattleWhenCharacterIsSelectedCheckBox!.ButtonPressed = Settings!.BattleSettings!.PauseBattleWhenCharacterIsSelected;
} }
public void On_PauseBattleWhenCharacterIsSelectedCheckBox_Toggled(bool pressed) public void On_PauseBattleWhenCharacterIsSelectedCheckBox_Toggled(bool pressed)
{ {
Settings.BattleSettings.PauseBattleWhenCharacterIsSelected = pressed; Settings!.BattleSettings!.PauseBattleWhenCharacterIsSelected = pressed;
} }
} }
} }

@ -4,6 +4,6 @@ namespace CMSGame
{ {
public class GameSave public class GameSave
{ {
public List<Character> Characters; public List<Character> Characters = new();
} }
} }

@ -1,6 +1,3 @@
using System;
using System.Threading.Tasks;
namespace CMSGame namespace CMSGame
{ {
public static class NodeExtension public static class NodeExtension
@ -10,7 +7,7 @@ namespace CMSGame
return parent.GetNode<T>($"/root/{autoloadName}"); return parent.GetNode<T>($"/root/{autoloadName}");
} }
public static void GetAutoloadNode<T>(this Node parent, ref T node, string autoloadName) where T : Node public static void GetAutoloadNode<T>(this Node parent, ref T? node, string autoloadName) where T : Node
{ {
node = parent.GetAutoloadNode<T>(autoloadName); node = parent.GetAutoloadNode<T>(autoloadName);
} }
@ -20,7 +17,7 @@ namespace CMSGame
return parent.GetNode<T>($"%{uniqueName}"); return parent.GetNode<T>($"%{uniqueName}");
} }
public static void GetUniqueNode<T>(this Node parent, ref T node, string uniqueName) where T : Node public static void GetUniqueNode<T>(this Node parent, ref T? node, string uniqueName) where T : Node
{ {
node = parent.GetUniqueNode<T>(uniqueName); node = parent.GetUniqueNode<T>(uniqueName);
} }

@ -4,13 +4,13 @@ namespace CMSGame
{ {
public abstract class Action public abstract class Action
{ {
public string Name; public string Name = string.Empty;
public ActionTargetTypes TargetType; public ActionTargetTypes TargetType;
public List<IActionTarget> Targets; public List<IActionTarget> Targets = new();
public IActionTarget Target => Targets.Count > 0 ? Targets[0] : null; public IActionTarget? Target => Targets.Count > 0 ? Targets[0] : null;
} }
public enum ActionTargetTypes public enum ActionTargetTypes

@ -4,7 +4,7 @@ namespace CMSGame
{ {
public class Battle public class Battle
{ {
public List<BattleParty> Parties; public List<BattleParty> Parties = new();
public BattleParty Attacker; public BattleParty Attacker;
@ -12,9 +12,11 @@ namespace CMSGame
public BattleParty PlayerParty; public BattleParty PlayerParty;
public Battle() public Battle(BattleParty attacker, BattleParty defender, BattleParty playerParty)
{ {
// load characters of the attacker and defender; Attacker = attacker;
Defender = defender;
PlayerParty = playerParty;
} }
public void Begin() public void Begin()

@ -4,7 +4,7 @@ namespace CMSGame
{ {
public class BattleCharacter public class BattleCharacter
{ {
public List<BattleGoal> Goals; public List<BattleGoal> Goals = new();
public Character Character; public Character Character;

@ -10,6 +10,6 @@ namespace CMSGame
public bool IsPlayerParty; public bool IsPlayerParty;
public List<BattleCharacter> Characters; public List<BattleCharacter> Characters = new();
} }
} }

@ -2,9 +2,9 @@ namespace CMSGame
{ {
public class Character public class Character
{ {
public string FamilyName; public string FamilyName = string.Empty;
public string GivenName; public string GivenName = string.Empty;
public string Name => FamilyName + GivenName; public string Name => FamilyName + GivenName;

@ -2,9 +2,9 @@ namespace CMSGame
{ {
public abstract class Effect public abstract class Effect
{ {
public string Name; public string Name = string.Empty;
public string Description; public string Description = string.Empty;
public abstract void Perform(Character character); public abstract void Perform(Character character);
} }

@ -2,7 +2,7 @@ namespace CMSGame
{ {
public class Goal public class Goal
{ {
public string Name; public string Name = string.Empty;
public bool IsValid; public bool IsValid;

@ -4,8 +4,8 @@ namespace CMSGame
{ {
public abstract class Skill public abstract class Skill
{ {
public string Name; public string Name = string.Empty;
public List<Effect> Effects; public List<Effect> Effects = new();
} }
} }

@ -6,15 +6,15 @@ namespace CMSGame
public delegate void MousePressedEventHandler(Vector3 position); public delegate void MousePressedEventHandler(Vector3 position);
[Export] [Export]
public Texture SpriteTexture; public Texture SpriteTexture = new();
public BattleFieldPosition BattleFieldPosition; public BattleFieldPosition? BattleFieldPosition;
public Character Character; public Character? Character;
public Sprite3D Sprite3D; public Sprite3D? Sprite3D;
public Label3D StatusLabel; public Label3D? StatusLabel;
public int ActionPoint; public int ActionPoint;
@ -41,7 +41,7 @@ namespace CMSGame
public void UpdateUI() public void UpdateUI()
{ {
StatusLabel.Text = $"HP {120}\nAP {ActionPoint}"; StatusLabel!.Text = $"HP {120}\nAP {ActionPoint}";
} }
public override void _InputEvent(Camera3D camera, InputEvent @event, Vector3 position, Vector3 normal, int shapeIdx) public override void _InputEvent(Camera3D camera, InputEvent @event, Vector3 position, Vector3 normal, int shapeIdx)

@ -2,11 +2,11 @@ namespace CMSGame
{ {
public partial class BattleScene : Node3D public partial class BattleScene : Node3D
{ {
public BattleHUD HUD; public BattleHUD? HUD;
public Popup PauseMenuPopup; public Popup? PauseMenuPopup;
public Popup SettingsMenuPopup; public Popup? SettingsMenuPopup;
public double Time; public double Time;
@ -17,7 +17,7 @@ namespace CMSGame
public override void _Ready() public override void _Ready()
{ {
this.GetUniqueNode(ref HUD, nameof(HUD)); this.GetUniqueNode(ref HUD, nameof(HUD));
PauseMenuPopup = HUD.PauseMenuPopup; PauseMenuPopup = HUD!.PauseMenuPopup;
SettingsMenuPopup = HUD.SettingsMenuPopup; SettingsMenuPopup = HUD.SettingsMenuPopup;
} }
@ -44,7 +44,7 @@ namespace CMSGame
public void UpdateUI() public void UpdateUI()
{ {
HUD.BattleTimeLabel.Text = TimeHelper.FormatTime(Time); HUD!.BattleTimeLabel!.Text = TimeHelper.FormatTime(Time);
} }
private void TogglePauseBattle() private void TogglePauseBattle()
@ -56,7 +56,7 @@ namespace CMSGame
{ {
IsPauseBeforePauseMenuPopup = IsPause; IsPauseBeforePauseMenuPopup = IsPause;
IsPause = true; IsPause = true;
PauseMenuPopup.PopupCentered(); PauseMenuPopup!.PopupCentered();
} }
private void On_PauseBattleButton_Pressed() private void On_PauseBattleButton_Pressed()
@ -71,12 +71,12 @@ namespace CMSGame
private void On_ResumeBattleButton_Pressed() private void On_ResumeBattleButton_Pressed()
{ {
PauseMenuPopup.Hide(); PauseMenuPopup!.Hide();
} }
private void On_SettingsMenuButton_Pressed() private void On_SettingsMenuButton_Pressed()
{ {
SettingsMenuPopup.PopupCentered(); SettingsMenuPopup!.PopupCentered();
} }
} }
} }

@ -2,7 +2,7 @@ namespace CMSGame
{ {
public partial class BattleSceneTest : Node3D public partial class BattleSceneTest : Node3D
{ {
public BattleScene BattleScene; public BattleScene? BattleScene;
public override void _Ready() public override void _Ready()
{ {
@ -11,7 +11,7 @@ namespace CMSGame
public void On_BattleCharacter_MousePressed(Vector3 _) public void On_BattleCharacter_MousePressed(Vector3 _)
{ {
BattleScene.HUD.ShowActionMenu(BattleScene.HUD.LastMousePressedPosition); BattleScene!.HUD.ShowActionMenu(BattleScene.HUD.LastMousePressedPosition);
} }
} }
} }

@ -0,0 +1,13 @@
using Xunit;
namespace CMSGame.Tests
{
public class UnitTest
{
[Fact]
public void Test()
{
Console.WriteLine("Are you going to test me out?");
}
}
}
Loading…
Cancel
Save