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

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 BattleSettings OriginalBattleSettings;
public BattleSettings? OriginalBattleSettings;
public BattleSettings BattleSettings;
public BattleSettings? BattleSettings;
protected string BattleSettingsSavePath = new GodotPath("user://Settings/BattleSettings.json");

@ -2,11 +2,18 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
<Nullable>enable</Nullable>
<DefaultItemExcludes>$(DefaultItemExcludes);ScriptTemplates\**\*.cs</DefaultItemExcludes>
</PropertyGroup>
<ItemGroup>
<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="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>
</Project>

@ -2,13 +2,13 @@ namespace CMSGame
{
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()
{

@ -4,13 +4,13 @@ namespace CMSGame
{
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()
{
@ -27,7 +27,7 @@ namespace CMSGame
if (mouseButtonEvent.Pressed)
{
LastMousePressedPosition = mouseButtonEvent.Position;
var battleActionMenuRect = new Rect2(BattleActionMenu.Position, BattleActionMenu.Size);
var battleActionMenuRect = new Rect2(BattleActionMenu!.Position, BattleActionMenu.Size);
if (!battleActionMenuRect.HasPoint(LastMousePressedPosition))
{
BattleActionMenu.Visible = false;
@ -39,7 +39,7 @@ namespace CMSGame
public void ShowActionMenu(Vector2 position)
{
if (!BattleActionMenu.Visible)
if (!BattleActionMenu!.Visible)
{
BattleActionMenu.Position = position;
BattleActionMenu.Visible = true;

@ -2,21 +2,21 @@ namespace CMSGame
{
public partial class SettingsMenu : VBoxContainer
{
public GameSettings Settings;
public GameSettings? Settings;
public CheckBox PauseBattleWhenCharacterIsSelectedCheckBox;
public CheckBox? PauseBattleWhenCharacterIsSelectedCheckBox;
public override void _Ready()
{
this.GetAutoloadNode(ref Settings, nameof(GameSettings));
this.GetUniqueNode(ref PauseBattleWhenCharacterIsSelectedCheckBox, nameof(PauseBattleWhenCharacterIsSelectedCheckBox));
PauseBattleWhenCharacterIsSelectedCheckBox.ButtonPressed = Settings.BattleSettings.PauseBattleWhenCharacterIsSelected;
PauseBattleWhenCharacterIsSelectedCheckBox!.ButtonPressed = Settings!.BattleSettings!.PauseBattleWhenCharacterIsSelected;
}
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 List<Character> Characters;
public List<Character> Characters = new();
}
}

@ -1,6 +1,3 @@
using System;
using System.Threading.Tasks;
namespace CMSGame
{
public static class NodeExtension
@ -10,7 +7,7 @@ namespace CMSGame
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);
}
@ -20,7 +17,7 @@ namespace CMSGame
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);
}

@ -4,13 +4,13 @@ namespace CMSGame
{
public abstract class Action
{
public string Name;
public string Name = string.Empty;
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

@ -4,7 +4,7 @@ namespace CMSGame
{
public class Battle
{
public List<BattleParty> Parties;
public List<BattleParty> Parties = new();
public BattleParty Attacker;
@ -12,9 +12,11 @@ namespace CMSGame
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()

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

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

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

@ -2,9 +2,9 @@ namespace CMSGame
{
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);
}

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

@ -4,8 +4,8 @@ namespace CMSGame
{
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);
[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;
@ -41,7 +41,7 @@ namespace CMSGame
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)

@ -2,11 +2,11 @@ namespace CMSGame
{
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;
@ -17,7 +17,7 @@ namespace CMSGame
public override void _Ready()
{
this.GetUniqueNode(ref HUD, nameof(HUD));
PauseMenuPopup = HUD.PauseMenuPopup;
PauseMenuPopup = HUD!.PauseMenuPopup;
SettingsMenuPopup = HUD.SettingsMenuPopup;
}
@ -44,7 +44,7 @@ namespace CMSGame
public void UpdateUI()
{
HUD.BattleTimeLabel.Text = TimeHelper.FormatTime(Time);
HUD!.BattleTimeLabel!.Text = TimeHelper.FormatTime(Time);
}
private void TogglePauseBattle()
@ -56,7 +56,7 @@ namespace CMSGame
{
IsPauseBeforePauseMenuPopup = IsPause;
IsPause = true;
PauseMenuPopup.PopupCentered();
PauseMenuPopup!.PopupCentered();
}
private void On_PauseBattleButton_Pressed()
@ -71,12 +71,12 @@ namespace CMSGame
private void On_ResumeBattleButton_Pressed()
{
PauseMenuPopup.Hide();
PauseMenuPopup!.Hide();
}
private void On_SettingsMenuButton_Pressed()
{
SettingsMenuPopup.PopupCentered();
SettingsMenuPopup!.PopupCentered();
}
}
}

@ -2,7 +2,7 @@ namespace CMSGame
{
public partial class BattleSceneTest : Node3D
{
public BattleScene BattleScene;
public BattleScene? BattleScene;
public override void _Ready()
{
@ -11,7 +11,7 @@ namespace CMSGame
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