Traveller/scripts/Config.cs
Cold-Mint 39ca716e3d
Conduct code reviews.
进行代码审查。
2024-06-05 21:38:45 +08:00

394 lines
11 KiB
C#

using System;
using System.IO;
using System.Text;
using Godot;
using Environment = System.Environment;
namespace ColdMint.scripts;
public static class Config
{
/// <summary>
/// <para>ID of the behavior tree</para>
/// <para>行为树的ID</para>
/// </summary>
public static class BehaviorTreeId
{
/// <summary>
/// <para>巡逻</para>
/// <para>Patrol</para>
/// </summary>
public const string? Patrol = "Patrol";
}
/// <summary>
/// <para>BehaviorTreeResult</para>
/// <para>行为树的结果</para>
/// </summary>
public static class BehaviorTreeResult
{
/// <summary>
/// <para>Running</para>
/// <para>运行中</para>
/// </summary>
public const int Running = 0;
/// <summary>
/// <para>Success</para>
/// <para>成功</para>
/// </summary>
public const int Success = 1;
/// <summary>
/// <para>Failure</para>
/// <para>失败</para>
/// </summary>
public const int Failure = 2;
}
/// <summary>
/// <para>Camp ID</para>
/// <para>阵营ID</para>
/// </summary>
public static class CampId
{
/// <summary>
/// <para>Default camp</para>
/// <para>表示默认阵营</para>
/// </summary>
public const string Default = "Default";
/// <summary>
/// <para>Demon camp</para>
/// <para>魔族阵营</para>
/// </summary>
public const string Mazoku = "Mazoku";
/// <summary>
/// <para>Aborigines</para>
/// <para>原住民</para>
/// </summary>
public const string Aborigines = "Aborigines";
}
/// <summary>
/// <para>How much blood does a heart represent</para>
/// <para>一颗心代表多少血量</para>
/// </summary>
public const int HeartRepresentsHealthValue = 4;
/// <summary>
/// <para>The maximum number of stacked items in a single inventory</para>
/// <para>单个物品栏最大堆叠的物品数量</para>
/// </summary>
public const int MaxStackQuantity = 99;
/// <summary>
/// <para>Text change buffering Time How long does it take to execute the actual event after an event with a text change listener is triggered? (Anti-shake processing time), unit: milliseconds</para>
/// <para>当添加了文本改变监听器的事件被触发后,多长时间后执行实际事件?(防抖处理时长),单位:毫秒</para>
/// </summary>
public const long TextChangesBuffetingDuration = 300;
/// <summary>
/// <para>Operation prompts, function key text color</para>
/// <para>操作提示内,功能键文本颜色</para>
/// </summary>
public const string OperationTipActionColor = "#2b8a3e";
/// <summary>
/// <para>Company/Creator name</para>
/// <para>公司/创作者名字</para>
/// </summary>
public const string CompanyName = "ColdMint";
/// <summary>
/// <para>How many item slots are there on the shortcut bar</para>
/// <para>快捷栏上有多少个物品槽</para>
/// </summary>
public const int HotBarSize = 9;
/// <summary>
/// <para>UserID</para>
/// <para>用户ID</para>
/// </summary>
public const string UserId = "DefaultUser";
/// <summary>
/// <para>Whether version isolation is enabled</para>
/// <para>是否启用版本隔离</para>
/// </summary>
public const bool EnableVersionIsolation = true;
/// <summary>
/// <para>Default version name</para>
/// <para>默认的版本名称</para>
/// </summary>
/// <remarks>
///<para>Used when version isolation is disabled</para>
///<para>在禁用版本隔离时用的</para>
/// </remarks>
public const string DefaultVersionName = "Default";
/// <summary>
/// <para>IsDebug</para>
/// <para>是否为Debug模式</para>
/// </summary>
/// <returns></returns>
public static bool IsDebug()
{
return OS.HasFeature("debug");
}
/// <summary>
/// <para>Whether to run on the editor</para>
/// <para>是否在编辑器上运行</para>
/// </summary>
/// <returns></returns>
public static bool IsEditor()
{
return OS.HasFeature("editor");
}
/// <summary>
/// <para>Room Injector ID</para>
/// <para>房间注入器ID</para>
/// </summary>
public static class RoomInjectionProcessorId
{
/// <summary>
/// <para>Chance</para>
/// <para>概率的</para>
/// </summary>
public const string Chance = "Chance";
/// <summary>
/// <para>TimeInterval</para>
/// <para>时间范围的</para>
/// </summary>
public const string TimeInterval = "TimeInterval";
}
public enum OsEnum
{
//unknown
//未知
Unknown,
//Runs on Android (non-web browser)
//在 Android 上运行(非 Web 浏览器)
Android,
//Runs on Linux (non-web browser)
//在 Linux 上运行(非 Web 浏览器)
Linux,
//Runs on macOS (non-Web browser)
//在 macOS 上运行(非 Web 浏览器)
Macos,
//Runs on iOS (non-Web browser)
//在 iOS 上运行(非 Web 浏览器)
Ios,
//Runs on Windows
//在 Windows 上运行
Windows,
//The host operating system is a web browser
//宿主操作系统是网页浏览器
Web
}
/// <summary>
/// <para>Get what platform is currently running on</para>
/// <para>获取当前在什么平台上运行</para>
/// </summary>
/// <returns></returns>
public static OsEnum GetOs()
{
if (OS.HasFeature("windows"))
{
return OsEnum.Windows;
}
if (OS.HasFeature("android"))
{
return OsEnum.Android;
}
if (OS.HasFeature("linux"))
{
return OsEnum.Linux;
}
if (OS.HasFeature("web"))
{
return OsEnum.Web;
}
if (OS.HasFeature("macos"))
{
return OsEnum.Macos;
}
if (OS.HasFeature("ios"))
{
return OsEnum.Ios;
}
return OsEnum.Unknown;
}
/// <summary>
/// <para>Get the game version</para>
/// <para>获取游戏版本</para>
/// </summary>
/// <returns></returns>
public static string GetVersion()
{
var stringBuilder = new StringBuilder();
stringBuilder.Append(ProjectSettings.GetSetting("application/config/version").AsString());
stringBuilder.Append(IsDebug() ? "_debug" : "_release");
return stringBuilder.ToString();
}
/// <summary>
/// <para>GetGameDataDirectory</para>
/// <para>获取游戏数据目录</para>
/// </summary>
/// <returns></returns>
public static string GetGameDataDirectory()
{
if (EnableVersionIsolation)
{
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
ProjectSettings.GetSetting("application/config/name").AsString(), UserId,
ProjectSettings.GetSetting("application/config/version").AsString());
}
else
{
return Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), CompanyName,
ProjectSettings.GetSetting("application/config/name").AsString(), UserId,
DefaultVersionName);
}
}
/// <summary>
/// <para>Get the export directory for the level graph</para>
/// <para>获取关卡图的导出目录</para>
/// </summary>
/// <returns></returns>
public static string GetLevelGraphExportDirectory()
{
return Path.Join(GetGameDataDirectory(), "LevelGraphs");
}
/// <summary>
/// <para>The initial year of creating this game</para>
/// <para>创建此游戏的初始年份</para>
/// </summary>
public const int CreationYear = 2024;
/// <summary>
/// <para>Tile map, dimensions of individual tiles</para>
/// <para>瓦片地图,单个瓦片的尺寸</para>
/// </summary>
public const int CellSize = 32;
/// <summary>
/// <para>The maximum health of the default creature</para>
/// <para>默认生物的最大血量</para>
/// </summary>
public const int DefaultMaxHp = 100;
/// <summary>
/// <para>When a creature takes damage, how long to hide the bloodline again</para>
/// <para>生物受到伤害时,要在多长时间后再次隐藏血条</para>
/// </summary>
public static TimeSpan HealthBarDisplaysTime = TimeSpan.FromSeconds(2);
/// <summary>
/// <para>Text size of critical hit damage</para>
/// <para>暴击伤害的文本大小</para>
/// </summary>
public const int CritDamageTextSize = 33;
/// <summary>
/// <para>Crit damage multiplier</para>
/// <para>暴击伤害乘数</para>
/// </summary>
/// <remarks>
///<para>How much damage to increase after a critical strike</para>
///<para>造成暴击后要将伤害提升到原有的多少倍</para>
/// </remarks>
public const float CriticalHitMultiplier = 2f;
/// <summary>
/// <para>Text size of normal damage</para>
/// <para>普通伤害的文本大小</para>
/// </summary>
public const int NormalDamageTextSize = 22;
/// <summary>
/// <para>Horizontal speed of damage numbers</para>
/// <para>伤害数字的水平速度</para>
/// </summary>
public const int HorizontalSpeedOfDamageNumbers = 3;
/// <summary>
/// <para>VerticalVelocityOfDamageNumbers</para>
/// <para>伤害数字的垂直速度</para>
/// </summary>
public const int VerticalVelocityOfDamageNumbers = 5;
/// <summary>
/// <para>Physical collision layer number</para>
/// <para>物理碰撞层 序号</para>
/// </summary>
public static class LayerNumber
{
public const int RoomArea = 1;
public const int Ground = 2;
public const int Player = 3;
public const int Weapon = 4;
public const int Projectile = 5;
public const int Platform = 6;
public const int Mob = 7;
}
public static class RoomDataTag
{
/// <summary>
/// <para>Mark the starting room</para>
/// <para>起点房间的标记</para>
/// </summary>
public const string StartingRoom = "StartingRoom";
}
/// <summary>
/// <para>Specify the type of damage used in the game</para>
/// <para>指定游戏内使用的伤害类型</para>
/// </summary>
public static class DamageType
{
/// <summary>
/// <para>physical injury</para>
/// <para>物理伤害</para>
/// </summary>
public const int Physical = 1;
/// <summary>
/// <para>Magic damage</para>
/// <para>魔法伤害</para>
/// </summary>
public const int Magic = 2;
}
}